// Define input parameters input int numberOfPositions = 2; input int pendingOrderDistance = 110; input double riskPercentage = 0.3; input int takeProfit = 500; input int stopLoss = 500; input int trailingStop = 300; // Define variables int ticketNumber[]; bool orderTriggered[]; double entryPrice[]; double stopLossPrice[]; double takeProfitPrice[]; double trailingStopPrice[]; // Define OnTick() function void OnTick() { // Get current equity and calculate risk amount double equity = AccountInfoDouble(ACCOUNT_EQUITY); double riskAmount = equity * riskPercentage; // Check if there are any pending orders bool pendingOrdersExist = false; for (int i = 0; i < numberOfPositions; i++) { if (OrderGetTicket(ticketNumber[i]) > 0) { pendingOrdersExist = true; break; } } // If there are no pending orders, open new ones if (!pendingOrdersExist) { for (int i = 0; i < numberOfPositions; i++) { // Calculate position size based on risk amount double positionSize = riskAmount / stopLoss; // Determine order type and price ENUM_ORDER_TYPE orderType = ORDER_TYPE_BUY_STOP; double orderPrice = SymbolInfoDouble(_Symbol, SYMBOL_ASK) + pendingOrderDistance * _Point; if (i == 1) { orderType = ORDER_TYPE_SELL_STOP; orderPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID) - pendingOrderDistance * _Point; } // Open pending order ticketNumber[i] = OrderSend(_Symbol, orderType, positionSize, orderPrice, 0, 0, 0, "", 0, 0, CLR_NONE); if (ticketNumber[i] > 0) { orderTriggered[i] = false; entryPrice[i] = orderPrice; stopLossPrice[i] = orderType == ORDER_TYPE_BUY_STOP ? orderPrice - stopLoss * _Point : orderPrice + stopLoss * _Point; takeProfitPrice[i] = orderType == ORDER_TYPE_BUY_STOP ? orderPrice + takeProfit * _Point : orderPrice - takeProfit * _Point; trailingStopPrice[i] = 0; } } } // Check if pending orders have been triggered for (int i = 0; i < numberOfPositions; i++) { if (OrderGetTicket(ticketNumber[i]) > 0 && OrderGetInteger(ticketNumber[i], ORDER_STATE) == ORDER_STATE_TRIGGERED) { orderTriggered[i] = true; entryPrice[i] = OrderGetDouble(ticketNumber[i], ORDER_PRICE_OPEN); stopLossPrice[i] = OrderType() == ORDER_TYPE_BUY ? entryPrice[i] - stopLoss * _Point : entryPrice[i] + stopLoss * _Point; takeProfitPrice[i] = OrderType() == ORDER_TYPE_BUY ? entryPrice[i] + takeProfit * _Point : entryPrice[i] - takeProfit * _Point; trailingStopPrice[i] = entryPrice[i] + trailingStop * _Point; } } // Adjust trailing stops for (int i = 0; i < numberOfPositions; i++) { if (orderTriggered[i]) { if (OrderType() == ORDER_TYPE_BUY) { if (Bid > trailingStopPrice[i