Помогите написать индикатор, поделюсь готовым кодом. Индикатор на основе физмата.

 

Нужно сделать индикатор который отображается как SMA (среднее) на графике котировки.

Основной код индикатора будет в DLL на C++

Прошу помочь с образцом короткого кода индикатора на MQL5 и передачей в DLL close в виде double.

Основной код  DLL представлен в статье на этом сайте https://www.mql5.com/ru/articles/18

DLL надо доделать что-бы в ней появился массив, потом передавался обратно в индикатор и потом отображался на графике.


Не более 5 участников. Когда будет готов индикатор, тем кто помогал, отправлю копию.


?

Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
  • 2010.01.27
  • Renat Fatkhullin
  • www.mql5.com
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах продемонстрировать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Покажу пошаговый процесс создания DLL библиотеки в Visual Studio с примерами передачи разных типов переменных (числа, массивы, строки и т.д.) и защиту клиентского терминала от падений в пользовательских DLL.
 
Интересно, что там за такие ужасные навороты, что нужна DLL. Чего в MQL такого нету ?
 
George Merts:
Интересно, что там за такие ужасные навороты, что нужна DLL. Чего в MQL такого нету ?
Физико-математических функций нет, но Метатрейдер, на мой взгляд лучший терминал позволяющий подключить DLL и не ограничиваться в функционале, например, при использовании GPU для расчетов, ... и др. И в Метатрейдере готовый "не пиратский" тестет...
 
Algotrade:
Физико-математических функций нет

А... Ну, тут речь больше о поставляемых библиотеках, поскольку, вобще говоря, этих функций и в С++ нет.

Лично мне все-таки кажется, что следует всемерно избегать использования ДЛЛ - из-за более сложной поддержки, и более сложного взаимодействия. Но, действительно, если требуются редкие и сложные вычисления - то, ДЛЛ может оказаться вполне разумным компромиссом по сравнению с реализацией этих функций в MQL "с нуля".

 
George Merts:

А... Ну, тут речь больше о поставляемых библиотеках, поскольку, вобще говоря, этих функций и в С++ нет.

Лично мне все-таки кажется, что следует всемерно избегать использования ДЛЛ - из-за более сложной поддержки, и более сложного взаимодействия. Но, действительно, если требуются редкие и сложные вычисления - то, ДЛЛ может оказаться вполне разумным компромиссом по сравнению с реализацией этих функций в MQL "с нуля".

Подскажите, если знаете, почему не отрисовывается индикатор ? Хочу загрузить close в массив, потом этот массив отобразить.... Код компилируется без ошибок но на графике не рисуется. "Разумно..." :-)

//+------------------------------------------------------------------+
//|                                              Normalisedprice.mq5 |
//|                                                                q |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "q"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Normalisedprice
#property indicator_label1  "Normalisedprice"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         NormalisedpriceBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,NormalisedpriceBuffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
double array;
int ArSize;
ArSize = ArraySize(price);
for(int i=0;i<ArraySize(price);i++) array[i]=price[i];
    
//--- return value of prev_calculated for next call
   return(array);
   
 PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,);

  }
//+------------------------------------------------------------------+

 
Algotrade:

Подскажите, если знаете, почему не отрисовывается индикатор ? Хочу загрузить close в массив, потом этот массив отобразить.... Код компилируется без ошибок но на графике не рисуется. "Разумно..." :-)

У вас же массив для отображения этот:

NormalisedpriceBuffer[]

а данные записываете в array[]

 
Artyom Trishkin:

У вас же массив для отображения этот:

а данные записываете в array[]

Там еще и в коде ошибка - array - это не массив значений, а одно значение.  А к нему присваивается, как к массиву...

Неужели это компилируется без ошибок ?

 
Artyom Trishkin:

У вас же массив для отображения этот:

а данные записываете в array[]

//---
int ArSize;
ArSize = ArraySize(price);
for(int i=0;i<ArraySize(price);i++) NormalisedpriceBuffer[i]=price[i];
    
//--- return value of prev_calculated for next call
   
   
 PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,NormalisedpriceBuffer[]);

  }
//+------------------------------------------------------------------+

Появляется такая ошибка (там где квадратные скобки курсивом)


']' - expression expected       Quantum1.mq5    47      62


Спасибо. p.s. 10 минут назад компилировалось немного с другими изменениями, сейчас пока не компилируется... Не могу понять, как вывести на экран буфер (NormalisedpriceBuffer[]), это же массив, цикл надо делать, что-бы поточечно отображать ?

 
Algotrade:

Появляется такая ошибка (там где квадратные скобки курсивом)



Спасибо. p.s. 10 минут назад компилировалось немного с другими изменениями, сейчас пока не компилируется... Не могу понять, как вывести на экран буфер (NormalisedpriceBuffer[]), это же массив, цикл надо делать, что-бы поточечно отображать ?

Закомментируйте вообще эту строку

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,NormalisedpriceBuffer[]);

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

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);

либо

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

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