大家帮我看看我写的策略有什么问题

Params
    Numeric K1(20);
    Numeric K2(5);
    Numeric K3(60);
    Numeric M1(10);
    
Vars
    series<Numeric> MA;
    series<Numeric> MA1;
    series<Numeric> MA2;
    Numeric MinPoint;
    Numeric MyEntryPrice;
    Numeric MyExitPrice;
    
Events

    OnBar(ArrayRef<Integer> indexs)
    {
        MA = DATA1.AverageFC(Close[1],K1);
        MA1 = AverageFC(Close[1],K2);
        MA2 = AverageFC(Close[1],K3);
        DATA0.PlotNumeric("MA",MA);
        PlotNumeric("MA1",MA1);
        PlotNumeric("MA2",MA2);
        MyEntryPrice = AvgEntryPrice;
        MinPoint = MinMove*pricescale;
        If(MarketPosition == 0 && CrossOver(MA1[1],MA2[1]) && Close[1] > MA);
        
            Buy(1,Open);
            
        If(MarketPosition == 1)
        {
            If(Low <= MyEntryPrice - M1*MinPoint)
            {
                MyExitPrice = MyEntryPrice - M1*MinPoint;
                Sell(1,MyExitPrice);
            }
            If(Close[1] < Open[1] && close < Low[1])
            
                Sell(1,Open);
        }
        
        If(MarketPosition == 0 && CrossUnder(MA1[1],MA2[1]) && Close[1] < MA)
            
            SellShort(1,Open);
            
        If(MarketPosition == -1)
        {
            If(High >= MyEntryPrice + M1*MinPoint)
            {    
                MyExitPrice = MyEntryPrice + M1*MinPoint;
                BuyToCover(1,MyExitPrice);
            }
            If(Close[1] > Open[1] && Close > High[1])
            
                BuyToCover(1,Open);
        
        
        }
            
            
            
    }

下面的截图就是我回测的时候出现的,我想了很久都不知道为什么会出现频繁建仓的问题。大家帮忙看看

帮忙看看我的对冲套利平仓条件有什么问题
老师大咖好,我有个股票策略想请大家帮忙写代码,很简单的策略。
关于策略有效性的请教
求助!哪位朋友帮我写一个简单的策略?
收盘价策里,信号闪烁的问题.
请老师帮我看看写的策略不能交易,谢谢!
帮忙看看我做测试的程序
求大神指教看我这个公式写的问题出在哪里
帮忙看看我的编写
我想请一位兼职能帮我写TBQ程序员

老师你好,这个是根据你们的tb语言编程里面的追踪止盈止损写的,您说的序列函数问题,我在三个变量ma中已经用了series了,怎么还会有序列函数问题呢?偷价问题,open那里我是知道的,但是您说的另外一个MyExitPrice,这个写法是你们tb教程里面歇过来的,不知道为什么会有偷价问题呢?您说的出场顺序也不对,后面的应该写到前面,这是什么意思?问题有点多,麻烦您花点时间解答一下

您好!

1、序列函数问题,不是说序列变量问题。CrossOver这个函数是个序列函数,如果你搞不清楚深层次的原因,记住不要放在条件语句中就可以了,可以把这个函数值赋值给一个变量,条件语句中对这个变量进行判断,效果是一样的且没有任何问题。

2、出场偷价,是说Open的跳空没有考虑到,如果Open直接就比MyEntryPrice - M1*MinPoint低,你说止损应该是哪个价格合理呢?

 If(Low <= MyEntryPrice - M1*MinPoint)
            {
                MyExitPrice = MyEntryPrice - M1*MinPoint;
                Sell(1,MyExitPrice);
            }

3、顺序问题,先写止损出场,后写开盘价出场,这样会导致,止损出场优先。但实际上如果开盘就出场了,轮得到止损吗?您细想下

最后,再万年不变地啰嗦一句,学习要一步步来,先学基础,掌握后再做复杂的东西。您能把示例的代码拿来做练习,这点很好!但是第一步,您需要原封不动地复制示例代码,把每一句是干嘛的搞清楚,学通一个,后面类似的就才好办。这就跟学书法,先要临帖是一个道理,如果一上来,就想搞出个自己的体,恐怕就是天才都难做到啊。

好的,感谢老师的回复,因为刚学tb没多久,所以有很多知识点盲区,感谢老师指点

 If(MarketPosition == 0 && CrossUnder(MA1[1],MA2[1]) && Close[1] < MA) 

这一句和后面还有句类似,都存在序列函数问题

 

       If(MarketPosition == 1)
        {
            If(Low <= MyEntryPrice - M1*MinPoint)
            {
                MyExitPrice = MyEntryPrice - M1*MinPoint;
                Sell(1,MyExitPrice);
            }
            If(Close[1] < Open[1] && close < Low[1])
                Sell(1,Open);
        }

这一段有两个问题,第一偷价问题,两个Sell都有;第二出场顺序也不对,后面的应该写到前面

 

多了个分号,还有序列函数问题。还有偷价问题