Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Algotrade
17
Algotrade  

Нужно сделать индикатор который отображается как 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.
George Merts
4732
George Merts  
Интересно, что там за такие ужасные навороты, что нужна DLL. Чего в MQL такого нету ?
Algotrade
17
Algotrade  
George Merts:
Интересно, что там за такие ужасные навороты, что нужна DLL. Чего в MQL такого нету ?
Физико-математических функций нет, но Метатрейдер, на мой взгляд лучший терминал позволяющий подключить DLL и не ограничиваться в функционале, например, при использовании GPU для расчетов, ... и др. И в Метатрейдере готовый "не пиратский" тестет...
George Merts
4732
George Merts  
Algotrade:
Физико-математических функций нет

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

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

Algotrade
17
Algotrade  
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,);

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

Artyom Trishkin
Модератор
86057
Artyom Trishkin  
Algotrade:

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

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

NormalisedpriceBuffer[]

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

George Merts
4732
George Merts  
Artyom Trishkin:

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

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

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

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

Algotrade
17
Algotrade  
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[]), это же массив, цикл надо делать, что-бы поточечно отображать ?

Artyom Trishkin
Модератор
86057
Artyom Trishkin  
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);

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий