OnCalculate не перезапускается - страница 2

 
Вызовите OnCalculate. MT4 выдерживал такое издевательство. 
 
Алексей Тарабанов:
Вызовите OnCalculate. MT4 выдерживал такое издевательство. 

Забавно получилось : )

   if(calculated<ExtRatesTotal)
     {
      Print("Ошибка! Не все данные ExtMACDHandle рассчитаны: (",calculated,"bars, ExtRatesTotal: ",ExtRatesTotal,"). Error",GetLastError());
      //return(RESET);
      //OnInit();
      OnCalculate(rates_total,0,time,open,high,low,close,tick_volume,volume,spread);
     }

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.361 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.362 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.364 OnCalculate_MT5_Test2 (TSLA,MN1) Stack overflow

2021.04.20 22:27:24.362 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.373 OnCalculate_MT5_Test (TSLA,MN1) Всё в порядке, Все данные рассчитаны: (561bars, ExtRatesTotal: 561


 
Sunriser:

А создать такое событие нельзя? 

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

 
Ihor Herasko:

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

В визуальном тестере приходят, там нормально всё, а если кинуть индикатор на открытый график пользовательского символа, то откуда там активности тиков взяться

 
Sunriser:

Забавно получилось : )


2021.04.20 22:27:24.364 OnCalculate_MT5_Test2 (TSLA,MN1) Stack overflow

2021.04.20 22:27:24.362 OnCalculate_MT5_Test2 (TSLA,MN1) Ошибка! Не все данные ExtMACDHandle рассчитаны: (-1bars, ExtRatesTotal: 561). Error4806

2021.04.20 22:27:24.373 OnCalculate_MT5_Test (TSLA,MN1) Всё в порядке, Все данные рассчитаны: (561bars, ExtRatesTotal: 561


Переполнение стека. Ну, и не все данные рассчитаны. Почему-то, думаю, что Вы ушли в почти бесконечную перегрузку. До 561-го бара )

 
Sunriser:

В визуальном тестере приходят, там нормально всё, а если кинуть индикатор на открытый график пользовательского символа, то откуда там активности тиков взяться

вот вроде ваша идея в этом индикаторе https://www.mql5.com/ru/code/995

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

из вашего теста  вставил это 

//--- ????????? ?????? ?????????? ColorRSI
   RSI_Handle=iOsMA(NULL, TimeFrame, InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalEMAPeriod,PRICE_CLOSE);
   if(RSI_Handle==INVALID_HANDLE)
     {
      Print(" ?? ??????? ???????? ????? ?????????? RSI");
      Init=false;
      return(INIT_FAILED);
     }

получилось это 

Снимок[POP 3

RSI HTF
RSI HTF
  • www.mql5.com
Классический вариант технического индикатора RSI, который можно располагать, зафиксировав таймфрейм индикатора на значении, отличающемся от таймфрейма графика
 
SanAlex:

вот вроде ваша идея в этом индикаторе https://www.mql5.com/ru/code/995

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

из вашего теста  вставил это 

получилось это 


И? 

 
Алексей Тарабанов:

И? 

это секрет! 

//+------------------------------------------------------------------+
//|                                        OnCalculate_MT5_Test.mq5  |
//|                                                                  |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Silver
#property indicator_width1  2

#define RESET 0                         // Константа для возврата терминалу команды на пересчет индикатора

//--- Параметры внешнего индикатора
input ENUM_TIMEFRAMES    ExtMACDPeriod=PERIOD_W1;     // Период внешнего индикатора
input int                InpFastEMAPeriod=12;         // Fast EMA period
input int                InpSlowEMAPeriod=26;         // Slow EMA period
input int                InpSignalEMAPeriod=9;        // Signal EMA period

//--- indicator buffers
double                   ExtMACDhistogramBuffer[];    // буфер внешнего индикатора

//--- handles
int                      ExtMACDHandle;               // хэндл внешнего индикатора

//--- вспомогательные переменные
int                      ExtRatesTotal=0;             // кол-во баров таймфрэйма внешнего индикатора
//--- ?????????? ?????????? ??? ???????? ?????????? ????????????? ??????????
bool Init;
//--- ?????????? ????????????? ?????????? ?????? ??????? ??????
int min_rates_total;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ????????????? ?????????? ?????? ??????? ??????
   min_rates_total=3;
   Init=true;
//--- ???????? ???????? ???????? ?? ????????????
   if(ExtMACDPeriod<Period() && ExtMACDPeriod!=PERIOD_CURRENT)
     {
      Print("?????? ??????? ??? ?????????? RSI ?? ????? ???? ?????? ??????? ???????? ???????");
      Init=false;
      return(INIT_FAILED);
     }

   ExtMACDHandle=iOsMA(NULL, ExtMACDPeriod, InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalEMAPeriod,PRICE_CLOSE);
//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if(ExtMACDHandle==INVALID_HANDLE)
     {
      Print(" Не удалось получить хендл индикатора Elder MACD histogram, прерываю делением на ноль");
      return(false);
     }
   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[])
  {
// Проверим достаточность баров внешнего индикатора
   if(rates_total<min_rates_total || !Init)
      return(RESET);
   if(BarsCalculated(ExtMACDHandle)<Bars(Symbol(),ExtMACDPeriod))
     {
      Print("Ошибка! Не все данные ExtMACDHandle рассчитаны: (",ExtMACDHandle,"bars, ExtRatesTotal: ",ExtRatesTotal,"). Error",GetLastError());
      return(RESET);
     }
   Print("Всё в порядке, Все данные рассчитаны: (",ExtMACDHandle,"bars, ExtRatesTotal: ",ExtRatesTotal);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Снимок[POP4
 
Ну, вы, мужики, даёте... 
 
Алексей Тарабанов:
Ну, вы, мужики, даёте... 

честно скажу - я и сам не понимаю, но хочу поучаствовать и с умным лицом как будто понимаю.   

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