Есть индикатор. Работает как тиковый, но рисует кривую по принципу: если тик вверх - прибавляет 1, если вниз - убавляет - 1. Начинает рисовать от нуля.
Нужно сделать чтобы начинал расчет с цены Bid (первое значение индикатора когда вешаем его на график) и прибавлял-убавлял 1 пункт (0,00001).
А какой смысл? Вид графика индикатора не изменится, поменяются лишь значения боковой шкалы индикатора, но с реальными ценами значения всё равно совпадать не будут.
А какой смысл? Вид графика индикатора не изменится, поменяются лишь значения боковой шкалы индикатора, но с реальными ценами значения всё равно совпадать не будут.
Я это понимаю. Просто хочу сравнить с тиковым, а так мне удобнее.
Я это понимаю. Просто хочу сравнить с тиковым, а так мне удобнее.
#property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_separate_window #property indicator_buffers 1 #property indicator_type1 DRAW_LINE #property indicator_color1 clrDodgerBlue #property indicator_width1 1 input uint Limit = 100; double PriceBuffer[]; double Price[]; double prev_bid; bool flag_start; int arr_limit; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0, PriceBuffer); SetIndexEmptyValue(0, 0.0); IndicatorSetInteger(INDICATOR_DIGITS, _Digits); //--- 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[]) { double delta = 0; double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); if(!flag_start) { if(Limit == 0 || (int)Limit >= rates_total)arr_limit = rates_total; else if((int)Limit < rates_total)arr_limit = (int)Limit; ArrayResize(Price, arr_limit); Price[0] = bid; prev_bid = bid; flag_start = true; return(0); } if(arr_limit > rates_total) { arr_limit = rates_total; ArrayResize(Price, arr_limit); } delta = NormalizeDouble(bid - prev_bid, _Digits); if(delta > 0)Shift_Buffers(arr_limit, _Point); //UP else if(delta < 0)Shift_Buffers(arr_limit, -_Point); //DOWN prev_bid = bid; //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ // // //+------------------------------------------------------------------+ void Shift_Buffers(int limit, double value) { ArrayCopy(Price, Price, 1, 0); Price[0] = Price[1] + value; ArrayCopy(PriceBuffer, Price, 0, 0, arr_limit); if(PriceBuffer[limit - 1] != 0.0)PriceBuffer[limit - 1] = 0.0; } //+------------------------------------------------------------------+
Сергей, спасибо огромное! Попробую в понедельник.
Сергей, спасибо огромное! Попробую в понедельник.
Можете в тестере проверить.
Можете в тестере проверить.
Значит не правильно проверяете.У меня всё работает:
история должна быть загружена, М1, модель "все тики"
Все работает, ступил я. Спасибо!
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть индикатор. Работает как тиковый, но рисует кривую по принципу: если тик вверх - прибавляет 1, если вниз - убавляет - 1. Начинает рисовать от нуля.
Нужно сделать чтобы начинал расчет с цены Bid (первое значение индикатора когда вешаем его на график) и прибавлял-убавлял 1 пункт (0,00001).
Сам не могу, не получается.
Спасибо.