Alex2020 发表于 2020-11-23 00:02:46

用SwingHigh 出现的问题,求教! 写了一个MACD顶背离的测试程序

本帖最后由 Alex2020 于 2020-12-11 18:32 编辑

写了一个顶背离的程序,, 为了避免出现  SwingHigh 为-1的情况,用了 If(Bofen1>0 && Bofen2>0 && BARbofen1>0 && BARbofen2>0 ) 来控制,
但是,没有起作用,还是不停的开仓.
请见如下简化的程序:


Vars
        Series<Numeric> BFBar1; //第1个波峰发生的bar
        Series<Numeric> BFBar2; //第2个波峰发生的bar
        Series<Numeric>        Bofen1 ; //第一个波峰的值
        Series<Numeric> BARbofen1; //第一个波峰的BAR回溯值
        Series<Numeric>        Bofen2 ; //第2个波峰的值
        Series<Numeric> BARbofen2; //第2个波峰的BAR值回溯

OnBar(ArrayRef<Integer> indexs)
        {

                Bofen1= SwingHigh(1,High,2,Length1); //最近第一个波峰
                BARbofen1= SwingHighBar(1,High,2,Length1); //最近第一个波峰Bar值
                BFBar1=CurrentBar-BARbofen1;  //最近第一个波峰发生时的BAR
               
                Bofen2= SwingHigh(2,High,5,Length1); //最近第2个波峰
                BARbofen2= SwingHighBar(2,High,5,Length1); //最近第2个波峰Bar回溯值
                BFBar2=CurrentBar-BARbofen2;   //最近第二个波峰发生时的BAR
               
                If(Bofen1>0 && Bofen2>0 && BARbofen1>0 && BARbofen2>0 )   //这个条件没有起作用
                {
                  if(Bofen1>Bofen2  && MACDLine<MACDLine && MarketPosition ==0)  //顶背离发生,开空仓, 无持仓时
                  {
                         MyEntryPrice=Open;
                         SellShort(Num,MyEntryPrice);              
                         Commentary("顶背离-开空: "+Text(MyEntryPrice));
                         SendOrderThisBar = True; //本条bar开过仓
                  }
                }       
        }       

18957330550 发表于 2021-9-30 11:06:54

SwingHigh 为-1是因为你swinghigh的参数取得不对。把参数调整下。控制开仓的语句你也是不对的

18957330550 发表于 2021-9-30 13:12:46

if(Bofen1>Bofen2  && MACDLine<MACDLine && MarketPosition ==0)  //顶背离发生,开空仓, 无持仓时,这里用的是回测值,但是你用法貌似错了。MarketPosition<>-1

huiwang01 发表于 2021-9-30 21:49:29

TB策略微信群
加群主微信:northquant
页: [1]
查看完整版本: 用SwingHigh 出现的问题,求教! 写了一个MACD顶背离的测试程序