Вопрос знатокам о Ренко и индикаторах

 

Добрый день, коллеги.

При разработке своей стратегии возникла необходимость закодировать некоторую логику с использованием Графиков ренко и пары индикаторов. в Quik с этим беда. Вспомнил о старом добром Metatrader 5, который предоставляет брокер. Полистал документацию, посмотрел пару видео. И, прежде чем погрузиться во все тяжкие дальнейшего и глубочайшего изучения языка, хотел бы спросить у Вас совета. Разобрав для примера, как мне кажется один из простейших индикаторов -  Parabolic SAR - понял что OnCalculate бывает двух видов, и соответственно если мы хотим построить индикатор по индикатору, то нужна версия в которой только &close[] имеется. В CodeBase нашел только один неплохо выглядящий ренко (https://www.mql5.com/ru/code/1299). Но к нему не все индикаторы можно подцепить - тот же взятый для примера параболик нельзя. Есть ли выход из этой ситуации кроме как писать свой ренко на котором будут и еще все необходимые индикаторы в доп. буферах? И второй вопрос, если есть желание строить индикатор, тот же ренко например, не по всем имеющимся по инструменту данным, а например только с 5 декабря, то насколько это будет правильно? Поигрался с примером - выводить только цены закрытия после 5 декабря, и то он правильно отображает все, то сбивается при смене таймфрейма. Понятно что я скорее всего что-то не то делаю, так как один вечер за кодингом провел, но все же, интересно мнение, насколько вообще правильно таким заниматься в Metatrader 5.

//+------------------------------------------------------------------+
//|                                                        Close.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Close
#property indicator_label1  "Close"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input datetime НачальнаяДата=D'2017.12.05 00:00:00';
//--- indicator buffers
double         CloseBuffer[];

//--- global variables
int                  НачалоОтсчета = 0;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,CloseBuffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   for (int i = 0; i < rates_total && !IsStopped();i++)
   {
      if(time[i]>=НачальнаяДата)
      {
         НачалоОтсчета = i;
         break;
      }
      НачалоОтсчета = rates_total-1;
   }

   int pos=НачалоОтсчета;
   
   
   for (int СчетчикЦикла = pos; СчетчикЦикла<rates_total && !IsStopped();СчетчикЦикла++)
   {
      CloseBuffer[СчетчикЦикла] = close[СчетчикЦикла];
   }

   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Если непонятно изложил, готов объяснить, если нарушил какое-то правило, заранее извиняюсь - первый пост.

Всем принявшим участие в дискуссии заранее Спасибо!

Renko
Renko
  • голосов: 37
  • 2012.12.07
  • Serhii Ivanenko
  • www.mql5.com
Внешне графики ренко напоминают графики трёхлинейного прорыва, но в случае ренко все боксы имеют одинаковый размер. При построении графика учитываются только такие движения, величина которых больше или равна заданному порогу. Ренко хорошо использовать на рынках с существенными трендовыми движениями, поскольку при этом трейдер получает львиную...
 
LSystems:

Добрый день, коллеги.

При разработке своей стратегии возникла необходимость закодировать некоторую логику с использованием Графиков ренко и пары индикаторов. в Quik с этим беда. Вспомнил о старом добром Metatrader 5, который предоставляет брокер.

Если о старом добром, то это видимо о MetaTrader 4? А MetaTrader 5 - новый и злой ;-).

В общем, пока ренко проще сделать на МТ4 на оффлайн чартах (их можно обновлять тиками, так что они фактически превращаются в онлайн), и на эти чарты набрасывать любые стандартные и нестандартные индюки и эксперты - и все будет работать без специальной заточки.

В МТ5 действительно прийдется потрудиться: пока "рекомендации от лучших собаководов" (т.е. от MetaQuotes) именно такие - писать свои структуры данных под ренко и специально под них затачивать все индикаторы и эксперты, которые на ренко предполагается накладывать.

 
LSystems:

Добрый день, коллеги.

