TB海龟交易策略修正完整版

//------------------------------------------------------------------------

// 简称: MRJS_TurtleTrader

// 名称: 海龟交易策略--完整版

// 类别: 公式应用

// 类型: 用户应用

//------------------------------------------------------------------------

Params

    Numeric RiskRatio(1);                  // % Risk Per N ( 0 - 100)   

    Numeric boLength(20);                   // 短周期 BreakOut Length,系统1进入条件参数

Numeric teLength(10);

Numeric ATRLength(20);                   // ATr

Numeric ChuSHiZiJin(1000000);//初始资金

Numeric ChangZhouQiLen(55);//长周期长度

Numeric ChangZhouQiTuiChu(20);//长周期退出

Vars

Numeric MinPoint;                       // 最小变动单位

NumericSeries AvgTR;     // ATR

    Numeric N;                              // N 值

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

    Numeric TurtleUnits;                    // 交易单位   

NumericSeries DonchianHi;               // 唐奇安通道上轨,延后1个Bar,系统1

    NumericSeries DonchianLo;               // 唐奇安通道下轨,延后1个Bar,系统1

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

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

NumericSeries StopHPrice;               // 20日新高止损价 2*N

    NumericSeries StopLPrice;                // 20日新低止损价 2*N

NumericSeries DonchianHi2;               // 唐奇安通道上轨,延后1个Bar,系统1

    NumericSeries DonchianLo2;               // 唐奇安通道下轨,延后1个Bar,系统1

    Numeric ExitHighestPrice2;               // 离市时判断需要的55周期最高价   

Numeric ExitLowestPrice2;                // 离市时判断需要的55周期最低价

Numeric JiaCangCiShu(4); //加仓次数

NumericSeries DangQianJiaCangCiShu(1);//当前加仓次数

NumericSeries MoNiJiaCangCiShu(1);//模拟加仓次数 是否有效突破时用

    Numeric myEntryPrice;                   // 开仓价格

    Numeric myExitPrice;                    // 平仓价格

NumericSeries preEntryPrice(0);        // 前一次开仓的价格

NumericSeries KeYongZiJin(0);        // 可用资金

NumericSeries KaiCangShiYingKui(0);//开仓时盈亏

NumericSeries preTPEntryPrice(0);        // 前一次突破的价格

Bool SendOrderThisBar(False);           // 当前Bar有过交易

BoolSeries PreBreakoutFailure(false); // 前一次突破是否失败

BoolSeries ChangZhouQiZhiSun(false); //长周期止损 true ,短周期止损false

//NumericSeries preEntryPriceH(0);        // 前一次20日新高价格

//NumericSeries preEntryPriceL(9999999);        // 前一次20日新低价格

Begin

    If(BarStatus == 0)

    {

  preEntryPrice = InvalidNumeric;

  PreBreakoutFailure = false;//前一次是否有效突破  

  KeYongZiJin=ChuSHiZiJin;

  StopHPrice=0;

  StopLPrice=99999;

  SetGlobalVar(60,0);//创20日新高新低标记 1 高 -1 为低  

  

}

SendOrderThisBar =false;

MinPoint = MinMove*PriceScale;

    AvgTR = XAverage(TrueRange,ATRLength);

N =AvgTR[1];

    TotalEquity =KeYongZiJin; //Portfolio_CurrentCapital() + Portfolio_UsedMargin();//

    TurtleUnits = (TotalEquityRiskRatio/100) /(AvgTR[1] ContractUnit()*BigPointValue());

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

If(TurtleUnitsboLength) //PreBreakoutFailure==false &&

