как использовать нужный класс?

 

Ситуация такая: 
Есть два класса 

#include "MyTrade5 Symbols Market.mqh"
#include "MyTrade5 Symbols Limit 1.mqh"

оба класса имеют метод SetTrade типа:

SetTrade(sym + postfix,  22, 1, 0, Mag + i);

который вызывается в OnInit. В OnTimer() отрабатывает другой метод но с уже сохраненными данными которые вызывались в OnInit. 

Хочу сделать селектор выбора типа Как торговать: Маркет или лимитными ордерами. 

При этом уж создано много объектов в советнике. 

типа:

MyTradeLimit T[];

например для лимитных ордеров и объявлен этот массив на глобальном уровне. 

Как сделать типа 

if (Type == MARKET) 
{
   MytrdadeMarket T[];
}

if (Type == LIMIT) 
{
   MytrdadeLimit T[];
}

 перенести это в OnInit() и сделать через статик - не получается.
через #ifdef - тоже. 

Подозреваю что надо это как-то сделать через один общий класс, но как это оформить не знаю. 
Какие варианты ? 

При этом не хотелось бы делать 2 массива объектов.


 
Dmitiry Ananiev:

Ситуация такая: 
Есть два класса 

оба класса имеют метод SetTrade типа:

который вызывается в OnInit. В OnTimer() отрабатывает другой метод но с уже сохраненными данными которые вызывались в OnInit. 

Хочу сделать селектор выбора типа Как торговать: Маркет или лимитными ордерами. 

При этом уж создано много объектов в советнике. 

типа:

например для лимитных ордеров и объявлен этот массив на глобальном уровне. 

Как сделать типа 

 перенести это в OnInit() и сделать через статик - не получается.
через #ifdef - тоже. 

Подозреваю что надо это как-то сделать через один общий класс, но как это оформить не знаю. 
Какие варианты ? 

При этом не хотелось бы делать 2 массива объектов.


Сделать абстрактный класс, который будет являться предком обоих этих классов.
Объявить переменную-ссылку на тот абстрактный класс, через которую и будет последующее обращение к методам.
В OnInit проинициализировать ту переменную ссылкой на конкретный объект класса-потомка.

 
class TradeBase
{
protected:
  string Settings;
    
public:
  TradeBase( const string sSettings ): Settings(sSettings)
  {
  }

  virtual void Trade( void ) {}
};

class TradeMarket : public TradeBase
{
public:
  TradeMarket( const string sSettings ) : TradeBase(sSettings)
  {
  }
  
  virtual void Trade( void )
  {
    // Market logic.
    
    ::Print(__FUNCSIG__ + ", Settings: " + this.Settings);
  }
};

class TradeLimit : public TradeBase
{
public:
  TradeLimit( const string sSettings ) : TradeBase(sSettings)
  {
  }
  
  virtual void Trade( void )
  {
    // Limit logic.

    ::Print(__FUNCSIG__ + ", Settings: " + this.Settings);
  }
};

input bool inMarket = false; // Market/Limit
input string inSettings = "Example"; // Settings

TradeBase* System = NULL;

void OnInit()
{
  if (inMarket)
    System = new TradeMarket(inSettings);
  else
    System = new TradeLimit(inSettings);
}

void OnDeinit( const int )
{
  delete System;
}

void OnTick()
{
  System.Trade();
}
 
Вот уже и пример реализации подвезли! :)