HELP with EA

sannahj

Trader
May 16, 2023
1
0
6
25
I need help with an ea i have developed can you help me to run on mt5

####

Code:
import MetaTrader5 as mt5
from datetime import datetime, time, timedelta

# connect to MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()
    exit()

# set up the trade parameters
symbol = "GBPJPY"
lot_size = 1
stop_loss_pips = 20

# switch to the daily timeframe
if not mt5.symbol_select(symbol, True):
    print("symbol_select({}) failed, error code={}".format(symbol, mt5.last_error()))
    mt5.shutdown()
    quit()

# get the previous daily candle and its high and low levels
prev_daily_candle = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_D1, 1, 2)[1]
daily_high = prev_daily_candle['high']
daily_low = prev_daily_candle['low']

# switch back to the 15-minute timeframe
if not mt5.symbol_select(symbol, False):
    print("symbol_select({}) failed, error code={}".format(symbol, mt5.last_error()))
    mt5.shutdown()
    quit()

# set up the time range for the program to run (between 23pm and 9pm GMT)
start_time = time(hour=23)
end_time = time(hour=21)
current_time = datetime.utcnow().time()
if current_time < start_time or current_time >= end_time:
    print("The program is only allowed to run between 11pm and 9pm GMT")
    mt5.shutdown()
    quit()

 #wait for the engulfing candle and pin bar retest
while True:
    # check if the daily low has been engulfed
    last_15min_candle = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M15, 1, 1)[0]
    if last_15min_candle['low'] > daily_low and last_15min_candle['close'] > daily_low:
        # check if the engulfing candle body is above the daily high
        if last_15min_candle['close'] > last_15min_candle['open']:
            # wait for the pin bar retest
            while True:
                # check if it is past 9pm GMT
                current_time = datetime.utcnow().time()
                if current_time >= end_time:
                    print("It's past 9pm GMT. Stopping the program...")
                    mt5.shutdown()
                    quit()
               # wait for the engulfing candle and pin bar retest
while True:
    # check if the previous daily low has been engulfed
    last_15min_candle = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M15, 1, 1)[0]
    if last_15min_candle['low'] < daily_low and last_15min_candle['close'] < daily_low:
        # check if the engulfing candle body is below the daily low
        if last_15min_candle['close'] < last_15min_candle['open']:
            # wait for the pin bar retest
            while True:
                # check if it is past 9pm GMT
                current_time = datetime.utcnow().time()
                if current_time >= end_time:
                    print("It's past 9pm GMT. Stopping the program...")
                    mt5.shutdown()
                    quit()
                # check if the price has retraced to the daily low level
                current_price = mt5.symbol_info_tick(symbol).bid
                if current_price >= daily_low:
                    # check if the current candle is a pin bar
                    last_15min_candles = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M15, 1, 2)
                    pin_bar = False
                    if last_15min_candles[0]['open'] > last_15min_candles[0]['close'] and \
                            last_15min_candles[0]['close'] >= last_15min_candles[0]['high'] - \
                            (last_15min_candles[0]['high'] - last_15min_candles[0]['low']) * 0.3:
                        pin_bar = True
                    if pin_bar and last_15min_candles[1]['low'] > daily_low and \
                            last_15min_candles[0]['low'] <= daily_low - mt5.symbol_info(symbol).point * stop_loss_pips:
                        # place the sell order with stop loss
                        sell_request = {
                            "action": mt5.TRADE_ACTION_DEAL,
                            "symbol": symbol,
                            "volume": lot_size,
                            "type": mt5.ORDER_TYPE_SELL,
                            "price": current_price,
                            "sl": last_15min_candles[0]['high'] + mt5.symbol_info(symbol).point * stop_loss_pips,
                            "magic": 123456,
                            "comment": "Python trade",
                            "type_time": mt5.ORDER_TIME_GTC,
                            "type_filling": mt5.ORDER_FILLING_IOC
                        }
                        result = mt5.order_send(sell_request)
                        if result.retcode != mt5.TRADE_RETCODE_DONE:
                            print("Order failed with retcode={}".format(result.retcode))
                        else:
                            print("Order placed with position #{}".format(result.order))
                        break

mt5.sleep(5000)  # wait 5 seconds before checking again