Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2286
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
помнится(хотя память может и изменить) было где-то property или свойство советника отвечающее за "отображать/нет индикаторы советника по завершению"..
что-то беглый поиск по справке показывает что нет такого, возможно в процессе "делаем терминал лучше", получилось как всегда :-)
у вас выходит что в тестере советник-то работу завершил, но хендл индикатора использует ещё и сам тестер для отображения результатов и DeInit индикатора не вызывается.
MQL4 HideTestIndicators
MQL5 TesterHideIndicators
MQL4 HideTestIndicators
MQL5 TesterHideIndicators
К сожалению проблему отрабатывания ОнДеИнит не решает.
MQL4 HideTestIndicators
MQL5 TesterHideIndicators
тогда вопрошающему надо:
1.ими воспользоваться
2. в iCustom имя индикатора передавать не-конст строкой (просто string и совершить с ней какие-то действия, чтобы оптимизатор до константы не сократил)
3. в OnDeinit советника добавить IndicatorRelease
должно срабатывать..но будут проблемы с переносом на VPS
иначе делать закат солнца вручную - вводить дополнительный признак-флаг. Глобальную переменную или ещё один файл. Взводит индикатор, сбрасывает(удаляет) советник. Индикатор будет проверять "нсть флаг, работаем", нет флага - закрываем файл
тогда вопрошающему надо:
1.ими воспользоваться
2. в iCustom имя индикатора передавать не-конст строкой (просто string и совершить с ней какие-то действия, чтобы оптимизатор до константы не сократил)
3. в OnDeinit советника добавить IndicatorRelease
должно срабатывать..но будут проблемы с переносом на VPS
иначе делать закат солнца вручную - вводить дополнительный признак-флаг. Глобальную переменную или ещё один файл. Взводит индикатор, сбрасывает(удаляет) советник. Индикатор будет проверять "нсть флаг, работаем", нет флага - закрываем файл
Повторюсь, на демо счете и реале все работает, и когда советник убирается IndicatorRelease отрабатывает как положено, индикатор заканчивается полностью с ОнДеИнит. А вот тестер не хочет IndicatorRelease в советнике отрабатывать.
Повторюсь, на демо счете и реале все работает, и когда советник убирается IndicatorRelease отрабатывает как положено, индикатор заканчивается полностью с ОнДеИнит. А вот тестер не хочет IndicatorRelease в советнике отрабатывать.
я про тестер и говорю...упомянутый вариант и закат солнца , исключительно для тестера, чтобы там работало.
в обычных условиях OnDeinit индикаторов нормально срабатывает
Повторюсь, на демо счете и реале все работает, и когда советник убирается IndicatorRelease отрабатывает как положено, индикатор заканчивается полностью с ОнДеИнит. А вот тестер не хочет IndicatorRelease в советнике отрабатывать.
IndicatorRelease уменьшает счётчик ссылок у хендла индикатора и когда оный счётчик=0 удаляет индикатор, вызывается его OnDeinit.
И в тестере он нормально срабатывает, просто в тестере сам тестер ссылается на индикатор и счётчик ссылок=2; Вызывается IndicatorRelease, счётчик уменьшается но всё равно 1, нет DeInit.
И дважды IndicatorRelase нельзя делать - нарушение дисчиплины использования и может что-то порушится..
Поэтому механизм "закрыть файл в OnDeinit" индикатора в тестере не работает. Нужен другой способ донести до индикатора "файл пора закрывать". Значит GlobalVars, файл-флаги, удаление файла из советника а в индикате только проверять есть/нет
IndicatorRelease уменьшает счётчик ссылок у хендла индикатора и когда оный счётчик=0 удаляет индикатор, вызывается его OnDeinit.
И в тестере он нормально срабатывает, просто в тестере сам тестер ссылается на индикатор и счётчик ссылок=2; Вызывается IndicatorRelease, счётчик уменьшается но всё равно 1, нет DeInit.
И дважды IndicatorRelase нельзя делать - нарушение дисчиплины использования и может что-то порушится..
Поэтому механизм "закрыть файл в OnDeinit" индикатора в тестере не работает. Нужен другой способ донести до индикатора "файл пора закрывать". Значит GlobalVars, файл-флаги, удаление файла из советника а в индикате только проверять есть/нет
К сожалению проблему отрабатывания ОнДеИнит не решает.
Ответ был не к этой проблеме.
Проверьте пожалуйста код. Не закрывает сделку спустя баров. В отчете, при тестировании, в МТ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);
}
}