커뮤니티

시스템식 오류수정

프로필 이미지
조민철
2013-11-28 14:28:39
131
글번호 69908
답변완료
항상 감사드립니다 아래 시스템식에서 청산식을 추가하였는데 신호발생위치가 다르게 나오고 있습니다 오류수정 부탁드립니다 매수매도신호가 발생안하거나..늦게 나오는것 같습니다. 시스템1은 시초가부터 신호가 나오는데 시스템2는 시초가에는 안나오고 2번째신호부터 나옵니다 그리고 시스템1과 시스템2의 차이 설명부탁드립니다. 1.시스템1(당초) VAR: Length1(36); Variables: TLen1(0),TRIma1(0); TLen1 = Ceiling((Length1 + 1) * 0.5); var23 = ma(ma(H, TLen1), TLen1); var22 = ma(ma(C, TLen1), TLen1); var21 = ma(ma(L, TLen1), TLen1); Input : Period(12), sigPeriod(9); var : TRIXv(0),TRIXsig(0); TRIXv = TRIX(Period); TRIXsig = ema(TRIX(Period),sigPeriod); if crossup(TRIXv,0) Then var1=1; if CrossDown(TRIXv,0) Then var1=-1; if (stime >= 090000 and stime <= 150000) then{ if var1==1 and c>var23 Then buy("B1"); if var1==-1 and c<var21 Then Sell("S1"); } 2.시스템2(청산식추가) var1 = ma(c,9); var2 = ma(c,26); if CrossDown(var1,var2) Then value1 = var2; if var2 < value1 Then value1 = var2; #매도라인# if CrossUp(var1,var2) Then value2 = var2; if var2 > value2 Then value2 = var2; #매수라인# value3 = var2; #####신호발생봉의 매수손절라인(value7)/매도손절라인(value6) 지정 ###### if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then Condition2 = false; if MarketPosition == -1 and Condition2 == false and value2 >= value1 and value2 == value2[1] Then{ value6 = value2; Condition2 = true; } if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then Condition3 = false; if MarketPosition == 1 and Condition3 == false and value2 > value1 and value1 == value1[1] Then{ value7 = value1; Condition3 = True; } ##### 삼각가중 이평 ##### VAR: Length1(36); Variables: TLen1(0),TRIma1(0); TLen1 = Ceiling((Length1 + 1) * 0.5); var23 = ma(ma(H, TLen1), TLen1); var22 = ma(ma(C, TLen1), TLen1); var21 = ma(ma(L, TLen1), TLen1); Input : Period(12), sigPeriod(9); var : TRIXv(0),TRIXsig(0); TRIXv = TRIX(Period); TRIXsig = ema(TRIX(Period),sigPeriod); if crossup(TRIXv,0) Then var1=1; if CrossDown(TRIXv,0) Then var1=-1; if (stime >= 090000 and stime <= 150000) then{ if var1==1 and c>var23 Then buy("B1"); if CrossDown(c,value7) Then exitlong("eS1"); ####청산식추가##### if var1==-1 and c<var21 Then Sell("S1"); if crossup(c,value6) Then exitshort("eS1"); #####청산식추가##### } 감사합니다
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-11-29 09:51:30