{

  

  If(High>DonchianHi) //创20日新高

  {   

   StopLPrice=999999;

   /*

   if(StopHPrice1) //首次突破

   {

    preTPEntryPrice=DonchianHi;

    StopHPrice=preTPEntryPrice-2*N;

    MoNiJiaCangCiShu=1;

   }

   SetGlobalVar(60,1);

  }

  

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

  {         

   

   If(Open >= preTPEntryPrice + 0.5N && MoNiJiaCangCiShu= preTPEntryPrice + 0.5N && MoNiJiaCangCiShuLow+2*N)

   {

    StopLPrice =Low+2N; // SetGlobalVar(21,Low+2N);

   }

   */

   If(getglobalvar(60)-1) //首次突破

   {

    preTPEntryPrice=Low;

    StopLPrice =Low+2*N;

    MoNiJiaCangCiShu=1;

   }

   SetGlobalVar(60,-1);

  }

  

  If(GetGlobalVar(60) ==-1) // 有模拟空仓的情况

  {         

   

   If(Open StopLPrice) //有效突破 回撤到2*atr

  {

   If(preTPEntryPrice-StopLPrice ExitHighestPrice )

  {

   If(preTPEntryPrice-ExitHighestPrice DonchianHi  && PreBreakoutFailure)

        {

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

            myEntryPrice = min(high,DonchianHi + MinPoint);

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

            preEntryPrice = myEntryPrice;

            SendOrderThisBar = True;

            SellShort(TurtleUnits,myEntryPrice);

   SendOrderThisBar = True;

   KaiCangShiYingKui=Portfolio_TotalProfit;

   DangQianJiaCangCiShu=1;

   //PlotString("top","jkc20",Portfolio_TotalProfit);  

   ChangZhouQiZhiSun=false;

        }

    }

  // 触发长周期突破

    If(MarketPosition == 0 )

    {

        // 突破开仓

        If(High > DonchianHi2 )

        {

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

            myEntryPrice = min(high,DonchianHi2 + MinPoint);

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

            preEntryPrice = myEntryPrice;

            SendOrderThisBar = True;

            SellShort(TurtleUnits,myEntryPrice);

   SendOrderThisBar = True;

   KaiCangShiYingKui=Portfolio_TotalProfit;

   DangQianJiaCangCiShu=1;

   //PlotString("top","jkc20",Portfolio_TotalProfit);  

        }

    }

//是否创长周期新高

    If(MarketPosition==1)

{

  If(High>DonchianHi2)

  {

   ChangZhouQiZhiSun=True;

  }

}

If(MarketPosition==-1)

{

   If(Low Open, Open,myExitPrice); // 大跳空的时候用开盘价代替

            

   Sell(0,myExitPrice);    // 将系统1持有多仓平仓

   

   KeYongZiJin=KeYongZiJin[1]+2*(Portfolio_TotalProfit-KaiCangShiYingKui);

   If(KeYongZiJin>ChuSHiZiJin+Portfolio_TotalProfit)

   {

    KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;

   }

   

   

   

        }

  

  //长周期止损

  If(Low Open, Open,myExitPrice); // 大跳空的时候用开盘价代替

            

   Sell(0,myExitPrice);    // 将系统1持有多仓平仓

   

   KeYongZiJin=KeYongZiJin[1]+2*(Portfolio_TotalProfit-KaiCangShiYingKui);

   If(KeYongZiJin>ChuSHiZiJin+Portfolio_TotalProfit)

   {

    KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;

   }

   

   

   

        }

  

   

  If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1 )

  {

   If(Open >= preEntryPrice + 0.5N && DangQianJiaCangCiShu= preEntryPrice + 0.5N && DangQianJiaCangCiShuChuSHiZiJin+Portfolio_TotalProfit)

   {

    KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;

   }

  }

  

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

    {

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

  //Commentary("ExitHighestPrice="+Text(ExitHighestPrice));

        If(High > ExitHighestPrice && ChangZhouQiZhiSun==false)//

        {

            myExitPrice = Min(High,ExitHighestPrice + MinPoint);

   myExitPrice = IIF(myExitPrice ChuSHiZiJin+Portfolio_TotalProfit)

   {

    KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;

   }

  }

  

  //长周期止损

  If(High > ExitHighestPrice2 && ChangZhouQiZhiSun)

  {

   myExitPrice = Min(High,ExitHighestPrice2 + MinPoint);

   myExitPrice = IIF(myExitPrice ChuSHiZiJin+Portfolio_TotalProfit)

   {

    KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;

   }

  }

  

        If(preEntryPrice!=InvalidNumeric && TurtleUnits >= 1)

  {

   If(Open = preEntryPrice + 2 * N   && SendOrderThisBar == false) // 加仓Bar不止损 && SendOrderThisBar == false

  {

   myExitPrice = preEntryPrice + 2 * N;

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

   

   

   KeYongZiJin=KeYongZiJin[1]+2*(Portfolio_TotalProfit-KaiCangShiYingKui);

   If(KeYongZiJin>ChuSHiZiJin+Portfolio_TotalProfit)

   {

    KeYongZiJin=ChuSHiZiJin+Portfolio_TotalProfit;

   }

  }

   

    }

PlotNumeric("PL",Portfolio_TotalProfit);

//PlotNumeric("PL2",KeYongZiJin);

End

//------------------------------------------------------------------------

// 编译版本 GS2010.12.08

// 用户版本 2013/03/14 14:05

// 版权所有 ljh7607

// 更改声明 TradeBlazer Software保留对TradeBlazer平台

//   每一版本的TrabeBlazer公式修改和重写的权利

//------------------------------------------------------------------------
交易技术, 交易策略, 源码



                                                    风险提示及免责条款

市场有风险,投资需谨慎。本文不构成个人投资建议,也未考虑到个别用户特殊的投资目标、财务状况或需要。用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部