Как принудительно проверить журнал ? - страница 4

 
expertboss:

Магик я не рассматривал по умолчанию, а вопрос в том что сигнал на закрытие происходит не из эксперта и он не знает в этом случае что пошел сигнал на закрытие. Опять же "искать в журнале " что там появился новый удаленный ордер.
в принципе можно научить эксперта читать журнал или логфайл при помощи функции FileRead() . но как научить его распозновать запись которая говорила бы ему что пошла отправка приказа на закрытие ордера вручную ...и как он будет отличать свои команды от сторонних если записи в логфайле очень просты и по ним нельзя определить каким способом пытаются закрыть ордер вручную или при помощи эксперта или скрипта . сперва записывается команда на сервер с параметрами ; номер тикера потом тип торговой операции , потом символ и так далее и видать нет способов поставить какую нибудь метку по которой бы можно было бы отличать каким способом закрывается ордер ...или я все усложняю как всегда или  все таки можно сделать все проще.  
 
expertboss:

Здесь просьба есть к Вам: не соображу как добавить этот "Sleep(100);"  в обработке ошибок свои номера ошибок, а мне как добавить свой номер ошибки. Может как по другому. Эта функция опять из учебника.

 int Fun_Error(int Error)                       // Ф-ия обработ ошибок

  {

   // Error                                    // Номер ошибки   

   if(Error==0)return(0);                      // Нет ошибки

      

                

//--------------------------------------------------------------- 3 --

      switch(Error)

     {                                          // Преодолимые ошибки            

      case  4: Alert("Торговый сервер занят. Пробуем ещё раз..");

         Sleep(1000);                           // Простое решение

         return(1);                             // Выход из функции

      case 135:Alert("Цена изменилась. Пробуем ещё раз..");

         RefreshRates();                        // Обновим данные

         return(1);                             // Выход из функции

      case 136:Alert("Нет цен. Ждём новый тик..");

         while(RefreshRates()==false)           // До нового тика

            Sleep(1);                           // Задержка в цикле

         return(1);                             // Выход из функции

      case 137:Alert("Брокер занят. Пробуем ещё раз..");

         Sleep(1000);                           // Простое решение

         return(1);                             // Выход из функции

      case 146:Alert("Подсистема торговли занята. Пробуем ещё..");

         Sleep(500);                            // Простое решение

         return(1);                             // Выход из функции

         // Критические ошибки

      case  2: Alert("Общая ошибка.");

         return(0);                             // Выход из функции

      case 133:Alert("Торговля запрещена.");

         return(0);                             // Выход из функции

      case 134:Alert("Недостаточно денег для совершения операции.");

         return(0);                             // Выход из функции

      default: Alert("Возникла ошибка ",Error); //Другие варианты   

          return(0);                            // Выход из функции

     }

  }

то число что записанно после слова case  показывает номер ошибки .  например учет ошибки 130 - неправильные стопы ,можно реализовать так;

case 130: Alert( " Неправильные стопы " );

return(0);   // выход из функции

 

по поводу паузы Sleep(100); если ее ставить в цикле while ( true ) то ее лучше выставить сразу после отправки приказа на сервер после OrderClose().. но думаю она там не нужна если не мониторить базу закрытых ордеров после отправки сигнала. нужные паузы лучше делать в теле функции обработки ошибок

 
Нет не поняли вопрос, подставить код ошибки это понятно, а сформировать какой-нибудь свой номер допустим для "нет ответа с сервера о закрытии" номер такой-то напрмер(777) и дальше спим (100) проверяем нет опять 777 проверяем есть - выход .....
 
expertboss:
Нет не поняли вопрос, подставить код ошибки это понятно, а сформировать какой-нибудь свой номер допустим для "нет ответа с сервера о закрытии" номер такой-то напрмер(777) и дальше спим (100) проверяем нет опять 777 проверяем есть - выход .....
в учебнике приводится много примеров похожих ошибок выдаваемых GetLastError() , не смотрели ? думаю разработчики все учли .. например ошибка 146 - подсистема торговли  занята..будем ждать значит.потом есть еще такая ошибка 6 - нет связи с торговым сервером - тоже ждем и много других ошибок после которых нет смысла покидать пределы цикла без повторных попыток . откройте редактор программ. в навигаторе выберете вкладку словарь и в списке " Стандартные константы " найдете коды ошибок
 
Boeing747:
в принципе можно научить эксперта читать журнал или логфайл при помощи функции FileRead() . но как научить его распозновать запись которая говорила бы ему что пошла отправка приказа на закрытие ордера вручную ...и как он будет отличать свои команды от сторонних если записи в логфайле очень просты и по ним нельзя определить каким способом пытаются закрыть ордер вручную или при помощи эксперта или скрипта . сперва записывается команда на сервер с параметрами ; номер тикера потом тип торговой операции , потом символ и так далее и видать нет способов поставить какую нибудь метку по которой бы можно было бы отличать каким способом закрывается ордер ...или я все усложняю как всегда или  все таки можно сделать все проще.  

Серверу до лампочки как сформирован сигнал есть сигнал он его обрабатывает. если запросов сильно много с одного места он ругается "частые запросы" и может банить терминал или IP.  это другая тема, где-то на форуме хорошо раскрыта.

.....  да а продажа похоже в пролете с "какой нибудь" меткой даже "комента" нет (посмотрел) 

 
Boeing747:
в учебнике приводится много примеров похожих ошибок выдаваемых GetLastError() , не смотрели ? думаю разработчики все учли .. например ошибка 146 - подсистема торговли  занята..будем ждать значит.потом есть еще такая ошибка 6 - нет связи с торговым сервером - тоже ждем и много других ошибок после которых нет смысла покидать пределы цикла без повторных попыток . откройте редактор программ. в навигаторе выберете вкладку словарь и в списке " Стандартные константы " найдете коды ошибок

В том то и дело что это похожие ошибки а не та которая нужна в данной ситуации.

учебник и справочник можно сказать на 95% от "корки до корки" 

 
Boeing747:
в учебнике приводится много примеров похожих ошибок выдаваемых GetLastError() , не смотрели ? думаю разработчики все учли .. например ошибка 146 - подсистема торговли  занята..будем ждать значит.потом есть еще такая ошибка 6 - нет связи с торговым сервером - тоже ждем и много других ошибок после которых нет смысла покидать пределы цикла без повторных попыток . откройте редактор программ. в навигаторе выберете вкладку словарь и в списке " Стандартные константы " найдете коды ошибок
наверно ошибка 128 - истек срок ожидания сделки = нет ответа сервера о закрытии сделки ..думаю этого достаточно  
 
сорри - подойдет.
 
expertboss:

Серверу до лампочки как сформирован сигнал есть сигнал он его обрабатывает. если запросов сильно много с одного места он ругается "частые запросы" и может банить терминал или IP.  это другая тема, где-то на форуме хорошо раскрыта.

.....  да а продажа похоже в пролете с "какой нибудь" меткой даже "комента" нет (посмотрел) 

не понятно зачем эксперту знать пошел ли приказ на закритие ордера созданный вручную или нет?  сформированна команда в самом эксперте на закрытие ордера при его наличии он будет пытаться исполнить этот приказ если нет такой команды то ему должнобыть все до фени ..не понимаю зачем такие усложнения  
 
а не встречал ли кто утилитку, которая читает и парсит логи терминала?
Причина обращения: