海龟交易系统公式.docx

上传人:wj 文档编号:1655890 上传时间:2023-05-01 格式:DOCX 页数:7 大小:17.44KB
下载 相关 举报
海龟交易系统公式.docx_第1页
第1页 / 共7页
海龟交易系统公式.docx_第2页
第2页 / 共7页
海龟交易系统公式.docx_第3页
第3页 / 共7页
海龟交易系统公式.docx_第4页
第4页 / 共7页
海龟交易系统公式.docx_第5页
第5页 / 共7页
海龟交易系统公式.docx_第6页
第6页 / 共7页
海龟交易系统公式.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

海龟交易系统公式.docx

《海龟交易系统公式.docx》由会员分享,可在线阅读,更多相关《海龟交易系统公式.docx(7页珍藏版)》请在冰点文库上搜索。

海龟交易系统公式.docx

这里找到了已经实现的海龟交易系统的公式完全版.虽说是著名的海龟,但不等于说用了就100%能赚钱的.该系统是比较适合于趋势型的商品行情,如大豆等期货商品.当然要是把这个系统放在振荡型的行情商品中,估计会亏得血本无归吧。

其实现如今海龟已经不如当初那么神奇了,可以说是过了保质期吧。

哈哈。

whoknows.

不过要是把这个海龟系统理解透了,我相信对于提高交易者自身对系统交易的理解也能上一个台阶了。

以下就是海龟系统于"tradeblazer--交易开拓者"软件下的实现代码,大家可慢慢琢磨一下。

