extern int MagicNumber = 92133;
extern double InitialLots = 0.5;
extern double TakeProfitAmount = 80.0;

bool isBuyOrderTriggered = false;
bool isSellOrderTriggered = false;
double buyOrderOpenPrice = 0.0;
double sellOrderOpenPrice = 0.0;

void OnTick()
{
    double currentPrice = MarketInfo(Symbol(), MODE_BID);
    
    if (!IsOpenOrders())
    {
        if (!isBuyOrderTriggered)
        {
            // 挂单条件
            double buyPrice = currentPrice + 200 * Point;
            
            // 挂单
            OrderSend(Symbol(), OP_BUYSTOP, InitialLots, buyPrice, 10, 0, 0, 'Buy Stop', MagicNumber, 0, Green);
            isBuyOrderTriggered = true;
        }
        
        if (!isSellOrderTriggered)
        {
            // 挂单条件
            double sellPrice = currentPrice - 200 * Point;
            
            // 挂单
            OrderSend(Symbol(), OP_SELLSTOP, InitialLots, sellPrice, 10, 0, 0, 'Sell Stop', MagicNumber, 0, Red);
            isSellOrderTriggered = true;
        }
    }
    else
    {
        int buyOrder = GetFirstBuyOrder();
        int sellOrder = GetFirstSellOrder();
        
        if (buyOrder != -1 && !isBuyOrderTriggered)
        {
            double buyOrderOpenPrice = OrderOpenPrice(buyOrder);
            
            // 多单信号
            double buyOrderTakeProfit1 = buyOrderOpenPrice + 100 * Point;
            double buyOrderTakeProfit2 = buyOrderOpenPrice + 200 * Point;
            double buyOrderTakeProfit3 = buyOrderOpenPrice + 300 * Point;
            double buyOrderTakeProfit4 = buyOrderOpenPrice + 400 * Point;
            
            // 下单
            OrderSend(Symbol(), OP_BUY, 0.3, currentPrice, 10, buyOrderTakeProfit1, 0, 'Buy Signal 1', MagicNumber, 0, Blue);
            OrderSend(Symbol(), OP_BUY, 0.18, currentPrice, 10, buyOrderTakeProfit2, 0, 'Buy Signal 2', MagicNumber, 0, Blue);
            OrderSend(Symbol(), OP_BUY, 0.1, currentPrice, 10, buyOrderTakeProfit3, 0, 'Buy Signal 3', MagicNumber, 0, Blue);
            OrderSend(Symbol(), OP_BUY, 0.06, currentPrice, 10, buyOrderTakeProfit4, 0, 'Buy Signal 4', MagicNumber, 0, Blue);
            
            isBuyOrderTriggered = true;
        }
        
        if (sellOrder != -1 && !isSellOrderTriggered)
        {
            double sellOrderOpenPrice = OrderOpenPrice(sellOrder);
            
            // 空单信号
            double sellOrderTakeProfit1 = sellOrderOpenPrice - 100 * Point;
            double sellOrderTakeProfit2 = sellOrderOpenPrice - 200 * Point;
            double sellOrderTakeProfit3 = sellOrderOpenPrice - 300 * Point;
            double sellOrderTakeProfit4 = sellOrderOpenPrice - 400 * Point;
            
            // 下单
            OrderSend(Symbol(), OP_SELL, 0.3, currentPrice, 10, sellOrderTakeProfit1, 0, 'Sell Signal 1', MagicNumber, 0, Red);
            OrderSend(Symbol(), OP_SELL, 0.18, currentPrice, 10, sellOrderTakeProfit2, 0, 'Sell Signal 2', MagicNumber, 0, Red);
            OrderSend(Symbol(), OP_SELL, 0.1, currentPrice, 10, sellOrderTakeProfit3, 0, 'Sell Signal 3', MagicNumber, 0, Red);
            OrderSend(Symbol(), OP_SELL, 0.06, currentPrice, 10, sellOrderTakeProfit4, 0, 'Sell Signal 4', MagicNumber, 0, Red);
            
            isSellOrderTriggered = true;
        }
    }
    
    double totalProfit = CalculateTotalProfit();
    
    if (totalProfit >= TakeProfitAmount)
    {
        CloseAllOrders();
        DeleteAllPendingOrders();
        Sleep(60000); // 1分钟延迟
        
        isBuyOrderTriggered = false;
        isSellOrderTriggered = false;
    }
}

bool IsOpenOrders()
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
        {
            if (OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
                return true;
            }
        }
    }
    
    return false;
}

int GetFirstBuyOrder()
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
        {
            if (OrderType() == OP_BUY)
            {
                return i;
            }
        }
    }
    
    return -1;
}

int GetFirstSellOrder()
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
        {
            if (OrderType() == OP_SELL)
            {
                return i;
            }
        }
    }
    
    return -1;
}

double OrderOpenPrice(int ticket)
{
    if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
    {
        return OrderOpenPrice();
    }
    
    return 0.0;
}

double CalculateTotalProfit()
{
    double totalProfit = 0.0;
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
        {
            totalProfit += OrderProfit();
        }
    }
    
    return totalProfit;
}

void CloseAllOrders()
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
        {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 10, Red);
        }
    }
}

void DeleteAllPendingOrders()
{
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderMagicNumber() == MagicNumber)
        {
            if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
            {
                OrderDelete(OrderTicket());
            }
        }
    }
}

This EA executes trades based on buy/sell signals and dynamically adjusts lot sizes. It closes all positions and deletes pending orders when the predefined profit target is reached. This EA is for educational purposes only. It is important to test thoroughly before implementing in live trading. Adapt the code to your specific needs and trading strategies.

MT4 Expert Advisor: Smart Trade Execution with Buy/Sell Signals and Stop Orders

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

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