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:
![MQL5 - Language of trade strategies built-in the MetaTrader 5 client terminal](https://c.mql5.com/i/registerlandings/logo-2.png)
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
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!