Вопросы от "чайника" - страница 132

 
Yedelkin:

Если интересует расчёт на данных другого индикатора, то делается так. Сначала создается тот самый другой индикатор с о своим методом расчёта данных, затем берётся хендл этого индикатора (Справочник MQL5 / Технические индикаторы / iCustom ) и уже этот хендл используется в новом индикаторе. Посмотрите внимательно пример. Если будут вопросы по примеру -

есть вопросы. всеравно не понимаю.
ок, берем Custom Moving Average.mq5 за основу.

добавить в список процедуру нового сглаживания  MODE_MYMA - не вопрос.

вопрос как подсунуть данные. через и-кастом другого индикатора? замечательно. берем для примера любой, сделанный по второй форме (если индикатор сделан по первой.. не понял откуда брать хай-лоу.. значит только по второй форме?)

ок, объявляем

int newHandl;

в onInit определяем его (как пример - параболик. пофиг, главное чтоб был 2го типа, верно? как реализовать свое, примерно понятно)

newHandl=iCustom(_Symbol,0,"ParabolicSAR.mq5",0.02,0.2);

а дальше? в onCalculate подсовываем вместо стандартной цены? или что?

CalculateEMA(rates_total,prev_calculated,begin,newHandl);  ???

ругаецо. или как? поясните, я не понимаю... (((((

да, я пока мыслю шаблонами мкл4. там просто - цикл, данные(любые!) взял, сгладил, вывел.
тут же.... не ясно, за что хватацо..

 
GameOver:

(если индикатор сделан по первой.. не понял откуда брать хай-лоу.. значит только по второй форме?)

Да, про хай-лоу это был только пример, как самому разбираться со статьями. Для первой формы можно взять задачу построения линии close[i]/2 [или sqrt(close[i]/2)]. В общем, вариаций можно придумать кучу и при использовании одного массива.

GameOver:

ок, объявляем

int newHandl;

в onInit определяем его (как пример - параболик. пофиг, главное чтоб был 2го типа, верно? как реализовать свое, примерно понятно)

newHandl=iCustom(_Symbol,0,"ParabolicSAR.mq5",0.02,0.2);

 Всё отлично. Щаз допишу.

Если полученный хендл индикатора является корректным, то это значит, что мы можем обращаться к буферам такого индикатора. Вот смотрите опять пример из Справочник MQL5 / Технические индикаторы / iCustom Там есть такая строчка:

//--- скопируем значения индикатора Custom Moving Average в наш индикаторный буфер
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);

Посмотрите, где эта строчка расположена. Теперь читайте Справочник MQL5 / Доступ к таймсериям и индикаторам / CopyBuffer (...Опять-таки: многое проясняется при разборе примеров построчно).

Попробуйте получить данные любого буфера индикатора, который Вы выбрали. У меня нет под рукой терминала, но в параболике можете сами посмотреть, какие буфера рассчитываются и их нумерацию. 

Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5
 

Вопрос по поводу описания функций ArrayIsSeries() и ArrayGetAsSeries().

В Справочнике есть такая фраза: "Переданные  в  функцию массивы отражают ценовые данные, т.е. эти массивы имеют признак таймсерии и функция ArrayIsSeries() вернет true при проверке этих массивов. Но тем не менее, направление индексации необходимо в любом случае проверять только функцией ArrayGetAsSeries()".

Из буквального прочтения следует, что даже если  функция ArrayIsSeries() вернет true (т.е. подтвердит, что проверяемый массив является массивом-таймсерией), то всё равно направление индексации необходимо в любом случае проверять только функцией ArrayGetAsSeries(). Непонятен тогда смысл введения в обиход функции ArrayIsSeries() , если её результаты всё равно требуется проверять дополнительно. В чём фишка? Что, могут быть ситуации, когда массив может быть таймсерией, но направление индексации у него будет не как у таймсерии (не будет установлен флаг AS_SERIES)?

 


При портировании с Mql4 на Mql5 выпала ошибка Lot:

'Lot' - constant cannot be modified

input double Lot = 0.1; // Lot

if (MartingaleType ==7)
 {
 if (Counter1==1)
 Lot=Lots() ;
}

 Как править?


 
Dark.Angel:


При портировании с Mql4 на Mql5 выпала ошибка Lot:

'Lot' - constant cannot be modified

 Как править?

Никак. Это не баг, это фича. :)

В mql5 input-переменные не модифицируются (const).

Сделайте простую развязку:

input int x=5;
input double StartLot = 0.01;

int X;
double Lot;
...
...
void OnInit()
  {
   ....
    X=x;
    Lot=StartLot;
   .......
  }
.....
void OnStart()
  {
   ....
   Lot=Lots();
  }
 

В продолжение вопроса. В разделе "Справочник MQL5 / Операции с массивами / ArraySetAsSeries" есть пример, когда функция ArraySetAsSeries() применяется к массиву const datetime &time[] на каждом тике: 

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[])
  {
//---  будем хранить время открытия текущего нулевого бара
   static datetime currentBarTimeOpen=0;
//--- перевернем доступ к массиву time[] - сделаем как в таймсерии
   ArraySetAsSeries(time,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }

 Это что, так все делают (переворачивают массив на каждом тике), чтобы работать с массивом, как с таймсерией?

Ещё вопрос: могут ли массивы, используемые функцией OnCalculate(), произвольно менять направление своей индексации? Или же достаточно один раз проверить это направление?

 


При портировании с Mql4 на Mql5 выпала ошибка SymbolInfoDouble:
'SymbolInfoDouble' - no one of the overloads can be applied to the function call

на Mql4:
double a = balance / MarketInfo (Symbol (), MODE_MARGINREQUIRED) - 0.2 ; 

на Mql5:
double a = balance / SymbolInfoDouble(Symbol(), 0) - 0.2 ;

Как править?
 
Dark.Angel:


При портировании с Mql4 на Mql5 выпала ошибка SymbolInfoDouble:
'SymbolInfoDouble' - no one of the overloads can be applied to the function call


Как править?

Почему внизу 0?Там указываем свойство.

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double 

 ну а в дополнение проверку деления на 0. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Результаты работы тестера стратегий отображаются в виде графиков:


Не подскажите, где посмотреть, что означают разные цвета на графиках?

 
pusheax:

Результаты работы тестера стратегий отображаются в виде графиков:

Не подскажите, где посмотреть, что означают разные цвета на графиках?

Синие - прибыль, красные - убыток. А вот левый верхний под вопросом только...
Причина обращения: