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

 
gyfto:


У меня следующий вопрос. В init() в индюке располагается блок, который вешает терминал (его-то я и хочу в dll перенести). Лог посмотреть естественно не получается - терминал закрывается только через Ctrl+Alt+Delete. Распринтовка с целью трассировки (и чтобы замерить время прохождения входящих в блок циклов) не помогает - принт ничего не пишет, лог даже не создаётся. Пытаюсь через FileOpen/FileWrite с той же целью - файл только создаётся (0 Кб), и тишина. Следом после FileOpen ставлю FileWrite, на следующей же строке - никакого эффекта. В какую сторону копать?

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


Взял да тему закрыл... Нехороший человек.

У меня следующий вопрос. В init() в индюке располагается блок, который вешает терминал (его-то я и хочу в dll перенести). Лог посмотреть естественно не получается - терминал закрывается только через Ctrl+Alt+Delete. Распринтовка с целью трассировки (и чтобы замерить время прохождения входящих в блок циклов) не помогает - принт ничего не пишет, лог даже не создаётся. Пытаюсь через FileOpen/FileWrite с той же целью - файл только создаётся (0 Кб), и тишина. Следом после FileOpen ставлю FileWrite, на следующей же строке - никакого эффекта. В какую сторону копать?


Гляньте, там в атрибутах hidden не стоит? 


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


Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Файлы:
eflfcaj.mq4  10 kb
 
gyfto:

Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.

Стиль кода не располагает. Пробелов нет, скобки на разных уровнях, подряд в строку несколько операций, ни одного комментария... Кошмар! :-))

Сами-то в этом разбираетесь?

 
Помогите решить проблему с MT4. При вызове пользовательского индикатора не отображаются его входные параметры и цвета в окне (быстро промаргивают и исчезают). Как это устранить? MT4 переставлял, не помогло.
 
gyfto:


Взял да тему закрыл... Нехороший человек.


= :)
 
gyfto:

Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.

Согласен с Вадимом - код трудночитаем. Попробуйте разложить этот код на функциональные блоки, в каждом из которых выведите принт или запись в файл. И запустите в структуре, "притормаживающей" исполнение кода, например, так:

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

Задержка в исполнении следующего блока в 1 сек. - терминалу должно хватить этого времени, чтобы отпечатать лог.

 
 

Есть у Кима 2 очень схожие функции "флаг закрытия последней позы по СТОПУ", а другой по ТЕЙКу.

вот код

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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(OrderSymbol(), 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(OrderSymbol(), 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);
}

как видите они крайне однотипны.

Но почему-то у меня работает только закрытие по СТОПУ.

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

 открываю позу руками, ставлю короткий ТЕЙК. он срабатывает - но советник не печатает ЕДИНИЦУ, но продолжает печатать НОЛЬ.

 

А вот закрытие по СТОПУ печатает правильно : если стоп =1, если не стоп =0....

помогите разобраться плиз.... 

 
lottamer:

Есть у Кима 2 очень схожие функции "флаг закрытия последней позы по СТОПУ", а другой по ТЕЙКу.

вот код

как видите они крайне однотипны.

Но почему-то у меня работает только закрытие по СТОПУ.

 открываю позу руками, ставлю короткий ТЕЙК. он срабатывает - ено советник не печатает ЕДИНИЦУ, но продолжает печатать НОЛЬ.

 

А вот закрытие по СТОПУ печатает правильно : если стоп =1, если не стоп =0....

помогите разобраться плиз.... 

 

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