资源描述:
《海龟交易系统公式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
这里找到了已经实现的海龟交易系统的公式完全版.虽说是著名的海龟,但不等于说用了就100%能赚钱的.该系统是比较适合于趋势型的商品行情,如大豆等期货商品.当然要是把这个系统放在振荡型的行情商品中,估计会亏得血本无归吧。其实现如今海龟已经不如当初那么神奇了,可以说是过了保质期吧。哈哈。whoknows.不过要是把这个海龟系统理解透了,我相信对于提高交易者自身对系统交易的理解也能上一个台阶了。以下就是海龟系统于"tradeblazer--交易开拓者"软件下的实现代码,大家可慢慢琢磨一下。(每一行//后的中文字都是对每一步骤的解释,这样有助于大家慢慢地消化理解.)复制内容到剪贴板代码:ParamsNumericRiskRatio(1);//%RiskPerN(0-100)NumericATRLength(20);//平均波动周期ATRLengthNumericboLength(20);//短周期BreakOutLengthNumericfsLength(55);//长周期FailSafeLengthNumericteLength(10);//离市周期TrailingExitLengthBoolLastProfitableTradeFilter(True);//使用入市过滤条件VarsNumericN;//N值NumericTotalEquity;//按最新收盘价计算出的总资产NumericTurtleUnits;//交易单位NumericSeriesDonchianHi;//唐奇安通道上轨,延后1个BarNumericSeriesDonchianLo;//唐奇安通道下轨,延后1个BarNumericSeriesfsDonchianHi;//唐奇安通道上轨,延后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号位置BeginIf(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=1){//开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交preBreakoutType=1;preBreakOutPrice=Donchianhi;SetGlobalVar(1,preBreakoutType);SetGlobalVar(2,preBreakOutPrice); myEntryPrice=min(high,DonchianHi+PriceScale*MinMove);myEntryPrice=IIF(myEntryPrice=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);//保存第一次开仓的价格}}}//长周期突破开仓FailsafeBreakoutpointIf(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=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=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的情况下将全部平仓}}