可能是Bug的一个问题
我在使用以下代码的完整版进行实盘操作时,发现能进行交易,但是日志输出有问题。 于是将完整版的A函数都改成了普通的交易函数进行回测时发现,符合Buy条件时,不会买入,但是该IF内部的其它代码会正常运行。 经过3个多小时排查,最后精简到以下代码。该代码中,若只将IF语句内的My_State[0] = 1给注释掉,那么Buy运行正常;若是不注释掉,则Buy会执行一次,日志输出一次,但是回测报告上没有任何交易记录,但是若再写一个Buy,写到IF语句之外,外面的Buy可以进行正常交易且有交易记录。 若只将把上面那条计算式进行注释,则Buy依然可以正常运行。 若将下面的Sell那一段代码解开,则都可以正常运行。 Params //此处添加参数 Numeric Choice_direction(0); //0:不开仓,1:开多仓,-1:开空仓 Numeric Buy_standary(0.3); //开多仓的标准数(零点几),默认0.5 Numeric Buy_Lots(1); //每次开多仓的手数,默认1 Numeric MA_Daily_Amplitude_Long(10); //日振幅移动平均的窗口长度,默认10 Vars //此处添加变量 Global Array<Numeric> My_State; //0 = 未委托 , 1 = 发出委托 Numeric MA_Daily_Amplitude; //十日的平均振幅 Global Numeric i; Events OnInit() { My_State[0] = 0; } OnBar(ArrayRef<Integer> indexs) { MA_Daily_Amplitude = (Summation(High,MA_Daily_Amplitude_Long) - Summation(Low,MA_Daily_Amplitude_Long)) / MA_Daily_Amplitude_Long; //MA_Daily_Amplitude = (Average(High,MA_Daily_Amplitude_Long) - Average(Low,MA_Daily_Amplitude_Long)) / MA_Daily_Amplitude_Long; //MA_Daily_Amplitude = (Average(High,MA_Daily_Amplitude_Long) - Average(Low,MA_Daily_Amplitude_Long)) / 10; //MA_Daily_Amplitude = (Average(High,10) - Average(Low,10)) / 10; //MA_Daily_Amplitude = (AverageFC(High,10) - AverageFC(Low,10)) / 10; //MA_Daily_Amplitude = (AverageFC(Open,10) - AverageFC(Close,10)) / 10; If(CurrentBar % 10 == 0) { If(My_State[0] == 0) { Buy(1,Close); My_State[0] = 1; FileAppend("C:\\Users\\14760\\Desktop\\量化交易\\交易日志\\daili","Buy222"); } //Else //{ //Sell(1,Close); //My_State[0] = 0; //FileAppend("C:\\Users\\14760\\Desktop\\量化交易\\交易日志\\daili","Sell"); //} } // }