Как просмотреть из советника историю заданного периода? - страница 2

 
missha32 #:

День добрый . Подскажите пожалуйста почему в OnTimer() не отображает всю историю при таком коде ? 
При вставке в OnTick() все работает .

А событие по таймеру запустилось?

 
Vitaly Murlenko #:

А событие по таймеру запустилось?

Да . 
это значение обновляется 

TotalHistOrders = OrdersHistoryTotal();
удалось немного отследить и получилось что SendMessageW(g_hMT, WM_COMMAND, MENU_ALL_HISTORY_ID, 0);  отработало только на 13 итерации
 
missha32 #:

День добрый . Подскажите пожалуйста почему в OnTimer() не отображает всю историю при таком коде ? 
При вставке в OnTick() все работает .

Отображает. Проверил:

#property strict
#property indicator_chart_window


#define WM_COMMAND                  int(0x0111)
#define MENU_ALL_HISTORY_ID         int(0x8122)                                                    

#import "user32.dll"
   int GetParent(int hWnd);
   int SendMessageW(int hWnd, int msg, int wParam, int lParam);   
   
#import      

int g_hChart, g_hSymbol, g_hMDIClient, g_hMT;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   g_hChart = WindowHandle(Symbol(), Period());
   if (g_hChart <= 0)
   {
      Alert(WindowExpertName(), ": не удалось получить дескриптор окна чарта. Эксперт отключен.");
      return false;
   }
   
   g_hSymbol = GetParent(g_hChart);
   if (g_hSymbol <= 0)
   {
      Alert(WindowExpertName(), ": не удалось получить дескриптор окна символа чарта. Эксперт отключен.");
      return false;
   }

   g_hMDIClient = GetParent(g_hSymbol);
   if (g_hMDIClient <= 0)
   {
      Alert(WindowExpertName(), ": не удалось получить дескриптор окна родителя всех открытых графиков. Эксперт отключен.");
      return false;
   }

   g_hMT = GetParent(g_hMDIClient);
   if (g_hMT <= 0)
   {
      Alert(WindowExpertName(), ": не удалось получить дескриптор главного окна терминала. Эксперт отключен.");
      return false;
   }

   EventSetTimer(1);
   
   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[])
{
     return(rates_total);
}
  
void OnTimer()
{
   int static TotalHistOrders = -1;

   if (TotalHistOrders != OrdersHistoryTotal())
   {
      SendMessageW(g_hMT, WM_COMMAND, MENU_ALL_HISTORY_ID, 0);
      // Print("TotalHistOrders = ",TotalHistOrders, "   OrdersHistoryTotal() = ",OrdersHistoryTotal());
      TotalHistOrders = OrdersHistoryTotal();
      // Print("/////TotalHistOrders = ",TotalHistOrders, "   OrdersHistoryTotal() = ",OrdersHistoryTotal());
   }   
}  

Все зависит от того, где и как инициализируется TotalHistOrders.

 
Ihor Herasko #:

Отображает. Проверил:

Все зависит от того, где и как инициализируется TotalHistOrders.

Спасибо . действительно проблема была в том "как"  инициализировалась переменная  TotalHistOrders

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