При разработке своей стратегии возникла необходимость закодировать некоторую логику с использованием Графиков ренко и пары индикаторов. в Quik с этим беда. Вспомнил о старом добром Metatrader 5, который предоставляет брокер. Полистал документацию, посмотрел пару видео. И, прежде чем погрузиться во все тяжкие дальнейшего и глубочайшего изучения языка, хотел бы спросить у Вас совета. Разобрав для примера, как мне кажется один из простейших индикаторов -  Parabolic SAR - понял что OnCalculate бывает двух видов, и соответственно если мы хотим построить индикатор по индикатору, то нужна версия в которой только &close[] имеется. В CodeBase нашел только один неплохо выглядящий ренко (https://www.mql5.com/ru/code/1299). Но к нему не все индикаторы можно подцепить - тот же взятый для примера параболик нельзя. Есть ли выход из этой ситуации кроме как писать свой ренко на котором будут и еще все необходимые индикаторы в доп. буферах? И второй вопрос, если есть желание строить индикатор, тот же ренко например, не по всем имеющимся по инструменту данным, а например только с 5 декабря, то насколько это будет правильно? Поигрался с примером - выводить только цены закрытия после 5 декабря, и то он правильно отображает все, то сбивается при смене таймфрейма. Понятно что я скорее всего что-то не то делаю, так как один вечер за кодингом провел, но все же, интересно мнение, насколько вообще правильно таким заниматься в Metatrader 5.

Если непонятно изложил, готов объяснить, если нарушил какое-то правило, заранее извиняюсь - первый пост.

Всем принявшим участие в дискуссии заранее Спасибо!


Сейчас в вета-тестинге на МТ5 пользовательские чарты, ещё немного и выйдут в релиз. Доступны с 1700 билда.

Можите попробовать чтоб не париться с индикаторами от индикаторов.

ЗЫ А так можно и индикатор от индикатора, благо все стандартные индикаторы есть в виде кода в папке Indicators/Exsamples

 
Nikolay Demko:

Сейчас в вета-тестинге на МТ5 пользовательские чарты, ещё немного и выйдут в релиз. Доступны с 1700 билда.

Гы. Почитайте соседнюю ветку форума. Пользовательские чарты, как оказалось, не задумывались MQ и не пригодны для ренко (официальное заявление). То есть в общем-то кое-что можно реализовать, но есть нюансы. Я этот путь уже прошел. Пара дел (с багами и техническими ограничениями) висит в СД.

MetaTrader 5 renko chart for EURUSD, 100 points box

 
Stanislav Korotky:

Гы. Почитайте соседнюю ветку форума. Пользовательские чарты, как оказалось, не задумывались MQ и не пригодны для ренко (официальное заявление). То есть в общем-то кое-что можно реализовать, но есть нюансы. Я этот путь уже прошел. Пара дел (с багами и техническими ограничениями) висит в СД.



Хм, а весело так получается конечно. Ну чтож, не хотелось до этого доводить, но видимо придется сильно заморочиться, потратить много времени, но, как я и думал, просто запилить свою систему на знакомом мне, но уже изрядно подзабытом C# (с коннектором к чему угодно). Да, времени уйдет больше, зато пиши все что хочешь))) Учить фактически с нуля MQL5 (который в отличие от C# больше нигде и не применишь) как-то не айс)) уж куда лучше довести до еще более высокого уровня знания языка с которым хоть пиши что хочешь хоть в голодный год кодером на подработку иди в любой точке мира)))


Спасибо за разъяснения)) Как знал что прежде чем нырять с головой лучше спросить у старших товарищей))) Удачи в торговле)

 
Nikolay Demko:

ЗЫ А так можно и индикатор от индикатора, благо все стандартные индикаторы есть в виде кода в папке Indicators/Exsamples


Вообще-то в вопросе прозвучал конкретный индикатор - Parabolic SAR, который строится от high/low, т.е. от двух параллельных таймсерий, а не одной. Каким образом, его можно построить от другого индикатора, в котором в нескольких индикаторных буферах хранятся свечи (с типами DRAW_BARS или DRAW_CANDLES)?

 
Stanislav Korotky:

Гы. Почитайте соседнюю ветку форума. Пользовательские чарты, как оказалось, не задумывались MQ и не пригодны для ренко

Какие есть проблемы, кроме времени баров?

Если вести условное время, начиная от 01.01.1970, и прибавляя по минуте для каждого нового ренко-бара, будут какие-то сложности?

 
Andrey Khatimlianskii:

Какие есть проблемы, кроме времени баров?

Если вести условное время, начиная от 01.01.1970, и прибавляя по минуте для каждого нового ренко-бара, будут какие-то сложности?

Здесь будет та сложность, что у котировок окажутся кривые даты. Я предпочитаю у бара/бокса видеть реальное время, чтобы его можно было сопоставить с котировками. Поэтому оставил минутный таймфрейм и уходить с него не собираюсь (если MQ не добавят секундный, который некоторые трейдеры просят уже давно).

Другая проблема описана в СД. Программа для воспроизведения отправлена.

Еще одну не могу точно отловить - симптомы такие, что "будущие" кастом-бары не удаляются по CustomRatesDelete(, 0, LONG_MAX).

 
Stanislav Korotky:

 Поэтому оставил минутный таймфрейм и уходить с него не собираюсь (если MQ не добавят секундный, который некоторые трейдеры просят уже давно).

@Stanislav Korotky Вы наверняка знаете, что в MT4 в историю можно писать бары с точностью до секунды (получится максимум 60 баров в минуте).

Причём они адекватно отображаются на графике. Вот пример: в минуте 22 бара.



Такого разрешения вполне достаточно, чтобы не было рассинхронизации времени на ренко если у вас выставлен маленький размер кирпича.

Очень надеюсь, что в MT5 для кастомных графиков сделают то же самое.

 
Stanislav Korotky:

Здесь будет та сложность, что у котировок окажутся кривые даты. Я предпочитаю у бара/бокса видеть реальное время, чтобы его можно было сопоставить с котировками. Поэтому оставил минутный таймфрейм и уходить с него не собираюсь (если MQ не добавят секундный, который некоторые трейдеры просят уже давно).

Другая проблема описана в СД. Программа для воспроизведения отправлена.

Еще одну не могу точно отловить - симптомы такие, что "будущие" кастом-бары не удаляются по CustomRatesDelete(, 0, LONG_MAX).

Я тоже предпочитаю. Но если это единственная проблема, то она не такая уж и страшная, как по мне.


Andrey Voytenko:

@Stanislav Korotky Вы наверняка знаете, что в MT4 в историю можно писать бары с точностью до секунды (получится максимум 60 баров в минуте).

Речь как раз о различии МТ4 и МТ5 в этом вопросе.

 

В Renko / Range Bars все бары должны иметь одинаковую длину, поэтому с барами смысла возиться нет, можно рисовать как ломаную машку.
Идеи по оптимизации этого индикатора приветствуются.


Файлы:
Renko.zip  6 kb
Причина обращения: