把你前面回答我的问题里面的代码续写完成接着下面这个代码写完:c++#include TradePositionInfomqh#include TradeTrademqh#include TradeSymbolInfomqh CPositionInfo m_position; trade position objectCTrade m_tra
// 完成代码如下:
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- 仅在新K线生成时进行交易 static datetime PrevBars=0; datetime time_0=iTime(0); if(time_0==PrevBars) return; PrevBars=time_0;
// 计算DIFF、DEA、MACD指标
DIFF = iMA(NULL, 0, 12, 0, MODE_EMA, PRICE_CLOSE) - iMA(NULL, 0, 26, 0, MODE_EMA, PRICE_CLOSE);
DEA = iMA(NULL, 0, 9, 0, MODE_EMA, DIFF);
MACD = 2 * (DIFF - DEA / 2);
// 计算AH、AL指标
AH = iHighest(NULL, 0, MODE_MAIN, 13, 1);
AL = iLowest(NULL, 0, MODE_MAIN, 13, 0.3);
// 计算趋势线
trendline = iCustom(NULL, 0, "Trendline", 0, 0);
// 计算KDJ指标
K = iCustom(NULL, 0, "KDJ", 0, 0, 9, 3, 3, MODE_MAIN, 0);
D = iCustom(NULL, 0, "KDJ", 0, 1, 9, 3, 3, MODE_MAIN, 0);
J = iCustom(NULL, 0, "KDJ", 0, 2, 9, 3, 3, MODE_MAIN, 0);
// 判断交易条件
if (MACD > 0 && AH > AL && trendline > 0 && K > D && D > J) {
// 检查是否有已开仓的交易
if (m_position.Select(Symbol(), SELECT_BY_POS, MODE_TRADES)) {
// 检查已开仓交易的类型和数量
if (m_position.PositionType() == POSITION_TYPE_BUY && m_position.PositionLots() < Lots) {
// 如果已开仓交易为买入且数量小于目标数量,则增加买入交易数量
double buyLots = Lots - m_position.PositionLots();
m_trade.Buy(Symbol(), buyLots, 0, 0, 0, 0, "Buy", m_magic);
Print("增加买入交易数量:", buyLots);
} else if (m_position.PositionType() == POSITION_TYPE_SELL && m_position.PositionLots() < Lots) {
// 如果已开仓交易为卖出且数量小于目标数量,则增加卖出交易数量
double sellLots = Lots - m_position.PositionLots();
m_trade.Sell(Symbol(), sellLots, 0, 0, 0, 0, "Sell", m_magic);
Print("增加卖出交易数量:", sellLots);
}
} else {
// 如果没有已开仓的交易,则进行买入交易
m_trade.Buy(Symbol(), Lots, 0, 0, 0, 0, "Buy", m_magic);
Print("执行买入交易");
}
} else if (MACD < 0 && AH < AL && trendline < 0 && K < D && D < J) {
// 检查是否有已开仓的交易
if (m_position.Select(Symbol(), SELECT_BY_POS, MODE_TRADES)) {
// 检查已开仓交易的类型和数量
if (m_position.PositionType() == POSITION_TYPE_BUY && m_position.PositionLots() > 0) {
// 如果已开仓交易为买入且数量大于0,则平仓买入交易
m_trade.Close(m_position.PositionTicket(), m_position.PositionLots(), 0, 0, m_magic);
Print("平仓买入交易");
} else if (m_position.PositionType() == POSITION_TYPE_SELL && m_position.PositionLots() > 0) {
// 如果已开仓交易为卖出且数量大于0,则平仓卖出交易
m_trade.Close(m_position.PositionTicket(), m_position.PositionLots(), 0, 0, m_magic);
Print("平仓卖出交易");
}
}
}
} ``
原文地址: https://www.cveoy.top/t/topic/iqek 著作权归作者所有。请勿转载和采集!