//+------------------------------------------------------------------+ //| EMA_RSI_Stochastic.mq5 | //| Copyright 2019, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ #include CTrade trade; int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---, } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_BID),_Digits); double stoplosspips = 50; //AccountPercentStopPips(_Symbol, 3, 00.1); double point = _Point; double stoploss = Bid - (stoplosspips * point); double takeprofit = Bid + (stoplosspips * point); trade.Buy(0.01, _Symbol, Bid, stoploss, takeprofit, NULL); } double AccountPercentStopPips(string symbol, double percent, double lots) { double balance = AccountInfoDouble(ACCOUNT_BALANCE); double moneyrisk = balance * percent / 100; int spread = SymbolInfoInteger(symbol, SYMBOL_SPREAD); double point = SymbolInfoDouble(symbol, SYMBOL_POINT); double ticksize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE); double tickvalue = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE); double tickvaluefix = tickvalue * point / ticksize; // A fix for an extremely rare occasion when a change in ticksize leads to a change in tickvalue double stoploss = moneyrisk / (lots * tickvaluefix ) - spread; if (stoploss < SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)){ stoploss = SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL); // This may rise the risk over the requested } stoploss = NormalizeDouble(stoploss, 0); return (stoploss); } //+------------------------------------------------------------------+