artmedia70: Именно. Глобальная переменная Reason получает значение, но получает она его не в deinit(), а в init(), чтобы можно было видеть при запуске init() причину последней деинициализации и, исходя из значения, выполнять то или иное действие. Но не работает как положено.
Вам сказали, как сделать. Именно в deinit() мы узнаем причину последней деинициализации и передаем ее через переменную, объявленную на глобальном уровне. В init() проверяете значение переменной и узнаете причину последней деинициализации. Это работает!.
PS Видимо, не все осознают, что init()/deinit() не изменяют значения переменных, объявленных на глобальном уровне, если это явно не указано в операторах внутри функций.
Вообще-то в init() лучше, ордера не закрывать. Там MarketInfo() часто работает не так, как ожидалось.
int DeinitReason = 0; // определяем переменную на глобальном уровне
...
int init ()
{
...
if ( DeinitReason == 3) // если смена таймфрейма
...
}
int deinit()
{
//----
DeinitReason = UninitializeReason( );
Print("DeinitReason ",DeinitReason);
//----return(0);
}
Mislaid: Вам сказали, как сделать. Именно в deinit() мы узнаем причину последней деинициализации и передаем ее через переменную, объявленную на глобальном уровне. В init() проверяете значение переменной и узнаете причину последней деинициализации. Это работает!.
Понял, что у Артёма проблема именно с переключением с ТФ М5. Там ошибка. Надо бы проверить так ли это. Может это баг МТ4.
Даже не представляю, что б функцию гоняли по циклу...
Да пожалуйста :
for(i=OrdersTotal()-1;i>=0;i--){
Print(GetOrderInfo(i,OrderMagic,.....));// вызов пользовательской функции
}
for(i=0;i<OrdersTotal();i++){/// вызов функции "ордерс тотал" на каждой итерации
}
Задался я вопросом написать функцию. Суть такая, что необходимо что, при откате N-свечей в в определённую строну, просчитывать количество свечей. НО. Для это есть несколько условий, а точнее будет со временем их перечень.
Скажем так, тренд, например, направлен вниз,... пошёл откат вверх. Я хочу чтоб если прошло 5 свечей вверх, и каждая свеча была бычья, и, например, размер каждой свечи был больше заданного i_sizeOfCurrBar, и ещё какие-н. условия, то выводим количество баров непрерывно бычьих, и возвращаем какой-то результат из функции.
Как это лучше написать? На данный момент я начал писать, и понимаю что тут нужно прогонять через цикл по бара, и как-то ограничить просмотр в глубину истории не по фиксированному количеству баров, а по барам, с теми параметрами, которые нас интересуют на условиям.
Вот что у меня, есть:
int LastCandlesType()
{
bool up, // Свеча направлена вверх
dn; // Свеча направлена внизint cnt; // Счётчик идущих друг за другом бычьих свечейfor (int i=Bars-1; i>=Bars-6; i--)
{
if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point)// Пропускаем все бары, размера меньше заданного внешним параметром.continue;
if (Close[i] > Open[i]) //
up = true;
cnt++;
}
if (cnt == 5)
return (BULL_CANDLES);
}
На данный момент идёт просто перебор от предпоследнего бара, то бара с индексом 6, т.е. 5 баров в подряд. Но мне нужно, чтоб эксперт просчитывал только бары, которые вляются бычьими, а не все в подряд. Как это будет адекватнее реализовать?
По размеру я вроде как отфильтровал верно.
Ну а когда всё будет уже прописано, снизу уже счётчик будет просчитывать количество непрерывных баров с nht,etvsvb параметрами и если таких баров достаточно, то возвращается какое-н. значение функции.
Вам сказали, как сделать. Именно в deinit() мы узнаем причину последней деинициализации и передаем ее через переменную, объявленную на глобальном уровне. В init() проверяете значение переменной и узнаете причину последней деинициализации. Это работает!.
PS Видимо, не все осознают, что init()/deinit() не изменяют значения переменных, объявленных на глобальном уровне, если это явно не указано в операторах внутри функций.
Вообще-то в init() лучше, ордера не закрывать. Там MarketInfo() часто работает не так, как ожидалось.
А где вы видите, что я в init() позиции закрываю? Я задал один вопрос о запросе об удалении, а вот где я их удаляю - я об этом не говорил и тем более не спрашивал. Как думаете - почему?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Именно. Глобальная переменная Reason получает значение, но получает она его не в deinit(), а в init(), чтобы можно было видеть при запуске init() причину последней деинициализации и, исходя из значения, выполнять то или иное действие. Но не работает как положено.
Вам сказали, как сделать. Именно в deinit() мы узнаем причину последней деинициализации и передаем ее через переменную, объявленную на глобальном уровне. В init() проверяете значение переменной и узнаете причину последней деинициализации. Это работает!.
PS Видимо, не все осознают, что init()/deinit() не изменяют значения переменных, объявленных на глобальном уровне, если это явно не указано в операторах внутри функций.
Вообще-то в init() лучше, ордера не закрывать. Там MarketInfo() часто работает не так, как ожидалось.
Вам сказали, как сделать. Именно в deinit() мы узнаем причину последней деинициализации и передаем ее через переменную, объявленную на глобальном уровне. В init() проверяете значение переменной и узнаете причину последней деинициализации. Это работает!.
Это предположил, что Вы будете делать с этой функцией. Такой функцией обычно бегают по истории.
Даже не представляю, что б функцию гоняли по циклу...
Даже не представляю, что б функцию гоняли по циклу...
Да пожалуйста :
Понял, что у Артёма проблема именно с переключением с ТФ М5. Там ошибка. Надо бы проверить так ли это. Может это баг МТ4.
Нет это не баг. Вот советник. Менял таймфреймы с M1до H1
19:20:02 111 CADJPY,M15: initialized19:20:09 111 CADJPY,M15: DeinitReason 3
19:20:09 111 CADJPY,M15: deinitialized
19:20:09 111 CADJPY,M15: uninit reason 3
19:20:09 Supertrend[1] CADJPY,M15: deinitialized
19:20:09 Supertrend[1] CADJPY,M15: uninit reason 3
19:20:09 HLC CADJPY,M15: deinitialized
19:20:09 HLC CADJPY,M15: uninit reason 3
19:20:09 AMA optimized1 CADJPY,M15: deinitialized
19:20:09 AMA optimized1 CADJPY,M15: uninit reason 3
19:20:09 AMA optimized1 CADJPY,M15: deinitialized
19:20:09 AMA optimized1 CADJPY,M15: uninit reason 3
19:20:09 Supertrend[1] CADJPY,H1: initialized
19:20:09 HLC CADJPY,H1: initialized
19:20:09 AMA optimized1 CADJPY,H1: initialized
19:20:09 AMA optimized1 CADJPY,H1: initialized
19:20:09 111 CADJPY,H1: initialized
Нет это не баг. Вот советник. Менял таймфреймы с M1до H1
Ну и хорошо! А то у меня тоже сильно всё завязано на причины деинициализации.
Вообще-то в init() лучше, ордера не закрывать. Там MarketInfo() часто работает не так, как ожидалось.
Даже не представляю, что б функцию гоняли по циклу...
Ну и хорошо! А то у меня тоже сильно всё завязано на причины деинициализации.
Да. Нельзя. В справке написано. Обычное дело.Вот окончательный вариант для проверки. Предыдущий был не очень удачным, поскольку init()/deinit() иногда не дружат с print()
Задался я вопросом написать функцию. Суть такая, что необходимо что, при откате N-свечей в в определённую строну, просчитывать количество свечей. НО. Для это есть несколько условий, а точнее будет со временем их перечень.
Скажем так, тренд, например, направлен вниз,... пошёл откат вверх. Я хочу чтоб если прошло 5 свечей вверх, и каждая свеча была бычья, и, например, размер каждой свечи был больше заданного i_sizeOfCurrBar, и ещё какие-н. условия, то выводим количество баров непрерывно бычьих, и возвращаем какой-то результат из функции.
Как это лучше написать? На данный момент я начал писать, и понимаю что тут нужно прогонять через цикл по бара, и как-то ограничить просмотр в глубину истории не по фиксированному количеству баров, а по барам, с теми параметрами, которые нас интересуют на условиям.
Вот что у меня, есть:
На данный момент идёт просто перебор от предпоследнего бара, то бара с индексом 6, т.е. 5 баров в подряд. Но мне нужно, чтоб эксперт просчитывал только бары, которые вляются бычьими, а не все в подряд. Как это будет адекватнее реализовать?
По размеру я вроде как отфильтровал верно.
Ну а когда всё будет уже прописано, снизу уже счётчик будет просчитывать количество непрерывных баров с nht,etvsvb параметрами и если таких баров достаточно, то возвращается какое-н. значение функции.
Вам сказали, как сделать. Именно в deinit() мы узнаем причину последней деинициализации и передаем ее через переменную, объявленную на глобальном уровне. В init() проверяете значение переменной и узнаете причину последней деинициализации. Это работает!.
PS Видимо, не все осознают, что init()/deinit() не изменяют значения переменных, объявленных на глобальном уровне, если это явно не указано в операторах внутри функций.
Вообще-то в init() лучше, ордера не закрывать. Там MarketInfo() часто работает не так, как ожидалось.