Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 114

 
Yedelkin:
Затрудняюсь ответить. Перечитал Ваши сообщения, но замысел с изменением размера массива не понял. А от понимания замысла зависит и ответ по коду. Может, кто ещё откликнется.

Мне в принципе не суть, изменение размера массива, задам ему например 20. 

  

 double masCenPoc[20]; 

 for(int i=0; i<20; i++){
 
   if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low))

//как вот дальше обозначить чтоб он запомнил значение цены уровня Рос?
    
    masCenPoc[i] = cena_poc;

else 

//и удалил значение из массива, если нашлось пересечение с ценой этого уровня Рос?
 
Top2n: Мне в принципе не суть, изменение размера массива, задам ему например 20. 

Вот у Вас массив из 20-ти элементов. Допустим, условие if выполняется - присваиваем первому элементу массива значение цены: masCenPoc[0] = cena_poc;     

Что будем присваивать второму элементу массива

 
Yedelkin:

Вот у Вас массив из 20-ти элементов. Допустим, условие if выполняется - присваиваем первому элементу массива значение цены: masCenPoc[0] = cena_poc;     

Что будем присваивать второму элементу массива

Следующее значение Рос, которое будет через n кол-во времени. Линии Рос появляются в начале каждого дня, по результатам предыдущего. Если цена не коснется уровня, то значение этого уровня Рос сохранится в массиве.
 
Top2n: Следующее значение Рос, которое будет через n кол-во времени. Линии Рос появляются в начале каждого дня, по результатам предыдущего. Если цена не коснется уровня, то значение этого уровня Рос сохранится в массиве.
Понятно. Я бы сделал так. Завёл бы массив на 20 элементов и присвоил им всем значение -1. В начале каждого дня запускал бы цикл for(int i=0; i<20; i++) и искал в массиве первый элемент со значением -1. После нахождения такого элемента проверял торговые условия (if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low))) и в случае успеха присваивал бы значение cena_poc найденному элементу массива. Тем самым массив постепенно бы заполнялся нужными значениями.
 
Top2n: Ясно спасибо, а куда засунуть 
Да если использовать нединамический массив (как в Вашем последнем примере), то и функция эта не нужна. Если же требуется именно динамический массив, то объявите и задайте его размер в первых строчках кода, до цикла.
 
Top2n:

Мне в принципе не суть, изменение размера массива, задам ему например 20. 

 

Должно быть все со смыслом. В данном случае возможно массив и не нужен. В одном цикле с дальнейшими расчетами возможно хватит 1 переменной. Подозреваю вы хотите получить данные по истории, поэтому цикл будет логичнее от какого-то бара до 0. И тогда строить уже ваши данные. Если нужен массив, то он должен в вашем случае накапливаться как стек.

Если же вы хотите построить по онлайн котировкам, то все равно это по правилам стека(стакана).

//Удачи!
 

Здравствуйте. При попытке скопировать данные индикатора в массив с помощью функции CopyBuffer получаю значения типа -6.999999999999999e-005

В чем может быть причина? 


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
sss20192:

Здравствуйте. При попытке скопировать данные индикатора в массив с помощью функции CopyBuffer получаю значения типа -6.999999999999999e-005

В чем может быть причина? 


Возможно такие значения и у оригинала. Правильно было бы выложить код.
 

В окне данных у индикатора другие данные. Советник прикрепляю к графику H1, а копирует данные он с таймфреймов M5 M15 и H1.

 

int MacdHandleTf1 = iMACD(_Symbol, Timeframe1, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf2 = iMACD(_Symbol, Timeframe2, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf3 = iMACD(_Symbol, Timeframe3, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

CopyBuffer(MacdHandleTf1, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf2, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf3, 0, 1, 1, MacdArray); 

Print(NormalizeDouble(MacdArray[0], 5)); 
Причина обращения: