커뮤니티
문의드립니다.
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");
}