- Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXVII): Работа с торговыми запросами - выставление отложенных ордеров"
- Ошибки, баги, вопросы
- Использование глобальных переменных
Глобальные переменные терминала хранятся в файле.
Кто нибудь знает как записать текущее положение переменных в файл при обрыве связи и прочесть их оттуда после возобновления? Оч нужно для написания эксперта.
Если советник не закцикленный, то и делать ничего не надо. Он же работает по приходу нового тика. Если зацикленный, то может определить есть или нет связь. И выставить флаг обрыва связи, и сохранить переменные.
При восстановлении связи проверить флаг и при необходимости считать переменные. Только одна проблема есть. Если связь отсутвовала долго, то нужно делать перерасчет. Данные обновятся (произойдет подгрузка истории)
Срез параметров в глобальные переменные нужно делать ВСЕГДА!
Нет никакой гарантии что желаемая вами установка/удаление/модификация ордера - выполниптся на первом тике и правильно. Или стоплос подвинется куда надо. Поэтому Вы должны организовывать работу таким образом, чтоб эксп на каждом тике знал откуда он пришел и куда ему идти дальше. Иначе будут ошибки связанные с поднятой темой. Даже в тестере - удаление ордеров происходит не на одном тике... Поэтому обязательно - организация "Семафоров", чтоб давать приказы на несколько тиков, пока они не исполнятся
А если сюда ещё добавить перезагрузку терминала и винды... в любом случае без глобальных параметров не обойтись. И слава Богу, что в МТ5 появилась функция GlobalVariableFlush().
В конечном итоге все зависит от логики работы эксперта .... когда-то есть необходимость сохранять переменные, а когда-то нецелесообразно, хотя бы из-за несопостовимости объема защитного кода и грозящих последствий.... но естественно, эту логику необходимо хорошо знать :).....
А вообще человек вполне конкретный вопрос задал: как записать параметры в файл. Попробуйте воспользоваться такой конструкцией:
//+------------------------------------------------------------------+ //| чтение из файла времени, цены и лота цикла после перезагрузки или сбоя //+------------------------------------------------------------------+ void _Read_TPL_Cycle() { string FileName=nameEA+"_"+Symbol()+Period()+"_Time_Price_Lot.csv"; int handle=FileOpen(FileName,FILE_READ|FILE_CSV); if(handle<1) return(0); timecycle = StrToInteger(FileReadString(handle)); pricecycle = StrToDouble(FileReadString(handle)); LotCycle = StrToDouble(FileReadString(handle)); FileClose(handle); return(0); } //+------------------------------------------------------------------+ //| запись в файл времени, цены и лота цикла, на случай перезагрузки или сбоя //+------------------------------------------------------------------+ void _Write_TPL_Cycle() { string FileName=nameEA+"_"+Symbol()+Period()+"_Time_Price_Lot.csv"; int handle=FileOpen(FileName,FILE_WRITE|FILE_CSV); if(handle<1) return(0); FileWrite(handle,timecycle,pricecycle,LotCycle); FileClose(handle); return(0); }Только от обрывов связи вас это не спасет. Нужно либо зацикливать эксперта, либо воспользоваться, как вам уже советовали, глобальными переменными... пишите в них время последнего тика и анализируйте на разницу..... "надолго" - это расплывчатое понятие :)
Не только интернет может пропасть. Электроэнергия тоже пропадает, иногда. Вирусы и трояны поражают компьютер.
Мой вариант выхода - дополнительный компьютер (можно ноутбук) + ИБП + дополнительный канал интернета
(у меня он стоит дороже основного, но пользуюсь я им очень редко) + хороший антивирусник.
Но, это для тех, кто уже занимается форексом более серьёзно. Хотя, для этих людей пропадание связи обычно не
является проблемой.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования