Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2286

 
Maxim Kuznetsov #:

помнится(хотя память может и изменить) было где-то property или свойство советника отвечающее за "отображать/нет индикаторы советника по завершению"..

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

у вас выходит что в тестере советник-то работу завершил, но хендл индикатора использует ещё и сам тестер для отображения результатов и DeInit индикатора не вызывается.

MQL4 HideTestIndicators

MQL5 TesterHideIndicators

 
Alexey Viktorov #:

MQL4 HideTestIndicators

MQL5 TesterHideIndicators

К сожалению проблему отрабатывания ОнДеИнит не решает. 

 
Alexey Viktorov #:

MQL4 HideTestIndicators

MQL5 TesterHideIndicators

тогда вопрошающему надо:

1.ими воспользоваться 

2. в iCustom имя индикатора передавать не-конст строкой (просто string и совершить с ней какие-то действия, чтобы оптимизатор до константы не сократил)

3. в OnDeinit советника добавить IndicatorRelease

должно срабатывать..но будут проблемы с переносом на VPS

иначе делать закат солнца вручную - вводить дополнительный признак-флаг. Глобальную переменную или ещё один файл. Взводит индикатор, сбрасывает(удаляет) советник. Индикатор будет проверять "нсть флаг, работаем", нет флага - закрываем файл

 
Maxim Kuznetsov #:

тогда вопрошающему надо:

1.ими воспользоваться 

2. в iCustom имя индикатора передавать не-конст строкой (просто string и совершить с ней какие-то действия, чтобы оптимизатор до константы не сократил)

3. в OnDeinit советника добавить IndicatorRelease

должно срабатывать..но будут проблемы с переносом на VPS

иначе делать закат солнца вручную - вводить дополнительный признак-флаг. Глобальную переменную или ещё один файл. Взводит индикатор, сбрасывает(удаляет) советник. Индикатор будет проверять "нсть флаг, работаем", нет флага - закрываем файл

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

 
Valeriy Yastremskiy #:

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

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

в обычных условиях OnDeinit индикаторов нормально срабатывает

 
Valeriy Yastremskiy #:

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

IndicatorRelease уменьшает счётчик ссылок у хендла индикатора и когда оный счётчик=0 удаляет индикатор, вызывается его OnDeinit.

И в тестере он нормально срабатывает, просто в тестере сам тестер ссылается на индикатор и счётчик ссылок=2; Вызывается IndicatorRelease, счётчик уменьшается но всё равно 1, нет DeInit.

И дважды IndicatorRelase нельзя делать - нарушение дисчиплины использования и может что-то порушится..

Поэтому механизм "закрыть файл в OnDeinit" индикатора в тестере не работает. Нужен другой способ донести до индикатора "файл пора закрывать". Значит GlobalVars, файл-флаги, удаление файла из советника а в индикате только проверять есть/нет

 
Maxim Kuznetsov #:

IndicatorRelease уменьшает счётчик ссылок у хендла индикатора и когда оный счётчик=0 удаляет индикатор, вызывается его OnDeinit.

И в тестере он нормально срабатывает, просто в тестере сам тестер ссылается на индикатор и счётчик ссылок=2; Вызывается IndicatorRelease, счётчик уменьшается но всё равно 1, нет DeInit.

И дважды IndicatorRelase нельзя делать - нарушение дисчиплины использования и может что-то порушится..

Поэтому механизм "закрыть файл в OnDeinit" индикатора в тестере не работает. Нужен другой способ донести до индикатора "файл пора закрывать". Значит GlobalVars, файл-флаги, удаление файла из советника а в индикате только проверять есть/нет

Да так то, по условию, если в тестере, закрываем файлы в деинит советника. Имена файлов не секрет же. Костыльненько)
 
Valeriy Yastremskiy #:

К сожалению проблему отрабатывания ОнДеИнит не решает. 

Ответ был не к этой проблеме.

 
стандартный период конвертер так и не работает для МТ4
 

Проверьте пожалуйста код. Не закрывает сделку спустя баров. В отчете, при тестировании, в МТ4 пишет "OrderClose error 4108" и "unknown ticket 44 for OrderClose function". Порекомендуйте пожалуйста, как сделать, чтобы сделка закрывалась скажем через 25 баров.

//+------------------------------------------------------------------+

//| 

//| 

//| 

//+------------------------------------------------------------------+

#property copyright "..."

#property link      "..."




extern int         takeprofit           = 5;

extern int         stoploss             = 15;


extern int             slippage             = 3;

extern int            Magic                = 7777777;

extern double  Lot                  = 0.1;


extern int TimeStart = 1;             // Время начала работы советника

extern int TimeEnd = 23;               // Время окончания работы советника


extern int shift = 0;

   

input int    MovingPeriod0  =13;

input int    MovingPeriod1  =21;

input int    MovingPeriod2  =200;


input int    MovingShift0   =0;

input int    MovingShift1   =0;

input int    MovingShift2   =0;

//-----------------


//--------------------------------------------------------------------

int OnInit()

{

if (Digits == 3 || Digits == 5)

{

   takeprofit*=10;

   stoploss*=10;

   slippage*=10;

}

return (INIT_SUCCEEDED);

}

void OnTick()

{


   for (int i=0; i<OrdersTotal(); i++)

        if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

         if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber()) return;

   

    double ma0=iMA(NULL,0,MovingPeriod0,MovingShift0,MODE_SMA,PRICE_CLOSE,0);

    double ma1=iMA(NULL,0,MovingPeriod1,MovingShift1,MODE_SMA,PRICE_CLOSE,0);

    double ma2=iMA(NULL,0,MovingPeriod2,MovingShift2,MODE_SMA,PRICE_CLOSE,0);

      if (

   //Условия 

    Hour() < TimeEnd && Hour()>=TimeStart

   &&ma1>ma2

   && ma0>ma1

        )

 

   {

      OrderSend(Symbol(),OP_BUY, Lot, Ask, slippage, NormalizeDouble(Ask - stoploss*Point, Digits), NormalizeDouble(Bid + takeprofit*Point, Digits),NULL, Magic,0, Red);

      RefreshRates();

  if (TimeCurrent()>OrderOpenTime()+25*60) OrderClose(OrderTicket(),Lot,Bid,slippage,Green);

    }

      if (

     //Условия 

  Hour() < TimeEnd && Hour()>=TimeStart

   &&ma1<ma2

   && ma0<ma1

     )

         {     

    OrderSend(Symbol(),OP_SELL, Lot, Bid, slippage, NormalizeDouble(Ask + stoploss*Point, Digits),NormalizeDouble(Bid - takeprofit*Point, Digits),NULL, Magic,0, Red);

     RefreshRates();

  if (TimeCurrent()>OrderOpenTime()+25*60) OrderClose(OrderTicket(),Lot,Bid,slippage,Green);

}

   



}