//下一个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行这个变量应该这么定义
他交易几次?
弄个全局变量或者全局数组吧
你对全局变量真的有执念啊
序列变量比较适合TBQ机制
全局更好使
代码不完整,无法运行,诊断不了。
代码诊断和代写问题看置顶帖的收费代写服务