Анализ свечей нескольких валютных пар

 

Здравствуйте, прошу помочь с кодом. Я хотел бы написать советник в котором можно было выполнить такой алгоритм:

1. Получить список нескольких валютных пар; 2. Выбирать валютную пару, и по этой валютной паре выбирать свечи;

Я могу делать по одной конкретной валютной паре, получать свечи по этой валютной паре а вот по нескольким даже не знаю как.

Прошу помочь, спасибо.

ЗЫ. Я видел на форуме где то ветку, с такой темой и примерами но потерял, найти не могу. Спасибо.

 
rabanik >>:

Здравствуйте, прошу помочь с кодом. Я хотел бы написать советник в котором можно было выполнить такой алгоритм:

1. Получить список нескольких валютных пар; 2. Выбирать валютную пару, и по этой валютной паре выбирать свечи;

Я могу делать по одной конкретной валютной паре, получать свечи по этой валютной паре а вот по нескольким даже не знаю как.

Прошу помочь, спасибо.

ЗЫ. Я видел на форуме где то ветку, с такой темой и примерами но потерял, найти не могу. Спасибо.

например 

iVolume("EURUSD",PERIOD_M5,0)  или

iHigh("EURUSD",PERIOD_M1,0)

вместо EURUSD можно написать любую другую пару

 

Читай документацию по iOpen(), iClose() и т.п. Ещё может пригодится MarketInfo для открытия ордеров по другой валютной паре

 

я наверное неправильно выразился. к примеру я использую следующий алгоритм:

for(int Nom_Candle=Bars - 1; Nom_Candle>=0; Nom_Candle--) - соответственно я перебираю все свечи некой валютной пары.

Так вот iVolume("EURUSD",PERIOD_M5,0) или iHigh("EURUSD",PERIOD_M1,0) это хорошо, но вот как задать некий массив который

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

Т.е. чтобы вместо того чтобы каждый раз не прописывать iHigh("EURUSD",PERIOD_M1,0) а потом iHigh("EURCAD",PERIOD_M1,0) и т.п.

Спасибо.

 

rabanik писал(а) >>


это хорошо, но вот как задать некий массив который

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

Т.е. чтобы вместо того чтобы каждый раз не прописывать iHigh("EURUSD",PERIOD_M1,0) а потом iHigh("EURCAD",PERIOD_M1,0) и т.п.

Спасибо.

// может быть так

for( int i=1; i<29; i++)  { 

   switch(i)  {
       case 1:    para = "EURGBP"; break; 
       case 2:    para = "EURAUD"; break;
       case 3:    para = "EURNZD"; break;
       case 4:    para = "EURUSD"; break;

       //для каждой цифры  пары прописать вручную

       case 28:   para = "CHFJPY"; break;
               }
     
     
     HIGH[i]=iHigh(para,PERIOD_M1,0);
     OPEN[i]=iOpen(para,PERIOD_M1,0);  }



 
rabanik >>:

я наверное неправильно выразился. к примеру я использую следующий алгоритм:

for(int Nom_Candle=Bars - 1; Nom_Candle>=0; Nom_Candle--) - соответственно я перебираю все свечи некой валютной пары.

Так вот iVolume("EURUSD",PERIOD_M5,0) или iHigh("EURUSD",PERIOD_M1,0) это хорошо, но вот как задать некий массив который

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

Т.е. чтобы вместо того чтобы каждый раз не прописывать iHigh("EURUSD",PERIOD_M1,0) а потом iHigh("EURCAD",PERIOD_M1,0) и т.п.

Спасибо.


начитать можно только надо обеспечить актуальность данных на момент расчета

иначе можете попасть на ситуацию когда данные в массиве будут не актуальны

сделайте массив пар и перед расчетом начитывайте в массив значения


сначала массив пар


dimenson string gSYM[10];

// затем массивы значений

dimenson double gSYMO[10];

dimenson double gSYMC[10];

dimenson double gSYMH[10];

dimenson double gSYML[10];


// доступ по индексу ... iSYM в цикле по парам

// вроде так

iHigh( gSYM[ iSYM ],PERIOD_M1,0)

 
KONDOR >>:



ошибка

/ может быть так

for( int i=1; i<29; i++)  { 

   switch(i)  {
       case 1:    para = "EURGBP"; break; 
       case 2:    para = "EURAUD"; break;
       case 3:    para = "EURNZD"; break;
       case 4:    para = "EURUSD"; break;

       //для каждой цифры  пары прописать вручную

       case 28:   para = "CHFJPY"; break;
               }
     
     
     HIGH[i]=iHigh(i,PERIOD_M1,0);
     OPEN[i]=iOpen(i,PERIOD_M1,0);  }

так правильно

HIGH[i]=iHigh( para  ,PERIOD_M1,0);
 
rabanik >>:

я наверное неправильно выразился. к примеру я использую следующий алгоритм:

for(int Nom_Candle=Bars - 1; Nom_Candle>=0; Nom_Candle--) - соответственно я перебираю все свечи некой валютной пары.

Так вот iVolume("EURUSD",PERIOD_M5,0) или iHigh("EURUSD",PERIOD_M1,0) это хорошо, но вот как задать некий массив который

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

Т.е. чтобы вместо того чтобы каждый раз не прописывать iHigh("EURUSD",PERIOD_M1,0) а потом iHigh("EURCAD",PERIOD_M1,0) и т.п.

Спасибо.


Есть функции ArrayCopyRates() и ArrayCopySeries(). Первая как раз копирует данные с нужной тебе пары и таймфрейма в массив. А дальше обрабатывай заполненный массив.

 
YuraZ >>:

начитать можно только надо обеспечить актуальность данных на момент расчета

иначе можете попасть на ситуацию когда данные в массиве будут не актуальны

сделайте массив пар и перед расчетом начитывайте в массив значения


сначала массив пар


dimenson string gSYM[10];

// затем массивы значений

dimenson double gSYMO[10];

dimenson double gSYMC[10];

dimenson double gSYMH[10];

dimenson double gSYML[10];


// доступ по индексу ... iSYM в цикле по парам

// вроде так

iHigh( gSYM[ iSYM ],PERIOD_M1,0)

Спасибо, всем за ответы. Только хотел уточнить, что значит - "начитать можно только надо обеспечить актуальность данных на момент расчета"? Можно ли это предотвратить если при работе мультивалютного советника открыть окна по всем валютам по которым я собираюсь работать (чтобы я так понял данные были актуальны)? И второй вопрос - Я не слишком силен в программировании MQL4 как вы, можете ли вы мне скинуть небольшой пример - сначала массив пар // затем массивы значений. Спасибо.

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