MT5 FX Algo (26 Nov 2023)

 //+------------------------------------------------------------------+

//|                                                  MT5 FX ALGO.mq5 |

//|                                  Copyright 2023, MetaQuotes Ltd. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#include <Trade\Trade.mqh>

CTrade trade;

#property copyright "Copyright 2023, MetaQuotes Ltd."

#property link      "https://www.mql5.com"

#property version   "1.00"

input double lotsize=0.01;

input string INFO1="Moving Average settings";


input int MA_Period=50;

input ENUM_MA_METHOD Ma_Type=0;

datetime entry=0,Ask;

int ma;double MA_BUFF[],PriceInfo[],high1,low1,close1,Bid,close0;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

//---

   

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

    ma= iMA(Symbol(),PERIOD_CURRENT,MA_Period,0,Ma_Type,PRICE_CLOSE);

    ArraySetAsSeries(MA_BUFF,true);

    CopyBuffer(ma,0,0,3,MA_BUFF);

    

    high1=iHigh(Symbol(),PERIOD_CURRENT,1); 

    low1=iLow(Symbol(),PERIOD_CURRENT,1);

    close1=iClose(Symbol(),PERIOD_CURRENT,1);

    close0=iClose(Symbol(),PERIOD_CURRENT,0);

    

    if (close1<MA_BUFF[1] && high1<MA_BUFF[1] && close0>high1 && entry!=iTime(Symbol(),PERIOD_CURRENT,0))

    {

    entry=iTime(Symbol(),PERIOD_CURRENT,0);

    Alert("BUY @ "+Symbol());

    low1=NormalizeDouble(low1,_Digits);

    Ask=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits);

    

    close_sell_position();

    close_buy_position();

    

    Sleep(200);

    trade.Buy(lotsize,NULL,Ask,low1,0,"MT5 FX ALGO BUY TRADE");  

    }


    if (close1>MA_BUFF[1] && low1>MA_BUFF[1]&& close0<low1  && entry!=iTime(Symbol(),PERIOD_CURRENT,0))

    {

    entry=iTime(Symbol(),PERIOD_CURRENT,0);

    Alert("SELL @ "+Symbol());

    high1=NormalizeDouble(high1,_Digits);

    Bid=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits);

    

    close_buy_position();

    close_sell_position();

    

    Sleep(200);

    trade.Sell(lotsize,NULL,Bid,high1,0,"MT5 FX ALGO SELL TRADE");

    }

  }

//+------------------------------------------------------------------+



void close_sell_position()

{




for (int i=PositionsTotal()-1;i>=0;i--)

{

  

  string currencypair=PositionGetSymbol(i);

  int position_direction=PositionGetInteger(POSITION_TYPE);

  

  if(currencypair==Symbol() && position_direction == POSITION_TYPE_SELL)

  {

  int ticket=PositionGetTicket(i);

  trade.PositionClose(ticket);

  

  }



}


}





void close_buy_position()

{





for (int i=PositionsTotal()-1;i>=0;i--)

{

  

  string currencypair=PositionGetSymbol(i);

  int position_direction=PositionGetInteger(POSITION_TYPE);

  

  if(currencypair==Symbol() && position_direction == POSITION_TYPE_BUY)

  {

  int ticket=PositionGetTicket(i);

  trade.PositionClose(ticket);

  

  }



}


}




void buydraw()

           { 

           

               ObjectCreate(Symbol(),"BUYSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0),OBJ_ARROW_BUY,0,TimeCurrent(),low1);

              

             

               

           }

           

           

                     

void selldraw()

           { 

           

           

            ObjectCreate(Symbol(),"SELLSIGNAL"+iTime(Symbol(),PERIOD_CURRENT,0),OBJ_ARROW_SELL,0,TimeCurrent(),high1);

            

           

            }


Comments

Popular posts from this blog

MQL5 : Add time to current time in mins

MQL5: Closed order detail