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
Post a Comment