Библиотеки: PriceChannel

 

PriceChannel:

Ценовой канал произвольной длительности (таймфрейм) бара.

Автор: fxsaber

 
Если нужно, чтобы нижняя граница рассчитывалась по bid
#define PRICECHANNEL_LOW_PRICE bid  // bid/ask/last для Low бара
#include <fxsaber\PriceChannel\PriceChannel.mqh>
 
// Пример работы библиотеки PriceChannel на 10-секундных барах: ТФ = S10.
 
input int inPeriod = 23; // Период канала
input int NumBar = 12;   // Номер бара, данные которого будем выводить

#include <fxsaber\PriceChannel\PriceChannel.mqh> // https://www.mql5.com/ru/code/23418

PRICECHANNEL PriceChannel(inPeriod); // Создали PriceChannel, длительность бара совпадает с баром чарта.

void OnInit()
{
  PriceChannel.SetBarInterval(10); // Считаем 10-секундные бары: ТФ = S10.
  
  OnTick();  
}

#define TOSTRING(A) #A + " = " = (string)(A) + "\n"

void OnTick()
{
  static const datetime StartTime = TimeCurrent();
  
  PriceChannel.NewTick(); // Пробросили тик в канал
  
  const MqlTick Tick = PriceChannel[NumBar]; // Получили High и Low соответствующего S10-бара

  const string Str = "Duration = " + TimeToString(TimeCurrent() - StartTime, TIME_SECONDS) + "\n\n" +
  
                     "Length of the timeframe = " + (string)PriceChannel.GetBarInterval() + " seconds\n" +
                     "PriceChannel's period = " + (string)PriceChannel.GetPeriod() + " bars\n\n" +

                     "Highest[" + (string)PriceChannel.GetPeriod() + "] = " + DoubleToString(PriceChannel.GetHigh(), _Digits) + "\n" +
                     "Lowest[" + (string)PriceChannel.GetPeriod() + "] = " + DoubleToString(PriceChannel.GetLow(), _Digits) + "\n\n" +
                     
                     // Можно посчитать канал и не заданного периода
                     "Highest[" + (string)inPeriod + "] = " + DoubleToString(PriceChannel.GetHigh(inPeriod), _Digits) + "\n" +
                     "Lowest[" + (string)inPeriod + "] = " + DoubleToString(PriceChannel.GetHigh(inPeriod), _Digits) + "\n\n" +

                     // Соответствующие значения S10-бара
                     "High[" + (string)NumBar + "] = " + DoubleToString(Tick.bid, _Digits) + "\n" +
                     "Low[" + (string)NumBar + "] = " + DoubleToString(Tick.ask, _Digits);
                     
  PriceChannel.SetPeriod((PriceChannel.GetPeriod() + 1) % 100); // Можно изменять период канала
                      
  Comment(Str);
}
 

Проверил под MT4 на советнике с адаптивными периодами PriceChannels.


Время одиночного прогона без библиотеки

755160 tick events (17243 bars, 756161 bar states) processed in 0:00:04.868 (total time 0:00:05.008)


С библиотекой

755160 tick events (17243 bars, 756161 bar states) processed in 0:00:02.293 (total time 0:00:02.434)


В остальном все идентично.


Т.е. даже в MT4 Оптимизация может происходить в два раза быстрее. Ускорение получилось бонусом, делалось не для этого.

 
Нет планов добавить построение баров по числу тиков и по проторгованному объему?
 
Aleksey Vyazmikin:
Нет планов добавить построение баров по числу тиков и по проторгованному объему?

Каких-либо планов по этой библиотеке нет.

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