CustomSymbol*). Мы создаем виртуальный инструмент, транслируем в него независимый поток тиков базового актива и программно формируем бары Ренко фиксированного размера с помощью функции CustomRatesAdd. Это позволяет анализировать Ренко-графики стандартными индикаторами без задержек и ограничений автономных графиков.Исходный код
Ниже представлен готовый код советника (EA), который создает кастомный символ и в реальном времени строит бары Ренко на основе входящих тиков текущего графика. Код необходимо сохранить в папку MQL5/Experts.
//+------------------------------------------------------------------+
//| RenkoGenEA.mq5 |
//| Quant Developer|
//+------------------------------------------------------------------+
#property copyright "Quant Developer"
#property link "https://finfluct.com"
#property version "1.00"
input int BoxSize = 100; // Размер коробки Ренко (в пунктах)
input string CustomSymbolName = "EURUSD_Renko"; // Имя кастомного символа
double last_renko_close = 0;
double last_renko_open = 0;
datetime last_bar_time = 0;
int OnInit()
{
if(!SymbolExist(CustomSymbolName))
{
if(!CustomSymbolCreate(CustomSymbolName, "Renko", _Symbol))
{
Print("Ошибка создания символа: ", GetLastError());
return(INIT_FAILED);
}
}
CustomSymbolSetInteger(CustomSymbolName, SYMBOL_DIGITS, _Digits);
CustomSymbolSetDouble(CustomSymbolName, SYMBOL_POINT, _Point);
CustomSymbolSetInteger(CustomSymbolName, SYMBOL_TRADE_MODE, SYMBOL_TRADE_MODE_DISABLED);
if(!SymbolSelect(CustomSymbolName, true))
{
Print("Ошибка выбора символа");
return(INIT_FAILED);
}
MqlTick last_tick;
if(SymbolInfoTick(_Symbol, last_tick))
{
last_renko_close = last_tick.bid;
last_renko_open = last_tick.bid;
last_bar_time = TimeCurrent();
}
return(INIT_SUCCEEDED);
}
void OnTick()
{
MqlTick tick;
if(!SymbolInfoTick(_Symbol, tick)) return;
double price = tick.bid;
double point = _Point;
double box_size_price = BoxSize * point;
if(price >= last_renko_close + box_size_price)
{
while(price >= last_renko_close + box_size_price)
{
double open = last_renko_close;
double close = open + box_size_price;
datetime bar_time = last_bar_time + 60;
AddRenkoBar(open, close, open, close, bar_time);
last_renko_open = open;
last_renko_close = close;
last_bar_time = bar_time;
}
}
else if(price <= last_renko_close - box_size_price)
{
while(price <= last_renko_close - box_size_price)
{
double open = last_renko_close;
double close = open - box_size_price;
datetime bar_time = last_bar_time + 60;
AddRenkoBar(open, open, close, close, bar_time);
last_renko_open = open;
last_renko_close = close;
last_bar_time = bar_time;
}
}
}
void AddRenkoBar(double open, double high, double low, double close, datetime time)
{
MqlRates rates[1];
rates[0].open = open;
rates[0].high = high;
rates[0].low = low;
rates[0].close = close;
rates[0].time = time;
rates[0].tick_volume = 1;
rates[0].spread = 0;
rates[0].real_volume = 0;
CustomRatesAdd(CustomSymbolName, rates, 1);
} Разбор параметров
BoxSize: Размер коробки (кирпича) Ренко в пунктах. Определяет минимальное движение цены, необходимое для формирования нового бара.CustomSymbolName: Имя создаваемого кастомного символа (например,EURUSD_Renko), который появится в Обзоре рынка терминала MetaTrader 5.
Как запустить
1. Откройте MetaEditor в MetaTrader 5, создайте новый советник и вставьте в него представленный выше код.
2. Скомпилируйте код и вернитесь в терминал MT5.
3. Откройте график базового актива (например, EURUSD) и перетащите на него созданный советник.
4. В настройках укажите желаемый размер коробки BoxSize и имя кастомного символа.
5. В окне «Обзор рынка» (Market Watch) появится новый символ. Кликните по нему правой кнопкой мыши и выберите «Открыть график».
6. Теперь у вас есть полноценный, обновляемый в реальном времени график Ренко! Вы можете накладывать на него любые индикаторы, например, адаптивные скользящие средние. О том, как работают подобные алгоритмы сглаживания, читайте в статье Реализация адаптивного скользящего среднего Кауфмана (KAMA) в MQL4.
Для более сложных систем анализа, включающих корреляционные матрицы нескольких кастомных инструментов, вам может пригодиться материал MQL5: Индикатор тепловой карты корреляции валютных пар с многомерными массивами.
Если вам потребуется оптимизировать математические расчеты при обработке огромных массивов тиков, рекомендуем изучить статью Как вызвать C++ DLL в MQL5: Ускорение расчетов для Квантов.




