EA based on market open time with a trailing stop and 3 TPs

MQL5 Эксперты

Работа завершена

Время выполнения 2 часа
Отзыв от заказчика
Very quick and helpful, made sure to understand all requirements fully and helped with modifications until I was happy. Would recommend.
Отзыв от исполнителя
Great customer! Hoping to work with you more in the future

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

Hello,

I am trying to develop an EA for the following simple strategy:

Symbol: US30 (Dow Jones Industrial Average)

Chart: 5m

Criteria:

1. At exactly 16:30:00 one buy stop and one sell stop order should be placed 70 points above and below the closing price of the 16:25 5-minute candle.

If the 16:25 candle has a body equal to or less than 50 points, the orders should be placed 100 points from the close of the 16:25 candle.

2. The risk for each order should be 1% of the account balance, I believe this can be achieved by using dynamic lot sizing, the lot sizes should be rounded to the nearest 0.1.

3. An initial stop loss of 150 points should be used. This becomes a trailing stop loss of 150 points as soon as possible, if it's possible to implement as soon as the position opens, that's perfect, this implementation is something I have struggled with hugely.

4. The three profit targets are: 1RR (150 points), 2RR (300 points) and 3RR (450 points). At each target, one third of the trade should be closed. This will mean that at 1RR 0.33% profit is made, at 2RR an extra 0.67% profit is made and at 3RR an extra 1% profit is made.

5. Once the first profit target is reached, the trailing stop loss should remain static at the entry price.

6. Any unopened orders should be cancelled when either of the following occurs:

A position closes at the third profit target.

5 minutes has passed.

Below I have included what I have been working on, although I am not a programmer. It is probably far too long and the trailing stop does not function, but it may give you some ideas, please feel free to reach out if you need any further clarity.

Many thanks,

steero89

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

// Declare and initialize trade objects
CPositionInfo  m_position;   // Trade position object
CTrade         m_trade;      // Trading object
CSymbolInfo    m_symbol;     // Symbol info object

// Declare trailing stop parameters
bool trailingStopLoss = true; // Enable trailing stop loss
input ushort   InpTrailingStop   = 1500;  // Trailing Stop (in points)
input ushort   InpTrailingStep   = 100;   // Trailing Step (in points)

// Define trailing stop and step variables
double ExtTrailingStop = 0.0;
double ExtTrailingStep = 0.0;

// Function to place pending order with appropriate take profit and stop loss
ulong PlacePendingOrder(int orderType, double price, bool isBuy)
{
    MqlTradeRequest request;
    ZeroMemory(request);
    request.action = TRADE_ACTION_PENDING; // Set action to place pending order
    request.type = (ENUM_ORDER_TYPE)orderType;
    request.symbol = Symbol();
    request.volume = 3.0; // Set volume as desired
    request.price = price; // Set order price
    if (isBuy)
    {
        request.tp = price + 4500 * _Point; // Set take profit above the entry price for buy orders
        request.sl = price - 1500 * _Point; // Set stop loss below the entry price for buy orders
    }
    else
    {
        request.tp = price - 4500 * _Point; // Set take profit below the entry price for sell orders
        request.sl = price + 1500 * _Point; // Set stop loss above the entry price for sell orders
    }
    request.type_filling = ORDER_FILLING_RETURN;
    request.type_time = ORDER_TIME_GTC;

    MqlTradeResult result;
    ulong ticket = OrderSend(request, result);

    return ticket;
}

// Function to modify position
bool PositionModify(double stopLoss, double takeProfit)
{
    if (!PositionSelect("")) // Select the first position
    {
        Print("No positions found. Exiting PositionModify function.");
        return false;
    }

    ulong ticket = PositionGetInteger(POSITION_TICKET);

    MqlTradeRequest request;
    MqlTradeResult result;
    ZeroMemory(request);
    request.action = TRADE_ACTION_SLTP; // Modify stop loss and take profit
    request.symbol = Symbol();
    request.sl = stopLoss; // New stop loss
    request.tp = takeProfit; // New take profit

    if (OrderSend(request, result))
    {
        Print("Position ", ticket, " modified successfully. New SL: ", stopLoss, ", New TP: ", takeProfit);
        return true;
    }
    else
    {
        Print("Failed to modify position ", ticket, ". Error code: ", GetLastError());
        return false;
    }
}

