커뮤니티
시스템 매매 수식을 잘 못 쓴것 같은데 봐주십시요
2016-12-12 15:51:56
131
글번호 104902
안녕하세요.
아래와 같이 수식을 작성했는데 제 의도와 다르게 작동해서 질문드립니다.
vup1_high26 이라는 선이 있습니다.
가격이 상승하다가 이 선에 닿거나 돌파할 때 매도를 하는 식을 만들려고 합니다.
원하는 규칙
1. 한번 선을 돌파해 올라갔다 내려와 재상승한 경우는 매도를 하지 않습니다.
2. 돌파해 올라가는 것만 잡습니다.
3. 매일 정해진 시간에만 매매합니다.
제가 작성한 아래 식으로 돌려보면, 캡쳐2번과 같이 선을 한번 돌파한 뒤 하락했다가 재상승 해야지만이 매도주문이 들어갑니다.
캡쳐1번이 제가 원하는 그림인데 그럴 때는 전혀 매도주문이 안들어갑니다.
수식이 어느부분이 잘못되었을까요? 도움 부탁드립니다.
//변수 설정
var : vup1_high26(0), vup1_uflag1(0), vup1_tflag1(0);
input : profit(30), lose(40), entry_time(15);
//매일 변수 초기화 시키기
If Bdate!=Bdate[1] Then{
vup1_uflag1=0;}
//매매시간 지정
if sTime>101700 and sTime<=110000 Then{
vup1_tflag1=0;}
Else{
vup1_tflag1=1;}
//매매식
If H<vup1_high26 and vup1_uflag1==0 and vup1_tflag1==0 Then {
//선보다 작고, 전번 매매가 없고, 시간대 조건이 맞을 때
Sell("vup1_매도주문", AtLimit, vup1_high26-2); //2틱 선진입
SetStopLoss(lose, PointStop); //손절설정
SetStopProfittarget(profit, PointStop); //익절설정
vup1_uflag1=1; //다음번 매매 금지
}
If MarketPosition==-1 Then{ //진입 포지션이 있을 경우
If BarsSinceEntry>=entry_time Then{ //봉 15개 지났으면
If Abs(EntryPrice-C)<=10 and Abs(EntryPrice-C)>=0 Then{ //손익절 10틱 이하일때
ExitShort("vup1_본청", OnClose);} //그자리에서 청산
Else{
If Highest(H, entry_time)<EntryPrice Then{ //봉15개 고가가 진입가보다 작다면
SetStopLoss(Highest(H, entry_time)-EntryPrice, PointStop);}} //손절을 전고가-진입가로 변경
}
}
If Stime>=105500 and MarketPosition==-1 Then{ //만약 현재시간이 10시 55분이고 매도 포지션 들고있다면
ExitShort("vup1_시간손절", OnClose);} //그자리에서 청산
- 1. 20161212_154402.png (0.03 MB)
- 2. 20161212_154940.png (0.02 MB)
답변 1
예스스탁 예스스탁 답변
2016-12-13 10:37:07
안녕하세요
예스스탁입니다.
atstop이나 atlimit은 봉 완성시에 가격을 셋팅하고
다음봉의 현재가와 비교하게 됩니다.
작성하신 식에서는
If H < vup1_high26 and vup1_uflag1==0 and vup1_tflag1==0 Then {
Sell("vup1_매도주문", AtLimit, vup1_high26-2);
vup1_uflag1 = 1;
}
if 조건이 만족을 하면 vup1_high26-2가격이 셋팅되고
다음봉 현재가가 해당 가격 이상의 시세가 발생하면 매도신호가 발생합니다.
다음봉의 시세가 충족되지 않으면 신호발생이 없지만
vup1_uflag1은 1을 저장받게 됩니다.
즉 vup1_uflag1는 sell과 관계가 잇는 것이 아니고
if문조건 충족과 관계가 있습니다.
10시17분 이후에 if조건이 만족하면 1로 변경이 되므로
이후에 진입을 막게 됩니다.
문의하신 내용은 당일 진입횟수로 카운트해 처리하셔야 합니다.
당일 처음 vup1_high26 아래에서 상승해 vup1_high26-2 이상의 시세가 발생할 때 매도하게
변경했습니다.
//변수 설정
var : vup1_high26(0), vup1_uflag1(0), vup1_tflag1(0);
input : profit(30), lose(40), entry_time(15);
var : T1(0),entry(0);
//매일 변수 초기화 시키기
If Bdate!=Bdate[1] Then{
T1 = TotalTrades;
vup1_uflag1=0;}
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = (TotalTrades-T1)+1;
//매매시간 지정
if sTime>101700 and sTime<=110000 Then{
vup1_tflag1=0;}
Else{
vup1_tflag1=1;}
vup1_high26 = (highest(H,26)+lowest(L,26))/2;
//매매식
If H < vup1_high26 and entry==0 and vup1_tflag1==0 Then {
//선보다 작고, 전번 매매가 없고, 시간대 조건이 맞을 때
Sell("vup1_매도주문", AtLimit, vup1_high26-2); //2틱 선진입
SetStopLoss(lose, PointStop); //손절설정
SetStopProfittarget(profit, PointStop); //익절설정
}
if sdate == 20161129 Then
MessageLog("%s %s %s",H < vup1_high26,vup1_uflag1==0,vup1_tflag1==0);
If MarketPosition==-1 Then{ //진입 포지션이 있을 경우
If BarsSinceEntry>=entry_time Then{ //봉 15개 지났으면
If Abs(EntryPrice-C)<=10 and Abs(EntryPrice-C)>=0 Then{ //손익절 10틱 이하일때
ExitShort("vup1_본청", OnClose);} //그자리에서 청산
Else{
If Highest(H, entry_time)<EntryPrice Then{ //봉15개 고가가 진입가보다 작다면
SetStopLoss(Highest(H, entry_time)-EntryPrice, PointStop);}} //손절을 전고가-진입가로 변경
}
}
If Stime>=105500 and MarketPosition==-1 Then{ //만약 현재시간이 10시 55분이고 매도 포지션 들고있다면
ExitShort("vup1_시간손절", OnClose);} //그자리에서 청산
즐거운 하루되세요
> loaded 님이 쓴 글입니다.
> 제목 : 시스템 매매 수식을 잘 못 쓴것 같은데 봐주십시요
> 안녕하세요.
아래와 같이 수식을 작성했는데 제 의도와 다르게 작동해서 질문드립니다.
vup1_high26 이라는 선이 있습니다.
가격이 상승하다가 이 선에 닿거나 돌파할 때 매도를 하는 식을 만들려고 합니다.
원하는 규칙
1. 한번 선을 돌파해 올라갔다 내려와 재상승한 경우는 매도를 하지 않습니다.
2. 돌파해 올라가는 것만 잡습니다.
3. 매일 정해진 시간에만 매매합니다.
제가 작성한 아래 식으로 돌려보면, 캡쳐2번과 같이 선을 한번 돌파한 뒤 하락했다가 재상승 해야지만이 매도주문이 들어갑니다.
캡쳐1번이 제가 원하는 그림인데 그럴 때는 전혀 매도주문이 안들어갑니다.
수식이 어느부분이 잘못되었을까요? 도움 부탁드립니다.
//변수 설정
var : vup1_high26(0), vup1_uflag1(0), vup1_tflag1(0);
input : profit(30), lose(40), entry_time(15);
//매일 변수 초기화 시키기
If Bdate!=Bdate[1] Then{
vup1_uflag1=0;}
//매매시간 지정
if sTime>101700 and sTime<=110000 Then{
vup1_tflag1=0;}
Else{
vup1_tflag1=1;}
//매매식
If H<vup1_high26 and vup1_uflag1==0 and vup1_tflag1==0 Then {
//선보다 작고, 전번 매매가 없고, 시간대 조건이 맞을 때
Sell("vup1_매도주문", AtLimit, vup1_high26-2); //2틱 선진입
SetStopLoss(lose, PointStop); //손절설정
SetStopProfittarget(profit, PointStop); //익절설정
vup1_uflag1=1; //다음번 매매 금지
}
If MarketPosition==-1 Then{ //진입 포지션이 있을 경우
If BarsSinceEntry>=entry_time Then{ //봉 15개 지났으면
If Abs(EntryPrice-C)<=10 and Abs(EntryPrice-C)>=0 Then{ //손익절 10틱 이하일때
ExitShort("vup1_본청", OnClose);} //그자리에서 청산
Else{
If Highest(H, entry_time)<EntryPrice Then{ //봉15개 고가가 진입가보다 작다면
SetStopLoss(Highest(H, entry_time)-EntryPrice, PointStop);}} //손절을 전고가-진입가로 변경
}
}
If Stime>=105500 and MarketPosition==-1 Then{ //만약 현재시간이 10시 55분이고 매도 포지션 들고있다면
ExitShort("vup1_시간손절", OnClose);} //그자리에서 청산
다음글
이전글