想问下各位老师,各位大佬,我的这段代码跟图片中的第一张图的显示不一样,均线显示也不一样,也没有开平仓信号,不知道是那里错了。
//------------------------------------------------------------------------
// 简称: ps_macd
// 名称: 分时策略
// 类别: 公式应用
// 类型: 用户应用
// 输出: Void
//------------------------------------------------------------------------
Params
Numeric n(10); //前低偏移量
//MACD 参数
Numeric FastLength(12);
Numeric SlowLength(26);
Numeric MACDLength(9);
Vars
//此处添加变量
Numeric MACDDiff;
Numeric AvgMACD;
Series<Numeric> MACDValue;
Series<Numeric> fs_ma; //分时均线
Series<Numeric> prelow; //前低价
Series<Bool> upcross(False); //上穿
Series<Bool> dncross(False); //下穿
Plot plt1; //画板1
Events
OnInit()
{
plt1.figure(0);
plt1.setOption("MACD","color",red);
plt1.setOption("macd","color",Green);
}
OnBar(ArrayRef<Integer> indexs)
{
MACDDiff = XAverage( Close, FastLength ) - XAverage( Close, SlowLength ) ;
AvgMACD = XAverage(MACDDiff,MACDLength);
MACDValue = (MACDDiff - AvgMACD);
plt1.line("快线",MACDDiff);
plt1.line("慢线",AvgMACD);
plt1.line("0",0);
if (MACDValue >= 0)
plt1.barv("MACD",MACDValue);
Else
plt1.barv("macd",MACDValue);
// 4.计算分时均线
fs_ma = yma();
PlotNumeric("fs_ma",fs_ma);
// 5.计算开平条件
if(CrossOver(Close,fs_ma))
{
upcross = True ; //上穿标记(难点)
dncross = False;
PlotBool("上穿",True) ;
}
if(CrossOver(Close,fs_ma))
{
dncross = True ; //下穿标记
upcross = False ; //上穿的重置标记
}
//Commentary3("upcross",upcross);
//分时图做多:自下而上突破均线,回调不破均线,同时MACD水上金叉(贴近θ轴附近最佳,水下金叉不做),止损前低或者不下均线不走!
Bool islong =
//CrossOver(Close,fs_ma)
upcross
&& Close > fs_ma
&& ( (MACDValue[1] < 0 && MACDValue[0] > 0 ) && (MACDDiff > 0 && AvgMACD > 0));
//开空
Bool isshort = False ;
//6. 开平条件
If(MarketPosition == 0 && isshort)
{
Buy();
//开仓的时候记录 最低价
prelow = low - n ;
}
//收盘前平仓(日内)
If(EndTime == 0.145959)
{
Sell();
}
// 7。止损止盈
//多单平仓
Bool longex1 = MarketPosition == 1 && Low <= prelow; //止损 前低 (上穿时的K的最低价 -N 个点)
Bool longex2 = MarketPosition == 1 && C < fs_ma - n; //破分时均线
If(longex1)
{
Sell();
PlotString("止损 前低","损");
}
If(longex2)
{
Sell();
PlotString("破分时均线","破");
}
}
代码无法编译,你这个yma是什么
然后第一个图和第二个图是什么关系
公式相同还是什么? 看上去也不一样啊
//------------------------------------------------------------------------
// 简称: yma
// 名称: 分时均线计算
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
//此处添加参数
Numeric length(10);
Vars
//此处添加变量
Numeric wtdsum(0);
Numeric cumwt(0);
Numeric i;
Series<Numeric> tprice;
Numeric length_(0);
Begin
//此处添加代码正文
tprice = (Close);
length_ =(BarsSinceToday+1);
for i= 0 to length_-1
{
wtdsum = wtdsum + (vol[1]) * tprice[1];
cumwt = cumwt + (vol[1]);
}
Return wtdsum / cumwt ;
End
//------------------------------------------------------------------------
// 编译版本: 2025/08/26 200030
// 版权所有 wym5602096
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
yma 是自建函数,图片1是别人的,代码是一样的,只是我这没有信号,不知道是那里错了
yma()是什么?
//------------------------------------------------------------------------
// 简称: yma
// 名称: 分时均线计算
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
//此处添加参数
Numeric length(10);
Vars
//此处添加变量
Numeric wtdsum(0);
Numeric cumwt(0);
Numeric i;
Series<Numeric> tprice;
Numeric length_(0);
Begin
//此处添加代码正文
tprice = (Close);
length_ =(BarsSinceToday+1);
for i= 0 to length_-1
{
wtdsum = wtdsum + (vol[1]) * tprice[1];
cumwt = cumwt + (vol[1]);
}
Return wtdsum / cumwt ;
End
//------------------------------------------------------------------------
// 编译版本: 2025/08/26 200030
// 版权所有 wym5602096
// 更改声明 TradeBlazer Software保留对TradeBlazer平台
// 每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
yma 是自建函数,图片1是别人的,代码是一样的,只是我这没有信号,不知道是那里错了
截图截全一点,什么品种都不知道。试过完全和别人一样的环境配置码