求管理帮忙检查策略

写了一个唐奇安通道突破建仓,最大值回撤2atr止损的策略,回测只出现一个信号。请管理帮忙看看哪里写错了。

// 名称: 突破atr止损

// 类别: 公式应用

// 类型: 用户应用

// 输出: Void

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

Params

   Numeric ATRLength(20);          // 平均波动周期 ATR Length

   Numeric boLength(20);           // 短周期 BreakOut Length

   Numeric RiskRatio(1);           // 单笔亏损%

   Numeric Stop_per(5);            //止损 利润百分比

   


Vars

Numeric myprice;                //委托价格

   Series<Numeric> AvgTR;          //ATR

   Numeric N;                      // N值

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

   Numeric TurtleUnits;              // 计划开仓手数

   Series<Numeric> DonchianHi;      // 唐奇安通道上轨,延后1个Bar

   Series<Numeric> DonchianLo;      // 唐奇安通道下轨,延后1个Bar

   Series<Numeric> lasthh;          //离市最高价

   Series<Numeric> lastll;          //离市最低价

   Numeric myEntryPrice;             // 开仓价格

   Numeric myExitPrice;               //平仓价格

   Numeric MinPoint;                // 最小变动单位

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

   Series<Numeric> preEntryPrice(0); // 前一次开仓的价格

series<Numeric> ExitLowestPrice; // 离市最低价格

series<Numeric> ExitHighestPrice; // 离市最高价

   

Defs

//此处添加公式函数

Events

   OnBar(ArrayRef<Integer>indexs)

   {

       If(BarStatus == 0)                    //如果当前bar是第一组数据

MinPoint = MinMove*PriceScale;       //最小变动单位=当前商品最小变动量*计数单位(一跳是多少)

       AvgTR = XAverage(TrueRange,ATRLength);   //求atr,计算20日高低点的加权平均差值

       N=AvgTR[1];                           //定义前一根K线的atr,防止信号闪烁

       TotalEquity=Portfolio_CurrentCapital()+Portfolio_UsedMargin();    //总资金=当前开盘可用资金+当前持仓保证金

       TurtleUnits=(TotalEquity*RiskRatio/100)/(N*ContractUnit()*BigPointValue());     //开仓手数=总资金1%/atr*合约基本单位数量*每点的基本价值(人民币)

       TurtleUnits=IntPart(TurtleUnits);                // 对小数取整(不是四舍五入,是取整数部分)

       DonchianHi=HighestFC(High[1],boLength);          //定义唐奇安通道上轨

       DonchianLo=LowestFC(Low[1],boLength);           //定义唐奇安通道下轨

       

       If(MarketPosition==0)     //如果当前没有持仓,并且,前一次突破失败

       {

       If(High>DonchianHi&&TurtleUnits>=1)                 //当最高价大于唐奇安上轨,并且可开仓手数大于1时

           {

               myEntryPrice=min(high,DonchianHi+MinPoint);         //开仓价格=唐奇安上轨+1个最小变动单位

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

               preEntryPrice=myEntryPrice;

               Buy(TurtleUnits,myEntryPrice);          //买开仓价的可开仓单位

            }


       If(Low<DonchianLo&&TurtleUnits>=1)                // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交


           {

                myEntryPrice=max(low,DonchianLo-MinPoint);    //开仓价格=唐奇安上轨-1个最小变动单位

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

                preEntryPrice=myEntryPrice;

                SellShort(TurtleUnits,myEntryPrice);

           }


       }

       //出场

       If(MarketPosition==1)//有多仓时

{

If(BarsSinceEntry==0)

{lasthh=High;

lasthh=high;

ExitLowestPrice=(lasthh-2*N);

}      

Else

lasthh=max(high,lasthh);

ExitLowestPrice=(lasthh-2*N);  //定义离市条件

If(Low<ExitLowestPrice)  //触发离场条件

{

myExitPrice = Min(Low,ExitLowestPrice - MinPoint);

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

Sell(0,myExitPrice);                                       //  平多单

}

}

If(MarketPosition==-1)//有空仓时

      {

If(BarsSinceEntry==0)

{lastll=Low;

lastll=low;

ExitLowestPrice=(lastll+2*N);

}      

Else

lastll=Min(Low,lastll);

ExitLowestPrice=(lastll-2*N);  //定义离市条件

{If(Low<ExitLowestPrice)  //触发立场条件

{

myExitPrice = Min(Low,ExitLowestPrice - MinPoint);

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

BuyToCover(0,myExitPrice);                                       // 平空单

}

}

}

}


求高手帮忙写一个策略
求大神帮忙
简单策略求大佬帮忙编一下
求老师帮忙写一个策略的代码
代码检查
策略代码检查不出问题,是否有专门的人帮忙看源码问题?
求老师 帮忙写个做多策略
求老师帮忙看看
求大佬帮忙改改/(ㄒoㄒ)/~~
求老师帮忙指点一下

我一个非专业的认为是这边空头平仓时赋值错误。而且else后面得要跟大括号,不然只默认运行else后面一行的代码。

data-href=