void OnInit()
{
    // Calculate trailing stop and step in points
    ExtTrailingStop = InpTrailingStop * _Point;
    ExtTrailingStep = InpTrailingStep * _Point;
}

void OnTick()
{
    // Get the current server time
    datetime currentTime = TimeTradeServer();
    // Declare an instance of the MqlDateTime structure
    MqlDateTime mqlTime;
    // Convert the datetime value to MqlDateTime structure
    TimeToStruct(currentTime, mqlTime);
    // Extract the current hour, minute, and second
    int currentHour = mqlTime.hour;
    int currentMinute = mqlTime.min;
    int currentSecond = mqlTime.sec;

    // Check if it's after 16:30:00
    if (currentHour == 16 && currentMinute >= 
30  && currentSecond >= 00)
    {
        // Apply trailing stop to open positions
        Trailing();
    }

    // Check if it's exactly 10:45:00 and the trade execution time has not been reached yet
    if (currentHour == 16 && currentMinute == 
30  && currentSecond == 00)
    {
        // Place pending orders
        PlacePendingOrders();
    }
}

// Function to place pending orders
void PlacePendingOrders()
{
    // Calculate buy and sell stop prices based on the closing price of the 16:25 candle
    double closePrice = iClose(Symbol(), PERIOD_M5, 1); // Use index 1 to get the 16:25 candle
    double buyStopPrice = closePrice + 700 * _Point;
    double sellStopPrice = closePrice - 700 * _Point;

    // Place buy stop order without setting initial stop loss
    ulong buyStopTicket = PlacePendingOrder(ORDER_TYPE_BUY_STOP, buyStopPrice, true); // Pass true for isBuy for buy stop order
    if (buyStopTicket == 0)
    {
        Print("Failed to place buy stop order. Error code: ", GetLastError());
        return;
    }

    // Place sell stop order without setting initial stop loss
    ulong sellStopTicket = PlacePendingOrder(ORDER_TYPE_SELL_STOP, sellStopPrice, false); // Pass false for isBuy for sell stop order
    if (sellStopTicket == 0)
    {
        Print("Failed to place sell stop order. Error code: ", GetLastError());
        return;
    }

    Print("Buy stop order placed successfully. Ticket: ", buyStopTicket);
    Print("Sell stop order placed successfully. Ticket: ", sellStopTicket);
}

void Trailing()
{
    if (!trailingStopLoss)
    {
        Print("Trailing stop is disabled. Exiting Trailing function.");
        return;
    }

    // Get the current trailing stop value
    double currentTrailingStop = ExtTrailingStop / _Point;

    if (currentTrailingStop == 0)
    {
        Print("Trailing stop is not initialized. Exiting Trailing function.");
        return;
    }

    for (int i = PositionsTotal() - 1; i >= 0; i--) // Loop through open positions
    {
        if (m_position.SelectByIndex(i))
        {
            if (m_position.Symbol() == m_symbol.Name())
            {
            // Check if position is profitable before applying trailing stop
            double positionProfitPoints = m_position.Profit() / _Point;
            if (positionProfitPoints > 5) // Modify this threshold as needed
                {
                    double currentPrice = m_position.PositionType() == POSITION_TYPE_BUY ? SymbolInfoDouble(_Symbol, SYMBOL_BID) : SymbolInfoDouble(_Symbol, SYMBOL_ASK);
                    double newStopLoss = m_position.PositionType() == POSITION_TYPE_BUY ? currentPrice - currentTrailingStop : currentPrice + currentTrailingStop;

                    if (PositionModify(newStopLoss, m_position.TakeProfit()))
                    {
                        Print("Trailing stop modified for position ", m_position.Ticket(), ". New SL: ", newStopLoss);
                    }
                    else
                    {
                        Print("Failed to modify trailing stop for position ", m_position.Ticket(), ". Error code: ", GetLastError());
                    }
                }
                else
                {
                    Print("Position ", m_position.Ticket(), " is not yet profitable. Trailing stop will not be applied.");
                }
            }
        }
    }
}



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

