EA System Revolution 1.0
//+------------------------------------------------------------------+
//| EA Systems - Revolution 1.0.mq5 |
//| Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Trade\Trade.mqh>
CTrade trade;
input double lotsize;
input string TradeStartTime = "15:34";
input string TradeStopTime = "15:36";
input bool CloseTradesAtStopTime=false;
input double Target;
input double Stoploss;
input bool USE_TSL=false;
input double TSL_START;
input double TSL_STEP;
bool initial_orders=false;
bool EAActivated=false;
string check=NULL;
double buysl,sellsl,buytgt,selltgt,startval_buy,stepval_buy,startval_sell,stepval_sell;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function
//1) open trade without any condition
//2) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
double close;
void OnTick()
{
if(TimeCurrent()>StringToTime(TradeStartTime) && TimeCurrent()<StringToTime(TradeStopTime))
{
EAActivated = true;
}
else
{
EAActivated = false;
}
if(EAActivated == true)
{
check="Trading enabled";
}
if(EAActivated == false)
{
check="Trading Disabled";
}
if(CloseTradesAtStopTime==true &&TimeCurrent()>StringToTime(TradeStopTime))
{
close_sell_position();
close_buy_position();
}
Comment(check);
close=iClose(Symbol(),PERIOD_CURRENT,0);
if(initial_orders==false &&EAActivated == true)
{
initial_orders=true;
if(Target>0)
{
buytgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+Target;
buytgt=NormalizeDouble(buytgt,_Digits);
selltgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-Target;
selltgt=NormalizeDouble(selltgt,_Digits);
}
if(Stoploss>0)
{
buysl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)-Stoploss;
buysl=NormalizeDouble(buysl,_Digits);
sellsl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)+Stoploss;
sellsl=NormalizeDouble(sellsl,_Digits);
}
if(TSL_START>0&&USE_TSL==true)
{
startval_buy=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+TSL_START;
stepval_buy=buysl+TSL_STEP;
startval_sell=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-TSL_START;
stepval_sell=sellsl-TSL_STEP;
}
trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),buysl,buytgt,"Ea System Revolution");
trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),sellsl,selltgt,"Ea System Revolution");
}
if(initial_orders==true &&EAActivated == true)
{
if(check_open_position()==0)
{
if(Target>0)
{
buytgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+Target;
buytgt=NormalizeDouble(buytgt,_Digits);
selltgt=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-Target;
selltgt=NormalizeDouble(selltgt,_Digits);
}
if(Stoploss>0)
{
buysl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)-Stoploss;
buysl=NormalizeDouble(buysl,_Digits);
sellsl=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)+Stoploss;
sellsl=NormalizeDouble(sellsl,_Digits);
}
trade.Buy(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits),buysl,buytgt,"Ea System Revolution");
trade.Sell(lotsize,Symbol(),NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits),sellsl,selltgt,"Ea System Revolution");
if(TSL_START>0&&USE_TSL==true)
{
startval_buy=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+TSL_START;
stepval_buy=buysl+TSL_STEP;
startval_sell=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-TSL_START;
stepval_sell=sellsl-TSL_STEP;
}
}
if(close<=startval_sell&&startval_sell>0&&USE_TSL==true)
{
startval_sell=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)-TSL_START;
selltsl(stepval_sell);
sellsl=stepval_sell;
stepval_sell=sellsl-TSL_STEP;
}
if(close>=startval_buy&&startval_buy>0&&USE_TSL==true)
{
startval_buy=NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)+TSL_START;
buytsl(stepval_buy);
buysl=stepval_buy;
stepval_buy=buysl+TSL_STEP;
}
}
Comment("check_open_position: "+check_open_position());
}
//+------------------------------------------------------------------+
// exit sell alll position function
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void buytsl(double NEWSL)
{
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)
{
ulong ticket=PositionGetTicket(i);
double tp=PositionGetDouble(POSITION_TP);
trade.PositionModify(ticket,NEWSL,tp);
}
}
}
void selltsl(double NEWSL)
{
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)
{
ulong ticket=PositionGetTicket(i);
double tp=PositionGetDouble(POSITION_TP);
trade.PositionModify(ticket,NEWSL,tp);
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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);
}
}
}
int check_open_position()
{
int numberofSELLposition=0;
for(int i = PositionsTotal()-1;i>=0;i--)
{
string currencypair=PositionGetSymbol(i);
int position_direction=PositionGetInteger(POSITION_TYPE);
if(Symbol()==currencypair)
{
numberofSELLposition=numberofSELLposition+1;
}
}
return numberofSELLposition;
}
//+------------------------------------------------------------------+
Comments
Post a Comment