#include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh>

CPositionInfo m_position; // trade position object CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object

//--- input parameters input double Lots = 0.05; // 交易手数 input ulong m_magic=42828093; // 魔术数字 ulong m_slippage=10; // 滑点

// 定义指标变量 double DIFF, DEA, MACD, AH, AL, trendline, K, D, J;

//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(!m_symbol.Name(Symbol())) // 设置交易品种名称 return(INIT_FAILED);

RefreshRates();

string err_text="";
if(!CheckVolumeValue(Lots,err_text))
{
    Print(err_text);
    return(INIT_PARAMETERS_INCORRECT);
}

//---
m_trade.SetExpertMagicNumber(m_magic);

if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK))
    m_trade.SetTypeFilling(ORDER_FILLING_FOK);
else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC))
    m_trade.SetTypeFilling(ORDER_FILLING_IOC);
else
    m_trade.SetTypeFilling(ORDER_FILLING_RETURN);

m_trade.SetDeviationInPoints(m_slippage);

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- }

//+------------------------------------------------------------------+ //| 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() > 0) {
            // 如果已开仓交易为卖出且数量大于0,则平仓卖出交易
            m_trade.Close(m_position.PositionTicket(), m_position.PositionLots(), 0, 0, m_magic);
            Print("平仓卖出交易");
        }
    } 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() < Lots) {
            // 如果已开仓交易为卖出且数量小于目标数量,则增加卖出交易数量
            double sellLots = Lots - m_position.PositionLots();
            m_trade.Sell(Symbol(), sellLots, 0, 0, 0, 0, "Sell", m_magic);
            Print("增加卖出交易数量:", sellLots);
        }
    } else {
        // 如果没有已开仓的交易,则进行卖出交易
        m_trade.Sell(Symbol(), Lots, 0, 0, 0, 0, "Sell", m_magic);
        Print("执行卖出交易");
    }
}

}


原文地址: https://www.cveoy.top/t/topic/iqgI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录