1
Разработчик 1
Оценка
(169)
Проекты
193
32%
Арбитраж
6
50% / 50%
Просрочено
2
1%
Загружен
2
Разработчик 2
Оценка
(177)
Проекты
251
21%
Арбитраж
18
61% / 17%
Просрочено
1
0%
Занят
3
Разработчик 3
Оценка
Проекты
0
0%
Арбитраж
0
Просрочено
0
Свободен
4
Разработчик 4
Оценка
(403)
Проекты
709
49%
Арбитраж
57
16% / 49%
Просрочено
131
18%
Работает
5
Разработчик 5
Оценка
(161)
Проекты
192
26%
Арбитраж
8
25% / 38%
Просрочено
5
3%
Загружен
6
Разработчик 6
Оценка
(59)
Проекты
78
26%
Арбитраж
9
33% / 56%
Просрочено
8
10%
Работает
7
Разработчик 7
Оценка
(38)
Проекты
40
25%
Арбитраж
23
13% / 74%
Просрочено
8
20%
Работает
Похожие заказы
I need an EA that opens trades according to the crossover of Moving Averages. The EA is based on two Moving Averages MA1 and MA2: For every new candle the EA attempts to open a new position, according to the MA crossover direction: If MA1>MA2, open a BUY position If MA1<MA2, open a SELL position There is a limit for current open trades which is also set in the settings. If the number of open trades reaches that
Job Title: Experienced MT5 Developer Needed to Update MT5 EA PLEASE READ THE ENTIRE JOB DESCRIPTION BEFORE APPLYING Qualifications Required: * Minimum of 5 years of experience in coding Expert Advisors * Experience with at least 150 completed EA projects (must be visible on your profile) * Must have knowledge of both forex trading and coding, as these are different skills * Fluent in English (no translators) * Must
I have a fully coded TradingView indicator that I need updated to function as a strategy. This should include the ability to backtest the strategy using the TradingView strategy tester. The main task is to convert the existing indicator into a strategy format while maintaining its core functionality, but adapting it for automated trading logic and performance analysis. Please ensure that the strategy uses proper
I'm looking for professional developer for long term. Who have skill in Converting trading to MT4/5. Also have good knowledge of Algo. And response and deliver tools on time and at the top need good communication. That's all we need
budget of 500 usd I want to create a rsi bot for eur usd money is the least important thing I want it to look good if you are going to apply do it but send me at least 3 photos or screenshots of this type of work with rsi bot my goal level 50 sell level 20 buy that's all it must have its basic robot functions
I have simple EA i want to modify its parameters. If you are good at modifying EAs contact me for more details. I will issue the source code then you return after finishing without changing the buy or sell conditions
the code wasn't mine, i have got it somewhere on the web, but i like the performance of the EA, so i want to use it on mt5 platform. the given code based on price movements with ladder entry concept
* Advanced level dev only, NDA required * Hi, I have a multi timeframe, multiindicator expert that requires additional features added to it. First started development 5 years ago. Upgrading with new features. To be added Entry - Add Stochastic and CCI options for trade entry to be added to existing signal options. Add config options to existing menu Bulk Exit - Master switch for close all trades based on basket
I am developing a master EA that integrates several sub-EAs. The project is complex, and the documentation is thoroughly structured, spanning 50 pages with detailed step-by-step procedures. 1st sub-EA: This EA opens trades without using indicators. Instead, it opens a new trade based on the color or status of the last candle. For instance, if the last candle was green, a new buy trade is opened. 2nd sub-EA: This EA
Good Day I would like to order a trading robot. Pairs: XAUUSD (GOLD) EUR/USD USD/JPY The robot should be trading daily with TP/SL build in, would like to have trailing and stop loss, should execute up to 5 trades (preffarable setting choice) up to 10 trades Los sizes to be choise setting, must also trade major US vews events Like:US- PPI, CPI, NFP, Sales m/m and so on Must also show/display alert when opening

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

Бюджет
30 - 80 USD
VAT (21%): 6.3 - 16.8 USD
Итого: 36.3 - 96.8 USD
Исполнителю
27 - 72 USD
Сроки выполнения
от 2 до 6 дн.