Помогите разобраться.

 

всем привет, пишу DLL на С++ для МТ4. 

ДЛЛ работает со всеми ТФ одновременно, и сразу с несколькими символами.

к томуже анализ ведется не только валютных пар, но и сфд и фьючерсов..

 

следовательно необходима структура классов. примерно такая:

/*При создании класса mkt, вносятся переменные t1, t2 и ma.
эти переменные глобальные и понадобятся для дальнейших вычислений*/
class mkt          
{
public:
        char t1, t2;
        short ma;
        mkt()
        {
        }
        ~mkt(){}
};
/* Класс sym, создается на основании наличия символов в МКЛ индикаторе: в нем определяется общее 
количество исследуемых символов и передается количественное значение - 
сколько экземпляров класса sym необходимо создать*/
class sym :
        public mkt
{
public:
        char   _Digits;
        double _PriceTick;
        sym(){}
        ~sym(){}
};
/* Класс tf, должен создаваться АВТОМАТИЧЕСКИ при создании КАЖДОГО экземпляра класса sym. 
Для каждого экземпляра класса sym необходимо создать 9 экземпляров класса tf - 
в каждый из экземпляров этого класса будет импортирована история с определенного таймфрейма*/
class tf :
        public sym
{
public:
        double _TimeFrameData[1][6];
        tf(){}
        ~tf(){}
};

 

как видно идет наследование из класса в класс.

в мкл индикаторе сначала определяю какие символы необходимы исследовать:  

extern string  symbols = "EURUSD;GBPUSD";
string         arrSym[1];
ushort         arrTf[9] = {1, 5, 15, 30, 60, 240, 1440, 10080, 43200};

 

потом при инициализации индикатора, инициализирую массив с символами:

//+------------------------------------------------------------------+
//| Инициализирую массив с символами инструментов                    |
//+------------------------------------------------------------------+
void InitArrSym()
{
//----
int nach = 0, kon = 0, lenghtstr = StringLen(symbols), i=0;
   while (i<lenghtstr)
   {
      kon = StringFind(symbols, ";", nach);     arrSym[cnt] = StringSubstr(symbols, nach, kon-nach); Print("     ",arrSym[cnt]);
      nach = kon+1;  i= kon+1;  cnt++; ArrayResize( arrSym, cnt+1) ;          
   }Print("                             ", cnt);
//----
}

 

 после чего получаю в двойном цикле по символам и таймфреймам данные баров.

   for (int i = 0; i < ArraySize(arrSym)-1; i++)
      {
         for (char y = 0; y<ArraySize(arrTf); y++)
            {
               ArrayResize(rates,1);
               ArrayCopyRates(rates,arrSym[i],arrTf[y]);
               // тут передача структуры rates в dll.
            }
      }

 

 собственно вопрос, как создать все это? 

все что написано здорово но не работает ))

при создании экземпляра класса sym необходимо автоматом создать 9 экземпляров класса tf

чтобы получить вот такой доступ в dll:

mkt[0].sym[0].tf[0]._TimeFrameData[0][4]...

но класс родитель ничего не знает о своем наследнике (( 

создавая класс mkt - под форекс, в него надо запихать экземпляры класса sym с форекса, создавая под cfd - туда надо внедрить соответствующие символы.

и для каждого символа автоматически создать по 9 экземпляров класса tf - для последующей передачи в них исторических данных..

 

буду премного благодарен за помощь! 

Причина обращения: