我用chatgtp 编译成功了一个策略,但是回测的时候1000个样本发现才成交一次,有老师高手请求指点,谢谢!
这帮不了忙
代码这种东西有问题,就得问作者,谁写的,谁清楚
ai写的,那你还是得问ai
不知道哪里出错了,还请帮忙
Params
Numeric MaLen(10); // 均线周期10
Numeric CrossThreshold(0.1); // 判断阳线或阴线的阈值,十字星判定
Numeric StopLossBars(3); // 止损K线数(最近3根K线)
Vars
Series<Numeric> Ma10(0); // 存储均线10的值
Series<Bool> BullSignal(False); // 多头信号标识
Series<Bool> BearSignal(False); // 空头信号标识
Numeric ClosePrice(0); // 当前收盘价
Numeric OpenPrice(0); // 当前开盘价
Numeric Qty(1); // 每次买卖的数量
Numeric LowestLow(0); // 最近3根K线最低价
Numeric HighestHigh(0); // 最近3根K线最高价
Series<Numeric> IntMa10(0); // 存储均线10的整数部分(每根K线的整数部分)
Series<Numeric> IntPrevMa(0); // 存储前一根K线的均线10整数部分
Series<Numeric> IntPrevPrevMa(0); // 存储再前一根K线的均线10整数部分
Bool BuySignal(False); // 买入信号
Bool SellSignal(False); // 卖出信号
Numeric TradeCount(0); // 累加交易次数
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算均线10的值
Ma10 = XAverage(Close, MaLen);
// 手动取整数部分(去掉小数部分)
IntMa10 = (Ma10 - (Ma10 % 1)); // 获取每根K线的整数部分
IntPrevMa = (Ma10[1] - (Ma10[1] % 1)); // 前一根K线的整数部分
IntPrevPrevMa = (Ma10[2] - (Ma10[2] % 1)); // 再前一根K线的整数部分
// 获取当前开盘价和收盘价
ClosePrice = Close;
OpenPrice = Open;
// 判断买入条件(均线向上拐,阳线或十字星,且价格在均线10之上)
BullSignal = (IntMa10 > IntPrevMa) AND (IntPrevMa >= IntPrevPrevMa) AND (ClosePrice > OpenPrice OR Abs(ClosePrice - OpenPrice) <= CrossThreshold) AND (ClosePrice > Ma10);
// 判断卖出条件(均线向下拐,阴线或十字星,且价格在均线10之下)
BearSignal = (IntMa10 < IntPrevMa) AND (IntPrevMa <= IntPrevPrevMa) AND (ClosePrice < OpenPrice OR Abs(ClosePrice - OpenPrice) <= CrossThreshold) AND (ClosePrice < Ma10);
// 计算最近3根K线的最低价和最高价
LowestLow = Lowest(Low, StopLossBars); // 获取最近3根K线的最低价
HighestHigh = Highest(High, StopLossBars); // 获取最近3根K线的最高价
// 如果满足买入条件,设置买入信号
If (MarketPosition == 0 AND BullSignal)
{
BuySignal = True; // 标记下一根K线开盘时进行买入
}
// 如果满足卖空条件,设置卖空信号
If (MarketPosition == 0 AND BearSignal)
{
SellSignal = True; // 标记下一根K线开盘时进行卖空
}
// 在下一根K线的开盘时执行买入或卖空
If (BuySignal)
{
Buy(Qty, Open); // 在下一根K线开盘时买入
TradeCount = TradeCount + 1; // 增加交易次数
BuySignal = False; // 重置买入信号
}
If (SellSignal)
{
SellShort(Qty, Open); // 在下一根K线开盘时卖空
TradeCount = TradeCount + 1; // 增加交易次数
SellSignal = False; // 重置卖空信号
}
// 止损条件:买多时,当前价格低于最近3根K线的最低价
If (MarketPosition == 1 AND ClosePrice < LowestLow)
{
// 止损平仓
Sell(Qty, Close); // 平仓,使用市场价格
TradeCount = TradeCount + 1; // 增加交易次数(止损平仓视为交易)
}
// 止损条件:卖空时,当前价格高于最近3根K线的最高价
If (MarketPosition == -1 AND ClosePrice > HighestHigh)
{
// 止损平仓
BuyToCover(Qty, Close); // 平仓,使用市场价格
TradeCount = TradeCount + 1; // 增加交易次数(止损平仓视为交易)
}
}