[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 113

 
IgorM:

бывают сложные расчеты или подкачка истроии в init(), или на терминале много индикаторов и советников подвешивают терминал или...

в общем есть некое время на инициализацию кода, не скажу конкретно сколько, но если во время инициализации кода терминал прервет работу кода, будет в журнале ошибка примерно так:" .... timeout in expert ...."

если в журнал терминал не выводит ошибки, значит инициализация прошла успешно, а саму ф-цию start() проверить легко - напишите в первой строчке start() : Print("новый тик");


Так и сделал((

int start()
  {
  Print("start");
  
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/

  


   return(0);
  }

Да, покачиваю много информации, расчетов тоже много, эксперементирую с тиками...

Расчет занимает 2 - 3 минуты, МТ "не виснет", все работает типично, сообщения от Print() и Alert выводятся на экран, а дальше все))

Посмотрел все сообщения от МТ, в/у ошибок не нашел...

Please assist.

 
BBSL:

Расчет занимает 2 - 3 минуты, МТ "не виснет", все работает типично, сообщения от Print() и Alert выводятся на экран, а дальше все))

если Print() выводится, ТО однозначно start() у Вас работает, правда смущает Ваше утверждение, что расчет идет 2-3 минуты -при такой загрузке терминала необходимо прерывать расчеты ф-цией sleep() иначе терминал будет виснуть точно

ввиду того, что в МТ4 нет отладчика, вставляйте в сомнительные участки кода Print() и отлавливайте участки кода и условия которые выполнились или нет, иначе никак

 
Мне надо зафиксировать факт срабатывания открытых ордеров по TakeProfit или StopLoss, причем сами значения TakeProfit и StopLoss меня не интерисуют.
 
Jaguar1974:

Как проверить что ордер сработал по TakeProfit или StopLoss? Спасибо за ответ!

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
Ознакомьтесь с кодом обеих функций и слейте их в одну для оптимизации по скорости исполнения и под конкретно ваши задачи...
 
eddy:
Sayod, ты на каком тф торговал и с какими параметрами?


А какя разница или ты уже сделал все наоборот и хочешь потестить?

Торговал по умолчанию на h1,

Pip step - 30

LotExpo - 1.59 

хотя думаю параметры не имеют особого значения если реализовать идею, предполагаю советник будет полозен с любыми параметрами, ИМХО.

 
Jaguar1974:
Мне надо зафиксировать факт срабатывания открытых ордеров по TakeProfit или StopLoss, причем сами значения TakeProfit и StopLoss меня не интерисуют.

если фиксировать просто факт срабатывания, тогда можно запоминать количество ордеров на предыдущем тике и сравнивать на следующем тике - если количество ордеров изменилось, значит ....
 
kiimar:
Терминал закрыл убыточный ордер с комментарием: "so:19,5%/28.4/145.8". Что сие означает?
Это означает, что при достижении уровня свободной маржи в 19.5% у вас произошел stopout и убыточная сделка была закрыта согласно регламенту.
 
IgorM:

если Print() выводится, ТО однозначно start() у Вас работает, правда смущает Ваше утверждение, что расчет идет 2-3 минуты -при такой загрузке терминала необходимо прерывать расчеты ф-цией sleep() иначе терминал будет виснуть точно

ввиду того, что в МТ4 нет отладчика, вставляйте в сомнительные участки кода Print() и отлавливайте участки кода и условия которые выполнились или нет, иначе никак


Простите, я не так выразился, Print работет только в ините. В start я попасть не могу))

Да, в колнце каждой функции, я вставляю print с сообщением о ней, чтобы проверить, все ли ок. И все сообщения (все функции) отработали на 100 % до конца инита, в старт перейти не могу!

Заранее спасибо за ответ!

 
Спасибо, мне еще многому надо поучиться.
artmedia70:
Ознакомьтесь с кодом обеих функций и слейте их в одну для оптимизации по скорости исполнения и под конкретно ваши задачи...
 
BBSL:


Простите, я не так выразился, Print работет только в ините. В start я попасть не могу))

Да, в колнце каждой функции, я вставляю print с сообщением о ней, чтобы проверить, все ли ок. И все сообщения (все функции) отработали на 100 % до конца инита, в старт перейти не могу!

Заранее спасибо за ответ!

Так у вас же откровенно нет тика в терминале. Т.е. либо он не подключен, либо вы на оффлайновом графике работаете, либо проверьте в ините IsExpertEnabled() и если не разрешено, то включите советники.