커뮤니티
문의드립니다
2015-08-20 15:48:50
129
글번호 89719
안녕하세요
아래 시스템식을 시뮬레이션한결과 궁굼한점 문의드립니다.
1)시스템의 내용를 제가 설명하여 운영자님깨서 작성하여 주셨는데도
코딩된 내용이 잘이해가 되지않아 번거러우시더라도 설명좀 부탁드립니다.
2)식을 적용하여보니 익절에서(트레일링스탑)청산되는 시점이 목표가를
돌파(이탈)한 캔들의 최고점에서 1틱움직이면 청산되는데 이것이 맞는지요?
저는 목표가를 돌파(이탈)하고 1틱 변화가 생기면 청산 되는줄 알았는데
차트신호는 돌파한 캔들의 최고점에서1틱 전환시 신호가표시되어 무었이
맞는건지 식을 잘이해못해서 설명좀 부탁드립니다
3)손익포인트가 작을경우 슬리피지는 얼마로 설정 해야한나요.
감사합니다.
==========================================================================
input : af1(0.01),max1(0.1);
input : S1(10),P1(20);
var : para1(0),T1(0);
var : Bcond1(false);
var : Scond1(false);
para1 = sar(af1,max1);
if stime >= 170000 or stime < 160000 Then{
if crossup(C,para1) Then{
Bcond1 = false;
var1 = H;
T1 = 1;
}
if CrossDown(C,para1) Then{
Scond1 = false;
var1 = L;
T1 = -1;
}
if T1 == 1 and T1[1] == 1 and Bcond1 == false and H >= var1[1]+PriceScale*1 Then
Bcond1 = true;
if T1 == -1 and T1[1] == -1 and Scond1 == false and L <= var1[1]-PriceScale*1 Then
Scond1 = true;
if T1 == 1 and Bcond1 == false Then
buy("B1",AtStop,var1+PriceScale*1);
if T1 == -1 and Scond1 == false Then
sell("S1",AtStop,var1-PriceScale*1);
if MarketPosition == 1 then{
if CrossDown(c,para1) Then
exitlong("bx1",OnClose,def);
}
if MarketPosition == -1 then{
Scond1 = true;
if crossup(c,para1) Then
ExitShort("sx1",OnClose,def,"S1");
}
}
SetStopLoss(PriceScale*S1,PointStop);
SetStopTrailing(PriceScale*1,PriceScale*P1,PointStop);
if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{
exitlong("bexit");
ExitShort("sexit");
}
답변 1
예스스탁 예스스탁 답변
2015-08-20 16:55:21
안녕하세요
예스스탁입니다.
1
우선 수식에 주석을 붙여 드립니다.
if MarketPosition == -1 then{
Scond1 = true;
if crossup(c,para1) Then
ExitShort("sx1",OnClose,def,"S1");
}
매도청산쪽에 불필요한 내용이 있어 삭제했습니다.
input : af1(0.01),max1(0.1);
input : S1(10),P1(20);
var : para1(0),T1(0);
var : Bcond1(false);
var : Scond1(false);
#파리볼릭값
para1 = sar(af1,max1);
#17시에~다음날 16시 사이
if stime >= 170000 or stime < 160000 Then{
#종가가 파라볼릭을 상향돌파하면
if crossup(C,para1) Then{
Bcond1 = false; #매수진입여부 판단 변수는 false로 초기화
var1 = H; #var1에 고가 저장
T1 = 1; #돌파방향을 판단하는 변수는 1
}
#종가가 파라볼릭을 하향이탈하면
if CrossDown(C,para1) Then{
Scond1 = false; #매도진입여부 판단 변수는 false로 초기화
var1 = L; #var1에 저가저장
T1 = -1; #돌파방향 판단하는 변수는 1
}
#상향돌파이후(돌파이후2번째봉부터) Bcond1이 false인 상태에서
#돌파봉 고가보다 1틱이상 큰 시세가 발생했으면 Bcond1은 true(매수진입발생상황)
if T1 == 1 and T1[1] == 1 and Bcond1 == false and H >= var1[1]+PriceScale*1 Then
Bcond1 = true;
#하향이탈후(이탈이후2번째봉부터) Scond1이 false인 상태에서
#이탈봉 저가보다 1틱이상 작은 시세가 발생했으면 Scond1은 true(매도진입발생상황)
if T1 == -1 and T1[1] == -1 and Scond1 == false and L <= var1[1]-PriceScale*1 Then
Scond1 = true;
#상향돌파이후 매수진입이 한번도 없는 상태에서 돌파봉 고가보다 1틱이상 큰 시세가 발생하면 즉시 매수진입
if T1 == 1 and Bcond1 == false Then
buy("B1",AtStop,var1+PriceScale*1);
#하향이탈이후 매도진입이 한번도 없는 상태에서 이탈봉 저가보다 1틱이상 작은 시세가 발생하면 즉시 매도진입
if T1 == -1 and Scond1 == false Then
sell("S1",AtStop,var1-PriceScale*1);
#매수포지션 진행중 종가가 파라볼릭을 하향이탈하면 청산
if MarketPosition == 1 then{
if CrossDown(c,para1) Then
exitlong("bx1");
}
#매도포지션 진행중 종가가 파라볼릭을 상향돌파하면 청산
if MarketPosition == -1 then{
if crossup(c,para1) Then
ExitShort("sx1");
}
}
#S1틱 손실이면 즉시 청산
SetStopLoss(PriceScale*S1,PointStop);
#P1틱 이상 수익이후에 최고수익지점에서 1틱 반등하면 청산
SetStopTrailing(PriceScale*1,PriceScale*P1,PointStop);
#16시가 되면 모든포지션 청산
if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{
exitlong("bexit");
ExitShort("sexit");
}
2.
트레일링 스탑은 실시간 봉에서는
한틱 한틱 시세를 수신하면서 동작하므로
지정한 수익조건이 만족하고 1틱 반대로 움직이면 즉시 청산됩니다.
다만 시뮬레이션에서는 봉안에 모든 틱이 있지 않고 시고저종값만 있습니다.
봉이 내부에서 어떻게 움직였는지 알수가 없어
과거봉은 그 움직임에 대한 가설을 정해놓고 동작을 하게 됩니다.
아래 링크는 랭귀지 도움말 중 과거봉의 움직임에 대한 가설내용입니다.
http://www.yesstock.com/YesTrader/YesLanguage/YesLanguage_help/4_7.htm
봉에 값이 시/고/저/종만 있으므로
최고 수익 지점이 고가와 저가로 계산이 되고
이 값에서 1틱 낮은, 혹은 높은값에 청산이 나온것으로 시뮬레이션 됩니다.
이런이유로 트레일링스탑은 실전매매대비해 시뮬레이션 리포트가
손익이 높게 나오는 경향이 있습니다.
아래 링크는 랭귀지 도움말 중 실전매매와 시뮬레이션의 차이가 발생할수 있는
항목중 트레일링 스탑에 관련된 내용입니다.
http://www.yesstock.com/YesTrader/YesLanguage/YesLanguage_help/4_9_1.htm
시뮬레이션과 실전매매를 동일하게 보고자 하시면
SetStopTrailing 함수 대신해서 아래식을 사용하셔야 합니다.
SetStopTrailing은 실전에서 하나의 봉에서 수익과 감소를 다 체크해서 신호가 발생하지만
아래식은 완성봉기준으로 최고수익지점의 고가와 저가값을 기준으로 다음봉이 1틱 하락/상승하면
즉시 청산됩니다.
#최근 완성봉 기준 매수진입이후 최고가에서 다음봉이 1틱하락하는 시세가 발생하면 매수청산
if MarketPosition == 1 and highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*P1 Then
exitlong("btr",AtStop,highest(H,BarsSinceEntry)-PriceScale*1);
#최근 완성봉 기준 매도진입이후 최저가에서 다음봉이 1틱 상승하는 시세가 발생하면 매도청산
if MarketPosition == -1 and Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*P1 Then
exitlong("str",AtStop,Lowest(L,BarsSinceEntry)+PriceScale*1);
3.
슬리피지는 손익포인트의 크기와는 관계없습니다.
리포트의 손익에 신호가격와 체결가격과의 괴리를 보정해 보기위한 설저잉므로
진입청산 모두 반틱으로 지정하고 시뮬레이션 하시면 됩니다.
즐거운 하루되세요
> 베드로 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 안녕하세요
아래 시스템식을 시뮬레이션한결과 궁굼한점 문의드립니다.
1)시스템의 내용를 제가 설명하여 운영자님깨서 작성하여 주셨는데도
코딩된 내용이 잘이해가 되지않아 번거러우시더라도 설명좀 부탁드립니다.
2)식을 적용하여보니 익절에서(트레일링스탑)청산되는 시점이 목표가를
돌파(이탈)한 캔들의 최고점에서 1틱움직이면 청산되는데 이것이 맞는지요?
저는 목표가를 돌파(이탈)하고 1틱 변화가 생기면 청산 되는줄 알았는데
차트신호는 돌파한 캔들의 최고점에서1틱 전환시 신호가표시되어 무었이
맞는건지 식을 잘이해못해서 설명좀 부탁드립니다
3)손익포인트가 작을경우 슬리피지는 얼마로 설정 해야한나요.
감사합니다.
==========================================================================
input : af1(0.01),max1(0.1);
input : S1(10),P1(20);
var : para1(0),T1(0);
var : Bcond1(false);
var : Scond1(false);
para1 = sar(af1,max1);
if stime >= 170000 or stime < 160000 Then{
if crossup(C,para1) Then{
Bcond1 = false;
var1 = H;
T1 = 1;
}
if CrossDown(C,para1) Then{
Scond1 = false;
var1 = L;
T1 = -1;
}
if T1 == 1 and T1[1] == 1 and Bcond1 == false and H >= var1[1]+PriceScale*1 Then
Bcond1 = true;
if T1 == -1 and T1[1] == -1 and Scond1 == false and L <= var1[1]-PriceScale*1 Then
Scond1 = true;
if T1 == 1 and Bcond1 == false Then
buy("B1",AtStop,var1+PriceScale*1);
if T1 == -1 and Scond1 == false Then
sell("S1",AtStop,var1-PriceScale*1);
if MarketPosition == 1 then{
if CrossDown(c,para1) Then
exitlong("bx1",OnClose,def);
}
if MarketPosition == -1 then{
Scond1 = true;
if crossup(c,para1) Then
ExitShort("sx1",OnClose,def,"S1");
}
}
SetStopLoss(PriceScale*S1,PointStop);
SetStopTrailing(PriceScale*1,PriceScale*P1,PointStop);
if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{
exitlong("bexit");
ExitShort("sexit");
}
다음글
이전글