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

 
first_may:

Добрый день.

Подскажите пожалуйста, как получить значение Tenkan и Kijun на предыдущей свече в mql5?  

Посмотрите, пожалуйста пример для iIchimoku.
 
Karputov Vladimir:
Посмотрите, пожалуйста пример для iIchimoku.

Я смотрел, прежде чем задать вопрос. В mql4 было попроще, например на прошлой свече

double tenkan_sen=iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,1);

А здесь я понял, что создается объект

handle=iIchimoku(name,period,tenkan_sen,kijun_sen,senkou_span_b);

А вот как из него получить значение тенкана, не могу сообразить :(. Хочу простое пересечение тенкана и кинджуна отслеживать и все.

 
first_may:

Я смотрел, прежде чем задать вопрос. В mql4 было попроще, например на прошлой свече

double tenkan_sen=iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,1);

А здесь я понял, что создается объект

handle=iIchimoku(name,period,tenkan_sen,kijun_sen,senkou_span_b);

А вот как из него получить значение тенкана, не могу сообразить :(. Хочу простое пересечение тенкана и кинджуна отслеживать и все.

В индикаторе хотите отслеживать или в советнике?
 
Karputov Vladimir:
В индикаторе хотите отслеживать или в советнике?
В советнике. Форму алертов выводить со звуком.
 
first_may:
В советнике. Форму алертов выводить со звуком.
Посмотрите функцию CopyBuffer().
 
Tapochun:
Посмотрите функцию CopyBuffer().

В примере

ma_handle=iMA(Symbol(),0,period,shift,smootMode,price); - создается объект

if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);  - заполняется массив MABuffer значениями объектов ma_handle

 

И теперь из MABuffer можно получать значения на свечах?  

 
first_may:

В примере

ma_handle=iMA(Symbol(),0,period,shift,smootMode,price); - создается объект

if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);  - заполняется массив MABuffer значениями объектов ma_handle

 

И теперь из MABuffer можно получать значения на свечах?  

Да. В MABuffer с помощью функции CopyBuffer() вы получили значения МА на указанном Вами интервале. MABuffer, конечно же, массив.

 
Tapochun:

Да. В MABuffer с помощью функции CopyBuffer() вы получили значения МА на указанном Вами интервале. MABuffer, конечно же, массив.

А это все правильно делать в процедуре

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],

                const int &spread[]) 

 

Даже если я хочу вывести значение на экран? 

 
Длина стандартной строки string от 0 до 255 символов. Читаю из файла строки построчно через FileReadString без указания параметра length (по умолчанию length=0). То есть строка читается от текущего положения до признака перевода строки "\r\n". Как быть в том случае, если в файле строка занимает больше 255 символов (а такое возможно довольно часто). Разбивать строку на части очень не хочется, ибо строки строго структурированы (файл содержит html код). Идея такова изначальная, что в начале я файл читаю целиком построчно в массив, а потом уже только анализирую (парсю) его и выделяю нужную мне информацию. Если строки разбить, то парсер работать перестанет, ибо признаки нужной информации могут разделиться и попасть в разные считанные строки. long string нет( Может есть еще какие идеи?
 
first_may:

А это все правильно делать в процедуре

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],

                const int &spread[]) 

 

Даже если я хочу вывести значение на экран? 

Все зависит от логики индикатора. Чаще всего - да, в функции OnCalculate().