Is this a Bug ????!!!

 

Can anyone reproduce this? Condition = buy with black candle. This does not work with the second symbol. WHY? Test viewed in visual mode.

That drives me crazy!

Files:
 

Use code:

//+------------------------------------------------------------------+
//|                                           Multysymboltest_99.mq5 |
//|                                  Copyright 2021,MetaQuotes Ltd. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021,MetaQuotes Ltd."
#property link      ""
#property version   "1.00"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol;                     // symbol info object
//--- input parameters
input string   InpSymbol_1 = "EURUSD";       // Symbol #1
input string   InpSymbol_2 = "USDJPY";       // Symbol #2
input ulong    InpMagic    = 24444;          // Magic number
//---
datetime       m_prev_bars_symbol_1 = 0;     // "0" -> D'1970.01.01 00:00';
datetime       m_prev_bars_symbol_2 = 0;     // "0" -> D'1970.01.01 00:00';
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   m_prev_bars_symbol_1 = 0;              // "0" -> D'1970.01.01 00:00';
   m_prev_bars_symbol_2 = 0;     // "0" -> D'1970.01.01 00:00';
   m_trade.SetExpertMagicNumber(InpMagic);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int total_symbol_1=0;
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
     {
      if(m_position.SelectByIndex(i))
        {
         ulong MyPositionTicket=PositionGetTicket(i);
         string MyCurrentPositionSymbol=PositionGetSymbol(i);
         // selects the position by index for further access to its properties
         if(MyCurrentPositionSymbol==InpSymbol_1 && m_position.Magic()==InpMagic)
           {
            if(!PositionSelect(InpSymbol_1))
               continue;
            total_symbol_1++;
           }
        }
     }
   int total_symbol_2=0;
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
     {
      if(m_position.SelectByIndex(i))
        {
         ulong MyPositionTicket=PositionGetTicket(i);
         string MyCurrentPositionSymbol=PositionGetSymbol(i);
         // selects the position by index for further access to its properties
         if(MyCurrentPositionSymbol==InpSymbol_2 && m_position.Magic()==InpMagic)
           {
            if(!PositionSelect(InpSymbol_2))
               continue;
            total_symbol_2++;
           }
        }
     }
//--- Symbol #1
   if(NewBar(InpSymbol_1,m_prev_bars_symbol_1))
     {
      MqlTick tick_symbol_1;
      if(SymbolInfoTick(InpSymbol_1,tick_symbol_1))
        {
         ResetLastError();
         double point_symbol_1=SymbolInfoDouble(InpSymbol_1,SYMBOL_POINT);
         if(GetLastError()==0)
           {
            MqlRates rates_symbol_1[];
            ArraySetAsSeries(rates_symbol_1,true);
            int start_pos=0,count=4;
            if(CopyRates(InpSymbol_1,PERIOD_CURRENT,start_pos,count,rates_symbol_1)!=count)
               return;
            //--- Enter Long InpSymbol_1
            if(total_symbol_1==0 && rates_symbol_1[1].close < rates_symbol_1[1].open)
              {
               if(!m_trade.Buy(0.10,InpSymbol_1,tick_symbol_1.ask,tick_symbol_1.ask-400*point_symbol_1,tick_symbol_1.ask+400*point_symbol_1,"EnterLong_Symbol1"))
                  m_prev_bars_symbol_1=0;
              }
           }
        }
     }
//--- Symbol #2
   if(NewBar(InpSymbol_2,m_prev_bars_symbol_2))
     {
      MqlTick tick_symbol_2;
      if(SymbolInfoTick(InpSymbol_2,tick_symbol_2))
        {
         ResetLastError();
         double point_symbol_2=SymbolInfoDouble(InpSymbol_2,SYMBOL_POINT);
         if(GetLastError()==0)
           {
            MqlRates rates_symbol_2[];
            ArraySetAsSeries(rates_symbol_2,true);
            int start_pos=0,count=4;
            if(CopyRates(InpSymbol_2,PERIOD_CURRENT,start_pos,count,rates_symbol_2)!=count)
               return;
            //--- Enter Long InpSymbol_2
            if(total_symbol_2==0 && rates_symbol_2[1].close < rates_symbol_2[1].open)
              {
               if(!m_trade.Buy(0.10,InpSymbol_2,tick_symbol_2.ask,tick_symbol_2.ask-400*point_symbol_2,tick_symbol_2.ask+400*point_symbol_2,"EnterLong_Symbol2"))
                  m_prev_bars_symbol_2=0;
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| New Bar                                                          |
//+------------------------------------------------------------------+
bool NewBar(const string symbol,datetime prev_bars)
  {
   datetime time_0=iTime(symbol,Period(),0);
   if(time_0!=prev_bars)
     {
      prev_bars=time_0;
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
Files:
 
@Vladimir Karputov  Very Interesting! Thank YOU ! 
Vladimir Karputov
Vladimir Karputov
  • 2021.08.06
  • www.mql5.com
Trader's profile