커뮤니티
터틀 전략 수식 작성 부탁드립니다.
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");
}