커뮤니티

터틀 전략 수식 작성 부탁드립니다.

프로필 이미지
회원
2012-12-13 22:18:48
368
글번호 57287
답변완료
유명한 전략이지만, 직전 매매가 수익매매면 진입조건을 바꾸는게 잘 안되네요. 기본적으로 4주 신고가, 신저가 경신이면 매수, 매도, 2주 신고가, 신저가에서 청산, 만일 4주로 진입하였는데 수익으로 청산하면 그 다음 발생하는 4주 진입 신호는 무시하고 55일 신고가/신저가 진입, 20일(4주) 신고가/신저가 청산하는 전략입니다. 아래처럼 코딩했는데 안 먹히네요. 검토 부탁드립니다. Input : shortPeriod(20), longPeriod(55), exitperiod(10); value1 = NthHighest(1, high, shortPeriod); value2 = NthHighest(1, high, longPeriod); value3 = NthLowest(1, Low, shortPeriod); value4 = NthLowest(1, Low, longPeriod); Value5 = NthHighest(1, Low, exitperiod); Value6 = NthLowest(1, Low, exitperiod); If CurrentEntries == 0 then var1 = 0; If var1 == 0 and MarketPosition == 0 and CrossUP(Close, Value1) Then { Buy("LE1"); } If var1 == 0 and MarketPosition ==0 and CrossDown(Close, Value3) Then { Sell("SE1"); } If entryname=="LE1" and CrossDown(Close, Value6) Then { Exitlong("Lx"); } If entryname == "SE1" and CrossUp(Close, Value5) Then { ExitShort("Sx"); } If MarketPosition(1) == 1 and ExitPrice(1) > entryprice(1) Then { var1 = 1; } If marketposition(1) == -1 and ExitPrice(1) < entryprice(1) Then { var1 = 1; } If var1 == 1 and MarketPosition == 0 and CrossUP(Close, Value2) Then { Buy("LE2"); Var1 = 0; } If var1 == 1 and MarketPosition ==0 and CrossDown(Close, Value4) Then { Sell("SE2"); Var1 = 0; } If entryname == "LE2" and crossdown(close, Value3) Then { ExitLong("Lx2"); } If entryname == "SE2" and crossup(close, Value1) Then { ExitShort("Sx2"); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-12-14 13:42:17

안녕하세요 예스스탁입니다. N일간의 신고가가 현재봉에서 발생하면 현재봉의 고가가 그 신고가 이므로 현재봉의 종가가 신고가 보다 클수는 없으므로 신호가 발생하지 않습니다. 1봉전까지의 n일간 최고값을 현재봉 종가가 갱신하는 것으로 식을 작성하셔야 합니다. Input : shortPeriod(20), longPeriod(55), exitperiod(10); value1 = NthHighest(1, high, shortPeriod); value2 = NthHighest(1, high, longPeriod); value3 = NthLowest(1, Low, shortPeriod); value4 = NthLowest(1, Low, longPeriod); Value5 = NthHighest(1, Low, exitperiod); Value6 = NthLowest(1, Low, exitperiod); if TotalTrades == 0 or (PositionProfit(1) < 0) Then{ If MarketPosition == 0 and CrossUP(Close, Value1[1]) Then Buy("LE1"); If MarketPosition ==0 and CrossDown(Close, Value3[1]) Then Sell("SE1"); } If entryname=="LE1" and CrossDown(Close, Value6[1]) Then Exitlong("Lx"); If entryname == "SE1" and CrossUp(Close, Value5[1]) Then ExitShort("Sx"); if (ExitName(1) == "Lx" or ExitName(1) == "Sx") and PositionProfit(1) > 0 Then{ If MarketPosition == 0 and CrossUP(Close, Value2[1]) Then Buy("LE2"); If MarketPosition ==0 and CrossDown(Close, Value4[1]) Then Sell("SE2"); } If entryname == "LE2" and crossdown(close, Value3[1]) Then ExitLong("Lx2"); If entryname == "SE2" and crossup(close, Value1[1]) Then ExitShort("Sx2"); 각 거래의 손익은 PositionProfit함수로 이용가능합니다. PositionProfit(1)이 직전거래의 손익입니다. 즐거운 하루되세요 > HI_dongy81 님이 쓴 글입니다. > 제목 : 터틀 전략 수식 작성 부탁드립니다. > 유명한 전략이지만, 직전 매매가 수익매매면 진입조건을 바꾸는게 잘 안되네요. 기본적으로 4주 신고가, 신저가 경신이면 매수, 매도, 2주 신고가, 신저가에서 청산, 만일 4주로 진입하였는데 수익으로 청산하면 그 다음 발생하는 4주 진입 신호는 무시하고 55일 신고가/신저가 진입, 20일(4주) 신고가/신저가 청산하는 전략입니다. 아래처럼 코딩했는데 안 먹히네요. 검토 부탁드립니다. Input : shortPeriod(20), longPeriod(55), exitperiod(10); value1 = NthHighest(1, high, shortPeriod); value2 = NthHighest(1, high, longPeriod); value3 = NthLowest(1, Low, shortPeriod); value4 = NthLowest(1, Low, longPeriod); Value5 = NthHighest(1, Low, exitperiod); Value6 = NthLowest(1, Low, exitperiod); If CurrentEntries == 0 then var1 = 0; If var1 == 0 and MarketPosition == 0 and CrossUP(Close, Value1) Then { Buy("LE1"); } If var1 == 0 and MarketPosition ==0 and CrossDown(Close, Value3) Then { Sell("SE1"); } If entryname=="LE1" and CrossDown(Close, Value6) Then { Exitlong("Lx"); } If entryname == "SE1" and CrossUp(Close, Value5) Then { ExitShort("Sx"); } If MarketPosition(1) == 1 and ExitPrice(1) > entryprice(1) Then { var1 = 1; } If marketposition(1) == -1 and ExitPrice(1) < entryprice(1) Then { var1 = 1; } If var1 == 1 and MarketPosition == 0 and CrossUP(Close, Value2) Then { Buy("LE2"); Var1 = 0; } If var1 == 1 and MarketPosition ==0 and CrossDown(Close, Value4) Then { Sell("SE2"); Var1 = 0; } If entryname == "LE2" and crossdown(close, Value3) Then { ExitLong("Lx2"); } If entryname == "SE2" and crossup(close, Value1) Then { ExitShort("Sx2"); }