Ошибки, баги, вопросы - страница 3471

 
Не получается подписаться на бесплатные сигналы. В мт4 отсутствует вкладка "Сигналы".
 
fxsaber #:

Просьба поделиться скринами панельки Тестера.

Хочется понять, зависят ли ее размеры от конфигурации ОС. Спасибо.

Вот три варианта возможных вкладок


Очень даже зависят.

Зависят не от конфигурации, а от разрешения экрана и от языка терминала, точнее от количества букв в названиях вкладок.

Столкнулся с проблемой определения координат вкладок тестера, когда запустил прогу (которая правильно работала на компе) на сервере (на сервере работать не захотела).

Там совсем другое разрешение экрана оказалось.

Я тогда всё сделал через *опу, но оно работало.

   long handleMenu, handleID, handleDlg;
   int ControlID[] = {0xE81E, 0x804E}; // Spy++ ControlID, (0xE81E это инструменты)(0x804E это тестер стратегий), (0x2712 это строка - обзор, настройки, параметры,агенты..)
   handleID = GetHandle(Handle, ControlID);// нашли хэндл тестер стратегий

   RECT rtTul;
   user32::GetClientRect(Handle,  rtTul);//размер всего тулбара 1900/21

   int ControlID3[] = {0xE81E, 0x804E, 0x2712, 0x58D};
   long z = GetHandle(Handle, ControlID3);
   RECT rtButon;
   user32::GetClientRect(z,  rtButon);//размер тулбара с кнопками 206/23

   int ControlID4[] = {0xE81E, 0x804E, 0x2712, 0xFFFF};
   long b = GetHandle(Handle, ControlID4);
   RECT rtNull;
   user32::GetClientRect(b,  rtNull);//размер тулбара пустого 1340/20

   long c = 0;
   if(rtTul.right - rtNull.right > 0)
      c = (long)((rtTul.right - rtNull.right) / 9 * 3); //(весь туллбар-пустойтуллбар)/2,23 коэфф координаты кнопки бэктест.  560/2,23=251
   else
      c = (long)(rtTul.right / 9 * 4);

   handleID =  user32::GetDlgItem(handleID, 0x2712); // нашли хэндл строки с "обзор, настройки, параметры,агенты.."

   long handleTemp = user32::GetLastActivePopup(Handle);
   Error = 0;
   while(!IsStopped() && user32::GetLastActivePopup(Handle) == handleTemp)
     {
      user32::SendMessageW(handleID, WM_LBUTTONDOWN, 1, c);//выбрали вкладку  0xB0100 - "Бэктест", 0x600D8 - "Backtest",  ControlID 0xA00AD кнопки "Параметры",  0x7005C - "Настройки"
      user32::PostMessageW(Handle, WM_COMMAND, 33420, 0); // открыли форму сохранения файла, 33420 команда "Сохранить" отчёт HTML,  33419 Open XML
      Sleep(1000);
      c += 50;// если не угадали положение кнопки бэктест, сдвинемся на 50 пикселей и попробуем ещё раз
      Error++;
      if(Error >= 100)
        {
         WritingFile("Не удалось найти дескриптор строки, в которую вставляем имя файла" + "; LINE " + (string)__LINE__);
         return false;
        }
     }
   handleTemp = user32::GetLastActivePopup(Handle);
Сейчас бы просто сдвигал координаты, пока на открытой вкладке не появятся какие нибудь слова или кнопки, по которым можно понять, что открыта нужная мне вкладка.
 
fxsaber #:
Код?
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1

#property strict

int OnInit()
{
    PrintFormat("OnInit() returning: INIT_FAILED: %d", INIT_FAILED);
    return INIT_FAILED;
}
void OnDeinit(const int reason) {
   PrintFormat("OnDeinit() with reason: %d", reason);
}
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);
}

 
fxsaber #:


Так тоже не работает.


В архитектуре индикаторов вы разбираетесь хорошо, с этим не спорю.

А вот понять о чём пишут пользователи форума у вас получается не очень.

Другой причины ваших не рабочих советов я не вижу.

 
Aleksandr Slavskii #:

А вот понять о чём пишут пользователи форума у вас получается не очень.

Напишите, что нужно получить.

 
Aleksandr Slavskii #:

Вот три варианта возможных вкладок

Дополню.


Зависят не от конфигурации, а от разрешения экрана

С этим на сталкивался.

Я тогда всё сделал через *опу, но оно работало.

Спасибо за код.

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

Сложно идентифицировать, что открыта вкладка Journal.

 
Aleksandr Slavskii #:

Так ответили ведь уже, что так было задумано изначально.

а теперь фанфары !

#property copyright "Maxim A.Kuznetsov"
#property link      "https://www.luxtrade.tk"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   int total=ChartIndicatorsTotal(0,0);
   for(int i=0;i<total;i++) {
      string name=ChartIndicatorName(0,0,i);
      if (name==NULL || name=="") continue;
      PrintFormat("Indicator %d %s",i,name);
      int handle=ChartIndicatorGet(0,0,name);
      if (handle!=INVALID_HANDLE) {
         PrintFormat("ChartIndicatorGet OK!");
         IndicatorRelease(handle);
      } else {
         PrintFormat("ChartIndicatorGet failed with error %d",GetLastError());
      }
   }
}

Хендл нормально получается. Без ошибок. Для индикатора который вернул INIT_FAILED в OnInit и не вызывал SetIndexBuffer

Эффективный менеджмент - исправлять то что за 20 лет работало

 
fxsaber #:

Напишите, что нужно получить.

Имеем: Индикатор(код здесь), который получает хэндл на самого себя.

Далее в своей работе он обращается к этому хэндлу и получает какие то данные.

До этого момента всё хорошо.

Проблема возникает при удалении такого индикатора с графика. Он не заходит в OnDeinit и продолжает работать, хотя в списке индикаторов его на графике уже нет.

И удалить такой индикатор с графика получается только перезагрузкой терминала.

Что нужно получить? 

Работающий индикатор с нормальным удалением его с графика.

С помощью ваших рекомендаций, получается добиться только нормального удаления, но при этом индикатор перестаёт работать)

 
Maxim Kuznetsov #:

а теперь фанфары !

Хендл нормально получается. Без ошибок. Для индикатора который вернул INIT_FAILED в OnInit и не вызывал SetIndexBuffer

Эффективный менеджмент - исправлять то что за 20 лет работало

А я чё, я ничё)))

Вот и господа с иноземного форума тоже считают, что это баг, а Slava говорит, что это фича)

 
Aleksandr Slavskii #:

Вот и господа с иноземного форума тоже считают, что это баг

Просьба описать баг. Так и не понял из обсуждения.

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