前輩,麻煩幫我看看這個海龜代碼,謝謝 [MC]
- 咨询内容:
我剛接觸MC不久,網上淘來一段Tradestation海龜策略代碼,導入MC后編譯不能通過。以下是代碼部分:
vars: N(0),StopLoss(1),DV(0),BB(0),AccountBalance(0),DollarRisk(0),LTT(0),
Tracker(0),LastTrade(0),HBP(0),LBP(0); input: InitialBalance(10000000);
{/// Turtle 20-Day Breakout Replica //////////////////////////////////////}
if marketposition = 0 then begin
BB = 0;
N = AvgTrueRange(20); DV = N*BigPointValue;
AccountBalance = InitialBalance;
DV = N * BigPointValue;
{AccountBalance = InitialBalance + netprofit;}
DollarRisk = AccountBalance * .01;
LTT = IntPortion(DollarRisk/DV);
StopLoss = 2 * DV * LTT;
if LastTrade = -1 then begin
buy LTT shares next bar highest(h,20) or higher;
buy LTT shares next bar highest(h,20) + (0.5*N) or higher;
buy LTT shares next bar highest(h,20) + (1.0*N) or higher;
buy LTT shares next bar highest(h,20) + (1.5*N) or higher;
Sell LTT shares next bar lowest(l,20) or lower;
Sell LTT shares next bar lowest(l,20) - (0.5*N) or lower;
Sell LTT shares next bar lowest(l,20) - (1.0*N) or lower;
Sell LTT shares next bar lowest(l,20) - (1.5*N) or lower;
end;
if LastTrade = 1 then begin
buy LTT shares next bar highest(h,55) or higher;
buy LTT shares next bar highest(h,55) + (0.5*N) or higher;
buy LTT shares next bar highest(h,55) + (1.0*N) or higher;
buy LTT shares next bar highest(h,55) + (1.5*N) or higher;
Sell LTT shares next bar lowest(l,55) or lower;
Sell LTT shares next bar lowest(l,55) - (0.5*N) or lower;
Sell LTT shares next bar lowest(l,55) - (1.0*N) or lower;
Sell LTT shares next bar lowest(l,55) - (1.5*N) or lower;
end;
end;
{// PREVIOUS TRADE TRACKER}
if HBP = 0 and h > highest(h,19)[1] then begin
Tracker = 1; HBP = h; LBP = 0;
end;
if LBP = 0 and l < lowest(l,19)[1] then begin
Tracker = -1; LBP = l; HBP = 0;
end;
if Tracker = 1 then begin
if l < HBP - (2*N) then LastTrade = -1;
if h > HBP + (4*N) then LastTrade = 1;
end;
if Tracker = -1 then begin
if h > LBP + (2*N) then LastTrade = -1;
if l < LBP - (4*N) then LastTrade = 1;
end;
{// LONG 20 }
if LastTrade = -1 and marketposition = 1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
buy LTT shares next bar highest(h,20)[BB] + (0.5*N) or higher;
buy LTT shares next bar highest(h,20)[BB] + (1.0*N) or higher;
buy LTT shares next bar highest(h,20)[BB]+ (1.5*N) or higher;
end;
if currentcontracts = LTT * 2 then begin
buy LTT shares next bar highest(h,20)[BB] + (1.0*N) or higher;
buy LTT shares next bar highest(h,20)[BB] + (1.5*N) or higher;
end;
if currentcontracts = LTT * 3 then
buy LTT shares next bar highest(h,20)[BB] + (1.5*N) or higher;
end;
{// LONG 55}
if LastTrade = 1 and marketposition = 1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
buy LTT shares next bar highest(h,55)[BB] + (0.5*N) or higher;
buy LTT shares next bar highest(h,55)[BB] + (1.0*N) or higher;
buy LTT shares next bar highest(h,55)[BB]+ (1.5*N) or higher;
end;
if currentcontracts = LTT * 2 then begin
buy LTT shares next bar highest(h,55)[BB] + (1.0*N) or higher;
buy LTT shares next bar highest(h,55)[BB] + (1.5*N) or higher;
end;
if currentcontracts = LTT * 3 then
buy LTT shares next bar highest(h,55)[BB] + (1.5*N) or higher;
end;
ExitLong ("out-S") next bar lowest(l,10) or lower;
{// SHORT 20 }
if LastTrade = -1 and marketposition = -1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
Sell LTT shares next bar lowest(l,20)[BB] - (0.5*N) or lower;
Sell LTT shares next bar lowest(l,20)[BB] - (1.0*N) or lower;
Sell LTT shares next bar lowest(l,20)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 2 then begin
Sell LTT shares next bar lowest(l,20)[BB] - (1.0*N) or lower;
Sell LTT shares next bar lowest(l,20)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 3 then
Sell LTT shares next bar lowest(l,20)[BB] - (1.5*N) or lower;
end;
{// SHORT 55 }
if LastTrade = 1 and marketposition = -1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
Sell LTT shares next bar lowest(l,55)[BB] - (0.5*N) or lower;
Sell LTT shares next bar lowest(l,55)[BB] - (1.0*N) or lower;
Sell LTT shares next bar lowest(l,55)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 2 then begin
Sell LTT shares next bar lowest(l,55)[BB] - (1.0*N) or lower;
Sell LTT shares next bar lowest(l,55)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 3 then
Sell LTT shares next bar lowest(l,55)[BB] - (1.5*N) or lower;
end;
ExitShort ("out-B") next bar highest(h,10) or higher;
{// STOPS}
if currentcontracts = (2 * LTT) then StopLoss = DV * 3.5 * LTT;
if currentcontracts = (3 * LTT) then StopLoss = DV * 4.5 * LTT;
if currentcontracts = (4 * LTT) then StopLoss = DV * 5.0 * LTT;
setstoploss (StopLoss);
{// COMMENTARY}
commentary ("LTT: ",LTT,Newline);
commentary ("currentcontracts: ",currentcontracts,Newline);
commentary ("StopLoss: ",StopLoss,Newline);
commentary ("AccountBalance:",AccountBalance,NewLine);
commentary ("LastTrade: ",LastTrade,NewLine);
編譯時遇到問題,ExitShort 和 ExitLong 不能通過,這是兩個函數?是否這段代碼少了這個函數的內容呢?我根據語法大概意思,用buytocover替換ExitLong,用sell替換ExitShort 。能夠編譯通過,但是圖表只有2個信號,與海龜法則相去甚遠。不知道是這段代碼不完整?還是Tradestation的程序在MC上需要做些修改才能使用呢?
- MC技术部:
我们网站上找到一个海龟的课程,老师讲授的课程刚好就是这个代码,可惜没有完整版提供,我根据老师上课内容对上面代码做了些修改,但是图表上还是没有信号。不知道问题出在哪里?下面我把我修改的代码附上,麻烦老师有时间帮我看下,谢谢
[IntrabarOrderGeneration = True]
input: InitialBalance(200000);
vars: N(0),StopLoss(1),DV(0),BB(0),
AccountBalance(0),DollarRisk(0),system(0),
LTT(0),Tracker(0),LastTrade(0),HBP(0),LBP(0);
{/// Turtle 20-Day Breakout Replica //////////////////////////////////////}
if marketposition = 0 then begin
BB = 0;
N = AvgTrueRange(20);
DV = N * BigPointValue;
{AccountBalance = InitialBalance;}
AccountBalance = InitialBalance + netprofit;
DollarRisk = AccountBalance * 0.01;
LTT = IntPortion(DollarRisk/DV/2);
StopLoss = 2 * DV * LTT;
if LastTrade = -1 then begin
buy ("b20-1") LTT shares next bar highest(h,20) or higher;
buy ("b20-2") LTT shares next bar highest(h,20) + (0.5*N) or higher;
buy ("b20-3") LTT shares next bar highest(h,20) + (1.0*N) or higher;
buy ("b20-4") LTT shares next bar highest(h,20) + (1.5*N) or higher;
Sell("s20-1") LTT shares next bar lowest(l,20) or lower;
Sell("s20-2") LTT shares next bar lowest(l,20) - (0.5*N) or lower;
Sell("s20-3") LTT shares next bar lowest(l,20) - (1.0*N) or lower;
Sell("s20-4") LTT shares next bar lowest(l,20) - (1.5*N) or lower;
system = 1;
end;
if LastTrade = 1 then begin
buy ("b55-1") LTT shares next bar highest(h,55) or higher;
buy ("b55-2") LTT shares next bar highest(h,55) + (0.5*N) or higher;
buy ("b55-3") LTT shares next bar highest(h,55) + (1.0*N) or higher;
buy ("b55-4") LTT shares next bar highest(h,55) + (1.5*N) or higher;
Sell ("s55-1") LTT shares next bar lowest(l,55) or lower;
Sell ("s55-2") LTT shares next bar lowest(l,55) - (0.5*N) or lower;
Sell ("s55-3") LTT shares next bar lowest(l,55) - (1.0*N) or lower;
Sell ("s55-4") LTT shares next bar lowest(l,55) - (1.5*N) or lower;
system = 2;
end;
end;
{// PREVIOUS TRADE TRACKER}
if HBP = 0 and h > highest(h,19)[1] then begin
Tracker = 1; HBP = h; LBP = 0;
end;
if LBP = 0 and l < Lowest(l,19)[1] then begin
Tracker = -1; LBP = l; HBP = 0;
end;
//if LBP = 0 and l HBP + (4*N) then LastTrade = 1;
// end;
if Tracker = 1 then begin
if l < HBP - (2*N) then LastTrade = -1;
if h > HBP + (4*N) then LastTrade = 1;
end;
if Tracker = -1 then begin
if h > LBP + (2*N) then LastTrade = -1;
if l < LBP - (4*N) then LastTrade = 1;
end;
{// LONG 20 }
if LastTrade = -1 and marketposition = 1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
buy ("b20-2+") LTT shares next bar highest(h,20)[BB] + (0.5*N) or higher;
buy ("b20-3+")LTT shares next bar highest(h,20)[BB] + (1.0*N) or higher;
buy ("b20-4+")LTT shares next bar highest(h,20)[BB]+ (1.5*N) or higher;
end;
if currentcontracts = LTT * 2 then begin
buy ("bf20-3++") LTT shares next bar highest(h,20)[BB] + (1.0*N) or higher;
buy ("bf20-4++") LTT shares next bar highest(h,20)[BB] + (1.5*N) or higher;
end;
if currentcontracts = LTT * 3 then
buy ("bf20-4+++") LTT shares next bar highest(h,20)[BB] + (1.5*N) or higher;
end;
{// LONG 55}
if LastTrade = 1 and marketposition = 1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
buy ("b55-2+") LTT shares next bar highest(h,55)[BB] + (0.5*N) or higher;
buy ("b55-3+") LTT shares next bar highest(h,55)[BB] + (1.0*N) or higher;
buy ("b55-4+") LTT shares next bar highest(h,55)[BB]+ (1.5*N) or higher;
end;
if currentcontracts = LTT * 2 then begin
buy ("b55-3++") LTT shares next bar highest(h,55)[BB] + (1.0*N) or higher;
buy ("b55-4++")LTT shares next bar highest(h,55)[BB] + (1.5*N) or higher;
end;
if currentcontracts = LTT * 3 then
buy ("b55-4+++") LTT shares next bar highest(h,55)[BB] + (1.5*N) or higher;
end;
sell("out-S") next bar lowest(l,10) or lower;
{// SHORT 20 }
if LastTrade = -1 and marketposition = -1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
SellShort ("s20-2+") LTT shares next bar lowest(l,20)[BB] - (0.5*N) or lower;
SellShort ("s20-3+") LTT shares next bar lowest(l,20)[BB] - (1.0*N) or lower;
SellShort ("s20-4+") LTT shares next bar lowest(l,20)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 2 then begin
SellShort ("s20-3++") LTT shares next bar lowest(l,20)[BB] - (1.0*N) or lower;
SellShort ("s20-4++") LTT shares next bar lowest(l,20)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 3 then
SellShort ("s20-4+++") LTT shares next bar lowest(l,20)[BB] - (1.5*N) or lower;
end;
{// SHORT 55 }
if LastTrade = 1 and marketposition = -1 then begin
BB = BB + 1;
if currentcontracts = LTT then begin
SellShort ("s55-2+") LTT shares next bar lowest(l,55)[BB] - (0.5*N) or lower;
SellShort ("s55-3+") LTT shares next bar lowest(l,55)[BB] - (1.0*N) or lower;
SellShort ("s55-4+") LTT shares next bar lowest(l,55)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 2 then begin
SellShort ("s55-3++") LTT shares next bar lowest(l,55)[BB] - (1.0*N) or lower;
SellShort ("s55-4++") LTT shares next bar lowest(l,55)[BB] - (1.5*N) or lower;
end;
if currentcontracts = LTT * 3 then
SellShort ("s55-4+++") LTT shares next bar lowest(l,55)[BB] - (1.5*N) or lower;
end;
buytocover ("out-B") next bar highest(h,10) or higher;
{// STOPS}
if currentcontracts = (2 * LTT) then StopLoss = DV * 3.5 * LTT;
if currentcontracts = (3 * LTT) then StopLoss = DV * 4.5 * LTT;
if currentcontracts = (4 * LTT) then StopLoss = DV * 5.0 * LTT;
setstoploss (StopLoss);
{// COMMENTARY}
commentary ("LTT: ",LTT,Newline);
commentary ("currentcontracts: ",currentcontracts,Newline);
commentary ("StopLoss: ",StopLoss,Newline);
commentary ("AccountBalance:",AccountBalance,NewLine);
commentary ("LastTrade: ",LastTrade,NewLine);
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 1145508240 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容