(每一行//后的中文字都是对每一步骤的解释,这样有助于大家慢慢地消化理解.)

复制内容到剪贴板

代码:

Params

NumericRiskRatio

(1);//%RiskPerN(0-100)

NumericATRLength(20);//平均波动周期ATRLength

NumericboLength(20);//短周期BreakOutLength

NumericfsLength(55);//长周期FailSafeLength

NumericteLength(10);//离市周期TrailingExitLength

BoolLastProfitableTradeFilter(True);//使用入市过滤条件

Vars

NumericN;//N值

NumericTotalEquity;//按最新收盘价计算出的总资产

NumericTurtleUnits;//交易单位

NumericSeriesDonchianHi;//唐奇安通道上轨,延后1个Bar

NumericSeriesDonchianLo;//唐奇安通道下轨,延后1个Bar

NumericSeriesfsDonchianHi;//唐奇安通道上轨,延后1个Bar,长周期

NumericSeriesfsDonchianLo;//唐奇安通道下轨,延后1个Bar,长周期

NumericExitHighestPrice;//离市时判断需要的N周期最高价

NumericExitLowestPrice;//离市时判断需要的N周期最低价

NumericmyEntryPrice;//开仓价格

NumericmyExitPrice;//平仓价格

BoolIsEntryThisBar(False);//当前Bar开过仓

BoolIsAddThisBar(False);//当前Bar有过增仓

BoolLastBreakoutWin(False);//最后一次突破是否盈利

NumericpreEntryPrice;//前一次开仓的价格,存放到全局变量0号位置

NumericpreBreakoutType(0);//前一次突破的方向,1-LONG,-1-SHORT初始值为0,存放到全局变量1号位置

NumericpreBreakOutPrice;//前一次突破的价格,存放到全局变量2号位置

Begin

If(BarStatus==0)

{

SetGlobalVar(0,InvalidNumeric);

SetGlobalVar(1,0);

SetGlobalVar(2,InvalidNumeric);

}Else

{

preBreakoutType=GetGlobalVar

(1);

preBreakOutPrice=GetGlobalVar

(2);

}

N=AverageFC(TrueRange,ATRLength);

TotalEquity=CurrentCapital()+Abs(CurrentContracts()*Close*ContractUnit()*BigPointValue()*MarginRatio());

TurtleUnits=(TotalEquity*RiskRatio/100)/(N*ContractUnit()*BigPointValue());

TurtleUnits=IntPart(TurtleUnits);//对小数取整

DonchianHi=HighestFC(Close[1],boLength);

DonchianLo=LowestFC(Close[1],boLength);

//判断最后一次突破是否盈利

If(preBreakoutType==1)

{

If(Close>PreBreakOutPrice)

{

LastBreakoutWin=True;

}

}ElseIf(preBreakoutType==-1)

{

If(Close

{

LastBreakoutWin=True;

}

}

//当不使用过滤条件,或者使用过滤条件并且条件为False进行后续操作

If((NotLastProfitableTradeFilter)Or(NOTLastBreakoutWin))

{

//突破开仓

If(CrossOver(High,DonchianHi)&&TurtleUnits>=1)

{

//开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交

preBreakoutType=1;

preBreakOutPrice=Donchianhi;

SetGlobalVar(1,preBreakoutType);

SetGlobalVar(2,preBreakOutPrice);

myEntryPrice=min(high,DonchianHi+PriceScale*MinMove);

myEntryPrice=IIF(myEntryPrice

If(Buy(TurtleUnits,myEntryPrice))

{

IsEntryThisBar=True;

SetGlobalVar(0,myEntryPrice);//保存第一次开仓的价格

}

}

If(CrossUnder(Low,DonchianLo)&&TurtleUnits>=1)

{

//开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交

preBreakoutType=-1;

preBreakOutPrice=DonchianLo;

SetGlobalVar(1,preBreakoutType);

SetGlobalVar(2,preBreakOutPrice);

myEntryPrice=max(low,DonchianLo-PriceScale*MinMove);

myEntryPrice=IIF(myEntryPrice>Open,Open,myEntryPrice);//大跳空的时候用开盘价代替

If(SellShort(TurtleUnits,myEntryPrice))

{

IsEntryThisBar=True;

SetGlobalVar(0,myEntryPrice);//保存第一次开仓的价格

}

}

}

//长周期突破开仓FailsafeBreakoutpoint

If(MarketPosition==0)

{

fsDonchianHi=HighestFC(Close[1],fsLength);

fsDonchianLo=LowestFC(Close[1],fsLength);

If(CrossOver(High,fsDonchianHi)&&TurtleUnits>=1)

{

//开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交

myEntryPrice=min(high,fsDonchianHi+PriceScale*MinMove);

myEntryPrice=IIF(myEntryPrice

If(Buy(TurtleUnits,myEntryPrice))

{

IsEntryThisBar=True;

}

}

If(CrossUnder(Low,fsDonchianLo)&&TurtleUnits>=1)

{

//开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交

myEntryPrice=max(low,fsDonchianLo-PriceScale*MinMove);

myEntryPrice=IIF(myEntryPrice>Open,Open,myEntryPrice);//大跳空的时候用开盘价代替

If(SellShort(TurtleUnits,myEntryPrice))

{

IsEntryThisBar=True;

}

}

}

If(MarketPosition==1)//有多仓的情况

{

//求出持多仓时离市的条件比较值

ExitLowestPrice=LowestFC(Low[1],teLength);

If(Low

{

myExitPrice=max(Low,ExitLowestPrice-PriceScale()*MinMove());

Sell(0,myExitPrice);//数量用0的情况下将全部平仓

}ElseIf(IsEntryThisBar)

{

//当前Bar开过仓的情况,如果Close比myEntryPrice大于1/2N.用收盘价加仓。

If(Close>=myEntryPrice+0.5*N&&TurtleUnits>=1)

{

myEntryPrice=myEntryPrice+0.5*N;

If(Buy(TurtleUnits,myEntryPrice))

{

SetGlobalVar(0,myEntryPrice);//保存最后一次开仓的价格

}

}

//加上止损指令

If(Close<=MyEntryPrice-2*N)

{

myExitPrice=MyEntryPrice-2*N;

Sell(0,myExitPrice);//数量用0的情况下将全部平仓

}

}Else

{

preEntryPrice=GetGlobalVar(0);//取出上一次开仓的价格

If(preEntryPrice!

=InvalidNumeric&&TurtleUnits>=1)

{

If(Open>=preEntryPrice+0.5*N)//如果开盘就超过设定的1/2N,则直接用开盘价增仓。

{

myEntryPrice=Open;

If(Buy(TurtleUnits,myEntryPrice))

{

preEntryPrice=myEntryPrice;

IsAddThisBar=True;

SetGlobalVar(0,preEntryPrice);//保存最后一次开仓的价格

}

}

while(High>=preEntryPrice+0.5*N)//以最高价为标准,判断能进行几次增仓

{

myEntryPrice=preEntryPrice+0.5*N;

preEntryPrice=myEntryPrice;

If(Buy(TurtleUnits,myEntryPrice))

{

IsAddThisBar=True;

SetGlobalVar(0,preEntryPrice);//保存最后一次开仓的价格

}

}

}

//止损指令

If(IsAddThisBar)

{

//当前Bar有过增仓,此时不能直接按Low来判断是否止损,因为不能确定Bar的价格的走势,只按收盘价进行止损判断。

If(Close<=preEntryPrice-2*N)

{

myExitPrice=preEntryPrice-2*N;

Sell(0,myExitPrice);//数量用0的情况下将全部平仓

}

}Else

{

If(Low<=preEntryPrice-2*N)

{

myExitPrice=preEntryPrice-2*N;

Sell(0,myExitPrice);//数量用0的情况下将全部平仓

}

}

}

}ElseIf(MarketPosition==-1)//有空仓的情况

{

//求出持空仓时离市的条件比较值

ExitHighestPrice=HighestFC(High[1],teLength);

If(High>ExitHighestPrice)

{

myExitPrice=Min(High,ExitHighestPrice+PriceScale()*MinMove());

BuyToCover(0,ExitHighestPrice);//数量用0的情况下将全部平仓

}ElseIf(IsEntryThisBar)

{

//当前Bar开过仓的情况,如果Close比myEntryPrice小于1/2N.用收盘价加仓。

If(Close<=myEntryPrice-0.5*N&&TurtleUnits>=1)

{

myEntryPrice=myEntryPrice-0.5*N;

If(SellShort(TurtleUnits,myEntryPrice))

{

SetGlobalVar(0,myEntryPrice);//保存最后一次开仓的价格

}

}

//加上止损指令

If(Close>=MyEntryPrice+2*N)

{

myExitPrice=MyEntryPrice+2*N;

BuyToCover(0,myExitPrice);//数量用0的情况下将全部平仓

}

}Else

{

preEntryPrice=GetGlobalVar(0);//取出上一次开仓的价格

If(preEntryPrice!

=InvalidNumeric&&TurtleUnits>=1)

{

If(Open<=preEntryPrice-0.5*N)//如果开盘就超过设定的1/2N,则直接用开盘价增仓。

{

myEntryPrice=Open;

If(SellShort(TurtleUnits,myEntryPrice))

{

preEntryPrice=myEntryPrice;

IsAddThisBar=True;

SetGlobalVar(0,preEntryPrice);//保存最后一次开仓的价格

}

}

while(Low<=preEntryPrice-0.5*N)//以最低价为标准,判断能进行几次增仓

{

myEntryPrice=preEntryPrice-0.5*N;

preEntryPrice=myEntryPrice;

If(SellShort(TurtleUnits,myEntryPrice))

{

IsAddThisBar=True;

SetGlobalVar(0,preEntryPrice);//保存最后一次开仓的价格

}

}

}

//止损指令

If(IsAddThisBar)

{

//当前Bar有过增仓,此时不能直接按High来判断是否止损,因为不能确定Bar的价格的走势,只按收盘价进行止损判断。

If(Close>=preEntryPrice+2*N)

{

myExitPrice=preEntryPrice+2*N;

BuyToCover(0,myExitPrice);//数量用0的情况下将全部平仓

}

}Else

{

If(High>=preEntryPrice+2*N)

{

myExitPrice=preEntryPrice+2*N;

BuyToCover(0,myExitPrice);//数量用0的情况下将全部平仓

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2