Need errors to be fixed on my mql5 language mt5 code

Техническое задание

heres the code (#include <Trade\Trade.mqh>  // Include the CTrade class
CTrade trade;  // Declare an instance of CTrade

// Symbols to trade
string SYMBOLS[] = {"XAUUSDm", "US30m", "GBPUSDm", "USTECm", "EURUSDm"};

// Parameters for 15-minute scalping and integrated strategy
double MIN_LOT_SIZE = 0.01;  // Minimum lot size for most brokers
double TRAILING_STOP_LOSS = 5;      // Trailing stop loss (points)
double RISK_PERCENTAGE = 0.5;        // Risk per trade in percentage (smaller for scalping)
int MA_PERIOD_M5 = 10;              // Moving average period for M15
int MA_PERIOD_D1 = 100;              // Moving average period for D1 (longer-term trend)
int ATR_PERIOD = 5;                  // ATR period for volatility filter
double MIN_ATR_THRESHOLD = 0.0002;   // Minimum ATR value for high volatility (tighter for scalping)
int trade_count = 0;                 // Counter to track the number of trades
datetime last_trade_time = 0;        // Track last trade time for session filtering

// Variables to store the last detected pattern and trend
struct TradeSetup {
    string trend;
    string pattern;
};
TradeSetup last_setup[ArraySize(SYMBOLS)]; // Array to store last setup for each symbol


// Function declarations
double calculate_lot_size(double risk_percentage, double stop_loss_distance);
void log_trade(string symbol, double entry_price, double exit_price, string type);
double adjust_stop_loss(double atr_value);
int execute_trade(string symbol, string type, double lot_size);

// Function to calculate lot size based on risk percentage and stop loss distance
double calculate_lot_size(double risk_percentage, double stop_loss_distance) {
    double account_balance = AccountInfoDouble(ACCOUNT_BALANCE);
    double risk_amount = account_balance * (3 / 100);
    double lot_size = risk_amount / stop_loss_distance;
    return NormalizeDouble(lot_size, 2); // Adjust to the broker's lot size precision
}

// Function to adjust stop loss based on ATR value
double adjust_stop_loss(double atr_value) {
    return atr_value * 1.5; // Adjust this multiplier as needed
}

// Function to log trade details
void log_trade( double entry_price, double exit_price, string type) {
    Print("Trade executed: ", symbol, " Entry: ", entry_price, " Exit: ", exit_price, " Type: ", type);
}

void IntegratedStrategy(double price, double support, double resistance, 
                        double demandZone, double supplyZone,
                        bool isBullishPattern, bool isBearishPattern,
                        bool isBreakout, bool isBreakdown,
                        bool isFalseBreakout, bool isReversal,
                        bool isUptrend, bool isDowntrend,
                        double volume, double rsi)

 //--- Pure Price Action: Reversal at Key Levels
        if (isReversal) {
            // Buying Reversal at Support or Demand Zone
            if (SymbolInfoDouble(symbol, SYMBOL_BID) <= support || SymbolInfoDouble(symbol, SYMBOL_BID) <= demandZone) {
                // Confirmations: Bullish candlestick pattern, volume increase, RSI not overbought
                if (bullishSignal == "bullish_engulfing" && volume > 0 && rsi < 70) {
                    request.action = TRADE_ACTION_DEAL;
                    request.symbol = symbol;
                    request.volume = LOT_SIZE; // You can adjust lot size here
                    request.type = ORDER_TYPE_BUY;
                    request.price = SymbolInfoDouble(symbol, SYMBOL_ASK);
                    request.sl = 3; // Define stop loss (modify as needed)
                    request.tp = 15; // Define take profit (modify as needed)
                    request.deviation = 3;
                    request.comment = "Buy Reversal at Support/Demand";
                    if (!execute_trade(request, result)) {
                    Print("Failed to place Buy order at Supoort/Demand.");
                }
            }

            // Selling Reversal at Resistance or Supply Zone
            if (SymbolInfoDouble(symbol, SYMBOL_BID) >= resistance || SymbolInfoDouble(symbol, SYMBOL_BID) >= supplyZone) {
                // Confirmations: Bearish candlestick pattern, volume increase, RSI overbought
                if (bearishSignal == "bearish_engulfing" && volume > 0 && rsi > 70) {
                    request.action = TRADE_ACTION_DEAL;
                    request.symbol = symbol;
                    request.volume = LOT_SIZE; // You can adjust lot size here
                    request.type = ORDER_TYPE_SELL;
                    request.price = SymbolInfoDouble(symbol, SYMBOL_BID);
                    request.sl = 3; // Define stop loss (modify as needed)
                    request.tp = 15; // Define take profit (modify as needed)
                    request.deviation = 3;
                    request.comment = "Sell Reversal at Resistance/Supply";
                    if (!execute_trade(request, result)) {
                    Print("Failed to place Sell order at Resistance/Supply.");
                }
            }
        }

        //--- Price Action: Breakout or Breakdown
        if (isBreakout && SymbolInfoDouble(symbol, SYMBOL_BID) > resistance) {
            // Buy on confirmed breakout with strong volume
            if (volume > 0 && rsi < 70) {
                request.action = TRADE_ACTION_DEAL;
                request.symbol = symbol;
                request.volume = LOT_SIZE; // You can adjust lot size here
                request.type = ORDER_TYPE_BUY;
                request.price = SymbolInfoDouble(symbol, SYMBOL_ASK);
                request.deviation = 3;
                request.comment = "Buy Breakout";
                if (!execute_trade(request, result)) {
                    Print("Failed to place Buy order at Breakout.");
            }
        }

        if (isBreakdown && SymbolInfoDouble(symbol, SYMBOL_BID) < support) {
            // Sell on confirmed breakdown with strong volume
            if (volume > 0 && rsi > 70) {
                request.action = TRADE_ACTION_DEAL;
                request.symbol = symbol;
                request.volume = LOT_SIZE; // You can adjust lot size here
                request.type = ORDER_TYPE_SELL;
                request.price = SymbolInfoDouble(symbol, SYMBOL_BID);
                request.deviation = 3;
                request.comment = "Sell Breakdown";
                if (!execute_trade(request, result)) {
                    Print("Failed to place Sell order at Breakdown.");
            }
        }

        //--- False Breakout: Sell After False Breakout at Resistance or Buy After False Breakout at Support
        if (isFalseBreakout) {
            if (SymbolInfoDouble(symbol, SYMBOL_BID) > resistance && bearishSignal == "bearish_engulfing" && volume > 0 && rsi > 70) {
                request.action = TRADE_ACTION_DEAL;
                request.symbol = symbol;
                request.volume = LOT_SIZE; // You can adjust lot size here
                request.type = ORDER_TYPE_SELL;
                request.price = SymbolInfoDouble(symbol, SYMBOL_BID);
                request.deviation = 3;
                request.comment = "Sell False Breakout at Resistance";
                if (!execute_trade(request, result)) {
                    Print("Failed to place Sell order at Resistance.");
            }

            if (SymbolInfoDouble(symbol, SYMBOL_BID) < support && bullishSignal == "bullish_engulfing" && volume > 0 && rsi < 30) {
                request.action = TRADE_ACTION_DEAL;
                request.symbol = symbol;
                request.volume = LOT_SIZE; // You can adjust lot size here
                request.type = ORDER_TYPE_BUY;
                request.price = SymbolInfoDouble(symbol, SYMBOL_ASK);
                request.deviation = 3;
                request.comment = "Buy False Breakout at Support";
                if (!execute_trade(request, result)) {
                    Print("Failed to place Buy order at Support.");
            }
        }

        //--- Trend Continuation: Buy in Uptrend at Demand Zone or Support, Sell in Downtrend at Supply Zone or Resistance
        if (isUptrend) {
            if (SymbolInfoDouble(symbol, SYMBOL_BID) <= demandZone || SymbolInfoDouble(symbol, SYMBOL_BID) <= support) {
                if (bullishSignal == "bullish_engulfing" && volume > 0 && rsi < 70) {
                    request.action = TRADE_ACTION_DEAL;
                    request.symbol = symbol;
                    request.volume = LOT_SIZE; // You can adjust lot size here
                    request.type = ORDER_TYPE_BUY;
                    request.price = SymbolInfoDouble(symbol, SYMBOL_ASK);
                    request.deviation = 3;
                    request.comment = "Buy in Uptrend at Demand/Support";
                    if (!execute_trade(request, result)) {
                    Print("Failed to place Buy order at Demand/Support.");
                }
            }
        }

        if (isDowntrend) {
            if (SymbolInfoDouble(symbol, SYMBOL_BID) >= supplyZone || SymbolInfoDouble(symbol, SYMBOL_BID) >= resistance) {
                if (bearishSignal == "bearish_engulfing" && volume > 0 && rsi > 70) {
                    request.action = TRADE_ACTION_DEAL;
                    request.symbol = symbol;
                    request.volume = LOT_SIZE; // You can adjust lot size here
                    request.type = ORDER_TYPE_SELL;
                    request.price = SymbolInfoDouble(symbol, SYMBOL_BID);
                    request.deviation = 3;
                    request.comment = "Sell in Downtrend at Supply/Resistance";
                    if (!execute_trade(request, result)) {
                    Print("Failed to place Sell order at Supply/Resistance.");
                }
            }
        }
    }
}

//--- Function to execute trade with error checking
bool execute_trade(MqlTradeRequest &request, MqlTradeResult &result) {
    if (!OrderSend(request, result)) {
        Print("OrderSend failed with error ", GetLastError());
        return false;
    }
    if (result.retcode != TRADE_RETCODE_DONE) {
        Print("OrderSend failed, return code: ", result.retcode);
        return false;
    }
    Print("Order placed successfully with ticket ", result.order);
    return true;
}

//--- Event handler
void OnTick() {
    strategy_execution(); // Execute strategy on every tick
}
 
// Trailing stop-loss function
void apply_trailing_stop(int ticket, double trail_distance) {
    double current_price = SymbolInfoDouble(Symbol(), SYMBOL_BID);
    double stop_loss = PositionGetDouble(POSITION_SL);

    if (PositionSelectByTicket(ticket) && current_price - trail_distance > stop_loss) {
        MqlTradeRequest request;
        MqlTradeResult result;
        ZeroMemory(request);
        request.action = TRADE_ACTION_SLTP;
        request.position = ticket;
        request.sl = current_price - trail_distance;

        if (!OrderSend(request, result)) {
            Print("Trailing stop modification failed with error ", GetLastError());
        } else if (result.retcode != TRADE_RETCODE_DONE) {
            Print("Trailing stop modification failed, return code: ", result.retcode);
        } else {
            Print("Trailing stop updated successfully for ticket ", ticket);
        }
    }
}

 
// Moving average calculation for trend detection
double calculate_moving_average(string symbol, int period, int timeframe)
{
   double ma[];
   if (CopyBuffer(iMA(symbol, PERIOD_M15, period, 0, MODE_SMA, PRICE_CLOSE), 0, 0, 1, ma) > 0)
      return ma[0];
   return 0;
}

// ATR calculation for volatility filter
double calculate_atr(string symbol, int timeframe, int period)
{
   double atr[];
   if (CopyBuffer(iATR(symbol, PERIOD_M15, period), 0, 0, 1, atr) > 0)
      return atr[0];
   return 0;
}

// Detect trend based on 15-minute and daily charts
string detect_trend(string symbol)
{
   // Calculate moving averages
   double ma_m15 = calculate_moving_average(symbol, MA_PERIOD_M15, PERIOD_M15);
   double ma_d1 = calculate_moving_average(symbol, MA_PERIOD_D1, PERIOD_D1);

   // Retrieve the current price
   double price = iClose(symbol, PERIOD_M15, 0);  // Using M15 period

   // Determine trend based on the price and moving averages
   if (price > ma_m15 && price > ma_d1)
      return "uptrend";
   else if (price < ma_m15 && price < ma_d1)
      return "downtrend";

   return "";  // No clear trend
}


        // Calculate ATR and stop loss distance
        double atr_value = calculate_atr(symbol, PERIOD_M15, atr_period);
        double stop_loss_distance = adjust_stop_loss(atr_value);
        double lot_size = calculate_lot_size(risk_percentage, stop_loss_distance);


// ATR Volatility filter for M15
bool is_volatile(string symbol)
{
   double atr_value = calculate_atr(symbol, PERIOD_M15, ATR_PERIOD);
   return (atr_value >= MIN_ATR_THRESHOLD);
}

// Candlestick pattern detection (e.g., engulfing pattern)
string detect_bullish_engulfing(double &open[], double &close[])
{
   if (close[1] < open[1] && close[0] > open[0] && close[0] > open[1] && open[0] < close[1])
      return "bullish_engulfing";
   return "";
}

string detect_bearish_engulfing(double &open[], double &close[])
{
   if (close[1] > open[1] && close[0] < open[0] && close[0] < open[1] && open[0] > close[1])
      return "bearish_engulfing";
   return "";
}

// Fetch data function
bool get_data(string symbol, int timeframe, int bars, double &high[], double &low[], double &close[], double &open[])
{
   MqlRates rates[];  // Declare an array of MqlRates structures

   // Use CopyRates to fetch the data
   int copied = CopyRates(symbol, PERIOD_M15, 0, bars, rates);

   // Check if rates were successfully copied
   if (copied <= 0)
   {
      Print("Failed to copy rates for ", symbol, " on timeframe ", timeframe);
      return false;
   }

   // Resize the arrays based on the number of bars copied
   ArrayResize(high, copied);
   ArrayResize(low, copied);
   ArrayResize(close, copied);
   ArrayResize(open, copied);

   // Ensure the array is accessed from newest to oldest
   ArraySetAsSeries(rates, true);

   // Copy data into the respective arrays
   for (int i = 0; i < copied; i++)
   {
      high[i] = rates[i].high;
      low[i] = rates[i].low;
      close[i] = rates[i].close;
      open[i] = rates[i].open;
   }

   // Return true if data was successfully copied
   return true;
}

int execute_trade(string symbol, string type, double lot_size) {
    MqlTradeRequest request;
    MqlTradeResult result;
    ZeroMemory(request);
    
    request.action = TRADE_ACTION_DEAL;
    request.symbol = symbol;
    request.volume = lot_size;
    request.type = (type == "buy") ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
    request.price = (type == "buy") ? SymbolInfoDouble(symbol, SYMBOL_ASK) : SymbolInfoDouble(symbol, SYMBOL_BID);
    request.deviation = 3; // Adjust deviation as needed
    request.comment = type + " trade executed";

    if(OrderSend(request, result)) {
        trade_count++; // Increment trade count on successful trade
        return result.handle; // Return the ticket number
    } else {
        Print("Error executing trade: ", GetLastError());
        return -1; // Return -1 on failure
    }
}

// Function to check if the current time is within trading session hours
bool is_trading_session() {
    datetime current_time = TimeCurrent();
    int hour = TimeHour(current_time);
    // Example: London session (9:00 - 17:00) and New York session (15:00 - 22:00)
    return (hour >= 9 && hour < 17) || (hour >= 15 && hour < 22);
}


// Main trading loop
void OnTick() {
    if(trade_count >= 4)  // Stop execution once trade limit is reached
    {
        Print("Trading halted after opening 4 trades.");
        return;
    }

    for(int i = 0; i < ArraySize(SYMBOLS); i++) {
        string symbol = SYMBOLS[i];
        double high[1000], low[1000], close[1000], open[1000];
        int bars = 1000;  // Number of bars to retrieve

        // Retrieve data, handling the case where it fails
        if (!get_data(symbol, PERIOD_M15, bars, high, low, close, open)) {
            Print("Failed to get data for ", symbol);
            continue;  // Skip to the next symbol if data retrieval fails
        }

        
        // Perform trend detection and get candlestick patterns
        string trend = detect_trend(symbol);
        string bullishSignal = detect_bullish_engulfing(open, close);
        string bearishSignal = detect_bearish_engulfing(open, close);

        // Check if there is volatility and if we're within the trading session
        if (!is_volatile(symbol) || !is_trading_session()) {
            Print("Skipping ", symbol, " due to low volatility or out of trading session.");
            continue;
        }

        // Check if the current setup matches the last one
        if (trend == "uptrend" && bullishSignal == "bullish_engulfing") {
            // If the setup is the same as the last one, skip the trade
            if (last_setup[i].trend == trend && last_setup[i].pattern == bullishSignal) {
                Print("Skipping trade for ", symbol, " as the setup is the same as the last trade.");
                continue;
            }

            // Execute a buy trade
            int ticket = execute_trade(symbol, "buy", MIN_LOT_SIZE);
            log_trade(symbol, SymbolInfoDouble(symbol, SYMBOL_ASK), "BUY");
            apply_trailing_stop(ticket, TRAILING_STOP_LOSS);

            // Update last setup
            last_setup[i].trend = trend;
            last_setup[i].pattern = bullishSignal;
        }
        
        else if (trend == "downtrend" && bearishSignal == "bearish_engulfing") {
            // If the setup is the same as the last one, skip the trade
            if (last_setup[i].trend == trend && last_setup[i].pattern == bearishSignal) {
                Print("Skipping trade for ", symbol, " as the setup is the same as the last trade.");
                continue;
            }

            // Execute a sell trade
            int ticket = execute_trade(symbol, "sell", MIN_LOT_SIZE);
            log_trade(symbol, SymbolInfoDouble(symbol, SYMBOL_BID), "SELL");
            apply_trailing_stop(ticket, TRAILING_STOP_LOSS);

            // Update last setup
            last_setup[i].trend = trend;
            last_setup[i].pattern = bearishSignal;
        }
    }
)

Откликнулись

1
Разработчик 1
Оценка
Проекты
0
0%
Арбитраж
0
Просрочено
0
Свободен
2
Разработчик 2
Оценка
(1)
Проекты
1
0%
Арбитраж
0
Просрочено
0
Работает
3
Разработчик 3
Оценка
(37)
Проекты
49
37%
Арбитраж
0
Просрочено
0
Свободен
4
Разработчик 4
Оценка
(15)
Проекты
19
37%
Арбитраж
2
0% / 100%
Просрочено
0
Свободен
5
Разработчик 5
Оценка
Проекты
1
0%
Арбитраж
0
Просрочено
0
Работает
6
Разработчик 6
Оценка
(498)
Проекты
569
33%
Арбитраж
29
41% / 41%
Просрочено
9
2%
Занят
7
Разработчик 7
Оценка
(4)
Проекты
6
0%
Арбитраж
2
0% / 0%
Просрочено
3
50%
Занят
Похожие заказы
Looking for an experienced developer to build a high-frequency trading (HFT) bot for cTrader. The bot should execute trades quickly and accurately in volatile markets. If you have expertise in cTrader API and creating HFT solutions, please reach out with your portfolio and experience
Experienced developer to write an EA applying 2 indicators and 3 conditions in a timely manner. Knowledge of the use of Stop Loss and Trailing stops is critical for this order
I'm seeking an expert in trading software development to create a custom indicator for Boom and Crash derivatives tailored around various trading strategies. This indicator should primarily focus on: - Price Action Trading - Trend Trading - Scalping - Breakout Trading - Range Trading - Retracement Trading - Reversal Trading - Gap Trading - Position Trading - Mean Reversion Trading - Swing Trading - Momentum Trading -
We're looking for multilingual support representatives with extensive experience in Forex trading, MT5, and MQL5 to provide support our customers on MT5, answer their inquiries, and help them with EA installation if needed. Languages: English fluency is a must in addition to one of the following languages: 1- Arabic 2- Spanish 3- Italian 4- Portuguese 5- French If you believe you're a good fit, please reach out and
I had an ea coded, to 'open a new position when the terminal floating equity is at certain negative levels', but it does not work very well. I am including it here, as some of the code may be useful. I will first explain how I currently trade for clarity. Its not too complicated :) 1. I open 2 positions at the same time. ( I call this a SET; I currently use an EA to open the positions, and it works pretty well ) 2
Hi, i'm looking for a MQL4 programmer to help me build an EA to be used in MetaTrader 4. The EA should: - open a position (buy/sell) when an indicator paints an arrow on the screen. The indicator is available on the market for free, I will send you the link - be customizable (Stop Loss/ Take Profit / Lot Size) - be active on selected timeframes ( e.g from 6 AM to 5 PM)
Expert Advisor (EA) Development Request for MetaTrader 4 (MT4) Dear [Developer's Name/Development Team], I hope this message finds you well. I am reac hing out to request the development of an Expert Advisor (EA) for the MetaTrader 4 (MT4) trading platform. I am seeking an EA that will automate my trading strategy, ensuring precise execution and optimizing performance in the market. Overview of the Project: I require
I want this to be a strategy that will automatically open and close positions on the forex market, mainly on currency pairs. The strategy is based on the engulfing candle formation and five EMAs 5,13,50,200,800. The strategy involves entering a position after meeting several key conditions: 1. the engulfing candle formation appears on the chart 2. the EMA5 must pass through the bodies of both candles of the engulfing
Hello, I want to create a script that prevents me from canceling an ATM strategy on an active trade? I scalp and sometimes cancel my Take Profit (TP) to let my trades run, as I prefer to trail my stop loss. However, this also cancels my stop. I know I can move the TP, but due to the speed of trading, I sometimes remove it automatically. An ATM lock on active trades so they can be modified but not removed. On NT8
Shabangu python 30 - 200 USD
Remember: this is the best robot in the world you must never think you are being scammed, but let's let it make you a lot of money and get rich so you can look like other traders

Информация о проекте

Бюджет
30+ USD
Сроки выполнения
от 1 до 2 дн.

Заказчик

Размещено заказов3
Количество арбитражей0