커뮤니티

문의드립니다.

프로필 이미지
베드로
2015-08-28 00:38:10
130
글번호 89877
답변완료
안녕하세요 SetStopLoss(PriceScale*10,PointStop); 상기 함수와 관련하여 문의드립니다. 지난번 상기 내용으로 문의드린바 있는데 손절과 익절을 작게주지않으면 시뮬레이션과 실전차트와 가격차이가 없다고 말씀하셨는데 초보인 제가 확인한바.실전에서는 정상적으로 작동하나 시뮬레이션및 전략실행차트를 새로 생성하면 손절이 익절로 표시되는경우가 있읍니다 혹시 제가 차트분석을 잘못한것이면 번거러우시더라도 아래식을 차트에 한번적용해보시고 이상유무을 확인 부탁드립니다. 상기 함수를 아래 표현외 다른방법있으면 알려주세요. ExitLong("bx2",AtStop,EntryPrice-PriceScale*s1); ExitShort("sx2",AtStop,EntryPrice+PriceScale*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); 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"); } if MarketPosition == -1 then{ if crossup(c,para1) Then ExitShort("sx1"); } } if MarketPosition == 1 and highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*P1 Then exitlong("btr",AtStop,highest(H,BarsSinceEntry)-PriceScale*1); if MarketPosition == -1 and Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*P1 Then exitshort("str",AtStop,Lowest(L,BarsSinceEntry)+PriceScale*1); SetStopLoss(PriceScale*S1,PointStop); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{ exitlong("bexit"); ExitShort("sexit"); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-08-28 11:14:38

안녕하세요 예스스탁입니다. 식은 과거봉에서 시뮬레이션이 될때 과거봉에는 시고저종가격만 있고 모든 틱이 있지 않아 과거봉이 시가에서 시작해 어떻게 움직여서 종가로 끝났는지 알수가 없습니다. 과거봉에 1틱단위로 모든 값이 있으면 이런 차이가 없겟지만 1틱단위로 데이터를 다운시키기에는 하드웨어적으로 무리가 따르므로 이런 가설을 만들어 움직임을 정의하고 시뮬레이션시 이용합니다. 일반적인 모든 시스템 트레이딩 프로그램은 모두 가설을 만들어 이용합니다. 과거 데이터 움직임에 대한 가설 https://www.yesstock.com/YesTrader/YesLanguage/YesLanguage_help/4_7.htm 하나의 봉에서 손절과 익절이 동시에 발생될수 있는 수준이면 실전과 시뮬레이션이 반대의 신호가 발생할수가 있습니다. 그러므로 가격이 클수록 동일봉에서 동시에 조건이 만족할 가능성이 적으므로 이런 차이가 적어지게 됩니다. ExitLong("bx2",AtStop,EntryPrice-PriceScale*s1); ExitShort("sx2",AtStop,EntryPrice+PriceScale*s1); 손절이나 익절은 풀어서 작성하신 다면 올리신식외에 따라 작성은 할수가 없습니다. atstop이나 atlimit은 먼저 만족한 쪽으로 신호가 발생하므로 실전과 시뮬레이션이 차이가 있을수 있습니다. 즐거운 하루되세요 > 베드로 님이 쓴 글입니다. > 제목 : 문의드립니다. > 안녕하세요 SetStopLoss(PriceScale*10,PointStop); 상기 함수와 관련하여 문의드립니다. 지난번 상기 내용으로 문의드린바 있는데 손절과 익절을 작게주지않으면 시뮬레이션과 실전차트와 가격차이가 없다고 말씀하셨는데 초보인 제가 확인한바.실전에서는 정상적으로 작동하나 시뮬레이션및 전략실행차트를 새로 생성하면 손절이 익절로 표시되는경우가 있읍니다 혹시 제가 차트분석을 잘못한것이면 번거러우시더라도 아래식을 차트에 한번적용해보시고 이상유무을 확인 부탁드립니다. 상기 함수를 아래 표현외 다른방법있으면 알려주세요. ExitLong("bx2",AtStop,EntryPrice-PriceScale*s1); ExitShort("sx2",AtStop,EntryPrice+PriceScale*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); 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"); } if MarketPosition == -1 then{ if crossup(c,para1) Then ExitShort("sx1"); } } if MarketPosition == 1 and highest(H,BarsSinceEntry) >= EntryPrice+PriceScale*P1 Then exitlong("btr",AtStop,highest(H,BarsSinceEntry)-PriceScale*1); if MarketPosition == -1 and Lowest(L,BarsSinceEntry) <= EntryPrice-PriceScale*P1 Then exitshort("str",AtStop,Lowest(L,BarsSinceEntry)+PriceScale*1); SetStopLoss(PriceScale*S1,PointStop); if stime == 160000 or (stime > 160000 and stime[1] < 160000) Then{ exitlong("bexit"); ExitShort("sexit"); }