Params
Numeric FastMA(12); //MACD短周期值
Numeric SlowMA(26); //MACD长周期值
Numeric AvgMA(9); //MACD慢线周期值
Numeric MAperiod(11); //11日均线周期值
Vars
Series<Numeric> MACDLine(0);
Series<Numeric> SignalLine(0);
Series<Numeric> MAValue(0);
Bool GoldenCross(false); // 记录是否金叉
Bool DeathCross(false); // 记录是否死叉
Numeric BuyPrice(0); // 买入价格
Numeric SellPrice(0); // 平仓价格
Numeric SellShortPrice(0); // 卖空价格
Numeric BuyToCoverPrice(0); // 空单平仓价格
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算MACD快线
MACDLine = XAverage(Close, FastMA) - XAverage(Close, SlowMA);
// 计算MACD慢线
SignalLine = XAverage(MACDLine, AvgMA);
// 计算11日均线
MAValue = AverageFC(Close, MAperiod);
// 判断是否金叉
GoldenCross = CrossOver(MACDLine[1], SignalLine[1]);
// 判断是否死叉
DeathCross = CrossUnder(MACDLine[1], SignalLine[1]);
// 在开盘时确定价格和交易条件
if (BarStatus == 2)
{
// 买入逻辑,增加价格在11均线上方的条件,以开盘价作为买入价格
if (GoldenCross && MarketPosition == 0 && Close > MAValue[1])
{
BuyPrice = Open;
Buy(0, BuyPrice);
}
// 多单平仓逻辑,增加不是根bar的条件,以开盘价作为平仓价格
if (MarketPosition == 1 && Low < MAValue[1] && CurrentBar > 0)
{
SellPrice = Open;
Sell(0, SellPrice);
}
// 卖空逻辑,增加价格在11均线下方的条件,以开盘价作为卖空价格
if (DeathCross && MarketPosition == 0 && Close < MAValue[1])
{
SellShortPrice = Open;
SellShort(0, SellShortPrice);
}
// 空单平仓逻辑,增加不是根bar的条件,以开盘价作为空单平仓价格
if (MarketPosition == -1 && High > MAValue[1] && CurrentBar > 0)
{
BuyToCoverPrice = Open;
BuyToCover(0, BuyToCoverPrice);
}
}
Commentary("MAValue[1]" + Text(MAValue[1]));
PlotNumeric("MAValue[1]",MAValue[1]);
}
BarStatus == 2 的意思是最新一根bar
意思是你这段交易代码只在最新一根bar运行
不要这个if条件就有信号了
我想开仓和平仓在开盘的时候就以开盘价确定,这该怎么写啊,如果以开盘价的时候就计算好平仓和开仓价格就不会闪烁了吧?
+1
你的思路是有问题
信号价格是由触发信号时的盘口价格决定
如果你想开平价格以开盘价确定,那你应该保证你的信号都是在k线开盘的时候就能确认。
要照着这个思路去写