안녕하세요 1 1번식에 var1이라는 변수는 0을 상향돌파한 구간과 하락돌파한 구간을 구분하기 위한 변수로 사용되었는데 2번식에서는 9이평을 저장하는 변수로도 사용되어 중복으로 값이 저장이 됩니다. 다른 값을 저장하는 변수이면 각기 다른 변수를 사용해 주셔야 합니다. var1 = ma(c,9); if crossup(TRIXv,0) Then var1=1; if CrossDown(TRIXv,0) Then var1=-1; 2. 기존의 식(1번식)에 청산을 추가하면 기존식에서는 없던 진입이 발생할수가 있습니다. 기존진입식은 아래와 같은 조건으로 매수와 매도가 단순 스위칭하면서 발생하는데 if var1==1 and c>var23 Then buy("B1"); if var1==-1 and c<var21 Then Sell("S1"); 예를 들어 1번식에서는 당일 첫번째 봉에서 매수신호가 발생하고 10번째 봉에서 매도신호가 발생해서 스위칭을 하게 되는데 2번식에서 추가된 매수청산식에 의해 5번째봉에서 청산이 된다면 6개봉부터는 다시 매수조건이 만족하면 또 또 매수가 발생합니다. 1번식과 진입은 동일하게 하고 청산만 추가할 의도이시면 아래와 같이 trix가 0을 상향돌파하 하향돌파한 구간에서 한번만 진입을 발생하게 한다든지 제어가 따로 필요하게 됩니다. 3 아래는 수정한 식입니다. var : Bcond(false),Scond(false); if date != date[1] Then{ Bcond = false; Scond = false; } var1 = ma(c,9); var2 = ma(c,26); if CrossDown(var1,var2) Then value1 = var2; if var2 < value1 Then value1 = var2; #매도라인# if CrossUp(var1,var2) Then value2 = var2; if var2 > value2 Then value2 = var2; #매수라인# value3 = var2; #####신호발생봉의 매수손절라인(value7)/매도손절라인(value6) 지정 ###### if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then Condition2 = false; if MarketPosition == -1 and Condition2 == false and value2 >= value1 and value2 == value2[1] Then{ value6 = value2; Condition2 = true; } if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then Condition3 = false; if MarketPosition == 1 and Condition3 == false and value2 > value1 and value1 == value1[1] Then{ value7 = value1; Condition3 = True; } ##### 삼각가중 이평 ##### VAR: Length1(36); Variables: TLen1(0),TRIma1(0); TLen1 = Ceiling((Length1 + 1) * 0.5); var23 = ma(ma(H, TLen1), TLen1); var22 = ma(ma(C, TLen1), TLen1); var21 = ma(ma(L, TLen1), TLen1); Input : Period(12), sigPeriod(9); var : TRIXv(0),TRIXsig(0); TRIXv = TRIX(Period); TRIXsig = ema(TRIX(Period),sigPeriod); if crossup(TRIXv,0) Then{ var11=1; Bcond = false; } if CrossDown(TRIXv,0) Then{ var11=-1; Scond = false; } if (stime >= 090000 and stime <= 150000) then{ if Bcond == false and var11==1 and c>var23 Then{ buy("B1"); Bcond = true; } if CrossDown(c,value7) Then exitlong("eL1"); ####청산식추가##### if Scond == false and var11==-1 and c<var21 Then{ Sell("S1"); Scond = true; } if crossup(c,value6) Then exitshort("eS1"); #####청산식추가##### } 즐거운 하루되세요 > 조민철 님이 쓴 글입니다. > 제목 : 시스템식 오류수정 > 항상 감사드립니다 아래 시스템식에서 청산식을 추가하였는데 신호발생위치가 다르게 나오고 있습니다 오류수정 부탁드립니다 매수매도신호가 발생안하거나..늦게 나오는것 같습니다. 시스템1은 시초가부터 신호가 나오는데 시스템2는 시초가에는 안나오고 2번째신호부터 나옵니다 그리고 시스템1과 시스템2의 차이 설명부탁드립니다. 1.시스템1(당초) VAR: Length1(36); Variables: TLen1(0),TRIma1(0); TLen1 = Ceiling((Length1 + 1) * 0.5); var23 = ma(ma(H, TLen1), TLen1); var22 = ma(ma(C, TLen1), TLen1); var21 = ma(ma(L, TLen1), TLen1); Input : Period(12), sigPeriod(9); var : TRIXv(0),TRIXsig(0); TRIXv = TRIX(Period); TRIXsig = ema(TRIX(Period),sigPeriod); if crossup(TRIXv,0) Then var1=1; if CrossDown(TRIXv,0) Then var1=-1; if (stime >= 090000 and stime <= 150000) then{ if var1==1 and c>var23 Then buy("B1"); if var1==-1 and c<var21 Then Sell("S1"); } 2.시스템2(청산식추가) var1 = ma(c,9); var2 = ma(c,26); if CrossDown(var1,var2) Then value1 = var2; if var2 < value1 Then value1 = var2; #매도라인# if CrossUp(var1,var2) Then value2 = var2; if var2 > value2 Then value2 = var2; #매수라인# value3 = var2; #####신호발생봉의 매수손절라인(value7)/매도손절라인(value6) 지정 ###### if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then Condition2 = false; if MarketPosition == -1 and Condition2 == false and value2 >= value1 and value2 == value2[1] Then{ value6 = value2; Condition2 = true; } if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then Condition3 = false; if MarketPosition == 1 and Condition3 == false and value2 > value1 and value1 == value1[1] Then{ value7 = value1; Condition3 = True; } ##### 삼각가중 이평 ##### VAR: Length1(36); Variables: TLen1(0),TRIma1(0); TLen1 = Ceiling((Length1 + 1) * 0.5); var23 = ma(ma(H, TLen1), TLen1); var22 = ma(ma(C, TLen1), TLen1); var21 = ma(ma(L, TLen1), TLen1); Input : Period(12), sigPeriod(9); var : TRIXv(0),TRIXsig(0); TRIXv = TRIX(Period); TRIXsig = ema(TRIX(Period),sigPeriod); if crossup(TRIXv,0) Then var1=1; if CrossDown(TRIXv,0) Then var1=-1; if (stime >= 090000 and stime <= 150000) then{ if var1==1 and c>var23 Then buy("B1"); if CrossDown(c,value7) Then exitlong("eS1"); ####청산식추가##### if var1==-1 and c<var21 Then Sell("S1"); if crossup(c,value6) Then exitshort("eS1"); #####청산식추가##### } 감사합니다