//下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组
OnBarClose(ArrayRef<Integer> indexs)
{
//多头入场
If(MarketPosition == 0)
{
If(MA60[1]<=MA20[1] And MA10[1]>MA20[1] And MA10>MA20 And MA20>MA60CDValue > 0.43*ATRVal)// And VolMA > VolumeFactor*VolMA[1])
{
myEntryPrice = Open;
myStopLossPrice = myEntryPrice - ATRVal*2;
Buy(Lots,Open);
}
}
//多头出场
If(MarketPosition == 1 And BarsSinceEntry >= 1)
{
// 止损
If(Close <= myStopLossPrice)
{
Sell(0,Open);
}
// 趋势反转出场
If(Close < MA20 )
{
Sell(0,Open);
}
}
//空头入场
If(MarketPosition == 0)
{
If(MA60[1] >= MA20[1] And MA10[1] < MA20[1] And MA10 < MA20 And MA20 < MA60)
{
myEntryPrice = Open;
myStopLossPrice_S = myEntryPrice + ATRVal*2;
SellShort(Lots,Open);
}
}
//空头出场
If(MarketPosition == -1 And BarsSinceEntry >= 1)
{
// 止损或止盈
If(Close >= myStopLossPrice_S)
{
BuyToCover(0, Open);
}
// 趋势反转出场
If(Close > MA205)
{
BuyToCover(0, Open);
}
}
谢谢老师,问题已经解决
下面是详细的原代码,请帮我查一下。谢谢
//------------------------------------------------------------------------
// 简称: M85
// 名称: 5081
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
// MA参数
Numeric FastMA(10); // 快速EMA周期
Numeric MediumMA(20); // 中速EMA周期
Numeric SlowMA(60); // 慢速EMA周期
// MACD参数
Numeric MACDFast(4); // MACD快线周期
Numeric MACDSlow(12); // MACD慢线周期
Numeric MACDSignal(4); // MACD信号周期
// 动态ATR风控
Numeric ATRPeriod(12);
Numeric EntryATRFactor(1.3); // 入场ATR倍数
Numeric StopLossATR(2); // 止损ATR倍数
Numeric TakeProfitATR(5); // 止盈ATR倍数
// 成交量过滤
Numeric VolumeLength(5); // 成交量均线周期
Numeric VolumeFactor(1.2); // 成交量放大阈值
// 资金管理
Numeric Lots(1); // 开仓手数
Numeric RiskPercent(1); // 单笔风险百分比
Numeric MaxLots(10); // 最大手数限制
Numeric millsecs(1000);
Vars
// MA变量
Series<Numeric> MA10;
Series<Numeric> MA20;
Series<Numeric> MA60;
//MACD变量
Series<Numeric> MACDDiff;
Series<Numeric> AvgMACD;
Series<Numeric> MACDValue;
// ATR变量
Series<Numeric> ATRVal;
// 成交量均线
Series<Numeric> VolMA;
// 开仓价格
Numeric myEntryPrice;
Numeric myStopLossPrice; //止损
Numeric myStopLossPrice_S; //空头止损
Numeric myTakeProfitPrice; //止盈
Bool UpTrend(False); //多头
Bool DnTrend(False); //空头
Numeric avg;
Global Integer timerId;
Events
//此处实现事件函数
//在所有的数据源准备完成后调用,应用在数据源的设置等操作
OnReady()
{
SetBackBarMaxCount(1+Max(Max(FastMA,MediumMA),SlowMA));
}
//在新bar的第一次执行之前调用一次,参数为新bar的图层数组
OnBarOpen(ArrayRef<Integer> indexs)
{
}
//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
OnBar(ArrayRef<Integer> indexs)
{
Range[0:DataSourceSize() - 1]
{ //均线计算
MA10 = AverageFC(Close,FastMA);
MA20 = AverageFC(Close,MediumMA);
MA60 = AverageFC(Close,SlowMA);
PlotNumeric("MA10",MA10);
PlotNumeric("MA20",MA20);
PlotNumeric("MA60",MA60);
//MACD计算
MACDDiff = XAverage( Close, MACDFast ) - XAverage( Close, MACDSlow ) ;
AvgMACD = XAverage(MACDDiff,MACDSignal);
MACDValue = 2 * (MACDDiff - AvgMACD);
// 波动性与成交量
ATRVal = AvgTrueRange(ATRPeriod);
VolMA = Average(Vol, VolumeLength);
}
//多头止损
If(MarketPosition == 1 And BarsSinceEntry >= 1)
{
If(Low <= myEntryPrice - ATRVal*StopLossATR)
{
Sell(0,Open);
}
}
//空头止损
If(MarketPosition == -1 And BarsSinceEntry >= 1)
{
If(High >= myEntryPrice + ATRVal*StopLossATR)
{
BuyToCover(0, Open);
}
}
}
//下一个Bar开始前,重新执行当前bar最后一次,参数为当前bar的图层数组
OnBarClose(ArrayRef<Integer> indexs)
{
//空头入场
If(MarketPosition == 0)
{
If(MA60[1] >= MA20[1] And MA10[1] < MA20[1] And MA10 < MA20 And MA20 < MA60 And MACDValue < -0.43*ATRVal)
{
myEntryPrice = Open;
SellShort(Lots,Open);
}
Else If(MA60[1] <= Close[1] And MA10[1] < MA20[1] And MA10 < MA20 And Close < MA60 And MACDValue < -0.43*ATRVal)
{
myEntryPrice = Open;
SellShort(Lots,Open);
}
Else If(MA60[1] <= Close[1] And MA10[1] >= MA20[1] And MA10 < MA20 And Close < MA60 And MACDValue < -0.43*ATRVal)
{
myEntryPrice = Open;
SellShort(Lots,Open);
}
Else If(MA20[1] < MA60[1] And MA10[1] >= MA20[1] And MA10 < MA20 And MA20 < MA60 And MACDValue < -0.43*ATRVal)
{
myEntryPrice = Open;
SellShort(Lots,Open);
}
}
//空头出场
If(MarketPosition == -1 And BarsSinceEntry >= 1)
{
If(Close > MA20
Or (Close > MA10 And Close[1] > MA10[1]))
{
BuyToCover(0, Open);
}
}
//多头入场
If(MarketPosition == 0)
{
If(MA60[1]<=MA20[1] And MA10[1]>MA20[1] And MA10>MA20 And MA20>MA60 And MACDValue > 0.43*ATRVal)// And VolMA > VolumeFactor*VolMA[1])
{
myEntryPrice = Open;
Buy(Lots,Open);
}
Else If(MA60[1]>=Close[1] And MA10[1]>MA20[1] And MA10>MA20 And Close>MA60 And MACDValue > 0.43*ATRVal)
{
myEntryPrice = Open;
Buy(Lots,Open);
}
Else If(MA60[1]>=Close[1] And MA10[1]<=MA20[1] And MA10>MA20 And Close>MA60 And MACDValue > 0.43*ATRVal)
{
myEntryPrice = Open;
Buy(Lots,Open);
}
Else If(MA20[1]>MA60[1] And MA10[1]<=MA20[1] And MA10>MA20 And MA20>MA60 And MACDValue > 0.43*ATRVal)
{
myEntryPrice = Open;
Buy(Lots,Open);
}
}
//多头出场
If(MarketPosition == 1 And BarsSinceEntry >= 1)
{
If(Close < MA20
Or (Close < MA10 And Close[1] < MA10[1]))
{
Sell(0,Open);
}
}
}
//------------------------------------------------------------------------
// 编译版本 2025/07/04 194828
// 版权所有 Billszhan9702
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
果然是在你没给的代码里出问题。
53行这个变量应该这么定义
他交易几次?
弄个全局变量或者全局数组吧
你对全局变量真的有执念啊
代码不完整,无法运行,诊断不了。
代码诊断和代写问题看置顶帖的收费代写服务