У меня следующий вопрос. В init() в индюке располагается блок, который вешает терминал (его-то я и хочу в dll перенести). Лог посмотреть естественно не получается - терминал закрывается только через Ctrl+Alt+Delete. Распринтовка с целью трассировки (и чтобы замерить время прохождения входящих в блок циклов) не помогает - принт ничего не пишет, лог даже не создаётся. Пытаюсь через FileOpen/FileWrite с той же целью - файл только создаётся (0 Кб), и тишина. Следом после FileOpen ставлю FileWrite, на следующей же строке - никакого эффекта. В какую сторону копать?
Попробуйте использовать это. Если не поможет, то для поиска ошибок, можно временно упомянутый блок инициализации вынести в старт для одноразового запуска через флаг и попробовать "вытянуть" из него логи.
У меня следующий вопрос. В init() в индюке располагается блок, который вешает терминал (его-то я и хочу в dll перенести). Лог посмотреть естественно не получается - терминал закрывается только через Ctrl+Alt+Delete. Распринтовка с целью трассировки (и чтобы замерить время прохождения входящих в блок циклов) не помогает - принт ничего не пишет, лог даже не создаётся. Пытаюсь через FileOpen/FileWrite с той же целью - файл только создаётся (0 Кб), и тишина. Следом после FileOpen ставлю FileWrite, на следующей же строке - никакого эффекта. В какую сторону копать?
TarasBY: Попробуйте использовать это. Если не поможет, то для поиска ошибок, можно временно упомянутый блок инициализации вынести в старт для одноразового запуска через флаг и попробовать "вытянуть" из него логи.
Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Стиль кода не располагает. Пробелов нет, скобки на разных уровнях, подряд в строку несколько операций, ни одного комментария... Кошмар! :-))
Помогите решить проблему с MT4. При вызове пользовательского индикатора не отображаются его входные параметры и цвета в окне (быстро промаргивают и исчезают). Как это устранить? MT4 переставлял, не помогло.
Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Согласен с Вадимом - код трудночитаем. Попробуйте разложить этот код на функциональные блоки, в каждом из которых выведите принт или запись в файл. И запустите в структуре, "притормаживающей" исполнение кода, например, так:
Есть у Кима 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);
}
Есть у Кима 2 очень схожие функции "флаг закрытия последней позы по СТОПУ", а другой по ТЕЙКу.
вот код
как видите они крайне однотипны.
Но почему-то у меня работает только закрытие по СТОПУ.
открываю позу руками, ставлю короткий ТЕЙК. он срабатывает - ено советник не печатает ЕДИНИЦУ, но продолжает печатать НОЛЬ.
А вот закрытие по СТОПУ печатает правильно : если стоп =1, если не стоп =0....
помогите разобраться плиз....
Посмотрите внимательно какую цену имел стоп приказ в открытой позиции и по какой цене она именно закрыта. У Игоря в функции сравниваются именно эти цены, но не учитывается проскальзывание.
У меня следующий вопрос. В init() в индюке располагается блок, который вешает терминал (его-то я и хочу в dll перенести). Лог посмотреть естественно не получается - терминал закрывается только через Ctrl+Alt+Delete. Распринтовка с целью трассировки (и чтобы замерить время прохождения входящих в блок циклов) не помогает - принт ничего не пишет, лог даже не создаётся. Пытаюсь через FileOpen/FileWrite с той же целью - файл только создаётся (0 Кб), и тишина. Следом после FileOpen ставлю FileWrite, на следующей же строке - никакого эффекта. В какую сторону копать?
Взял да тему закрыл... Нехороший человек.
У меня следующий вопрос. В init() в индюке располагается блок, который вешает терминал (его-то я и хочу в dll перенести). Лог посмотреть естественно не получается - терминал закрывается только через Ctrl+Alt+Delete. Распринтовка с целью трассировки (и чтобы замерить время прохождения входящих в блок циклов) не помогает - принт ничего не пишет, лог даже не создаётся. Пытаюсь через FileOpen/FileWrite с той же целью - файл только создаётся (0 Кб), и тишина. Следом после FileOpen ставлю FileWrite, на следующей же строке - никакого эффекта. В какую сторону копать?
Гляньте, там в атрибутах hidden не стоит?
не стоит.
Попробуйте использовать это. Если не поможет, то для поиска ошибок, можно временно упомянутый блок инициализации вынести в старт для одноразового запуска через флаг и попробовать "вытянуть" из него логи.
Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Стиль кода не располагает. Пробелов нет, скобки на разных уровнях, подряд в строку несколько операций, ни одного комментария... Кошмар! :-))
Сами-то в этом разбираетесь?
Взял да тему закрыл... Нехороший человек.
= :)
Не работает ни одноразовый запуск в старте, ни в ините, - ни Print, ни FileWrite. Прикрепляю этот кусок кода (не вижу другого выхода просто), тут не выкладываю, потому что там портянка. Я там убрал все объявления буферов индикаторными и расписал все вызовы встроенных технических индикаторов, готовился к переносу в dll. Насчёт переполнения оперативки массивами уже думал, так подсчитал, у меня самый большой массив плюс все остальные выходит пятьдесят с копейками метров. Не, ну если не принтует даже на самой первой строчке, при входе в блок... - вот что меня смущает. Прикреплённый вариант правда с FileWrite.
Согласен с Вадимом - код трудночитаем. Попробуйте разложить этот код на функциональные блоки, в каждом из которых выведите принт или запись в файл. И запустите в структуре, "притормаживающей" исполнение кода, например, так:
Задержка в исполнении следующего блока в 1 сек. - терминалу должно хватить этого времени, чтобы отпечатать лог.
Есть у Кима 2 очень схожие функции "флаг закрытия последней позы по СТОПУ", а другой по ТЕЙКу.
вот код
как видите они крайне однотипны.
Но почему-то у меня работает только закрытие по СТОПУ.
открываю позу руками, ставлю короткий ТЕЙК. он срабатывает - но советник не печатает ЕДИНИЦУ, но продолжает печатать НОЛЬ.
А вот закрытие по СТОПУ печатает правильно : если стоп =1, если не стоп =0....
помогите разобраться плиз....
Есть у Кима 2 очень схожие функции "флаг закрытия последней позы по СТОПУ", а другой по ТЕЙКу.
вот код
как видите они крайне однотипны.
Но почему-то у меня работает только закрытие по СТОПУ.
открываю позу руками, ставлю короткий ТЕЙК. он срабатывает - ено советник не печатает ЕДИНИЦУ, но продолжает печатать НОЛЬ.
А вот закрытие по СТОПУ печатает правильно : если стоп =1, если не стоп =0....
помогите разобраться плиз....