Помогите плиз запомнить значение ACCOUNT_EQUITY
Т.е сова запоминает значение ACCOUNT_EQUITY к примеру в час ночи
и если к обеду текущее ACCOUNT_EQUITY изменилось на энное значение то сова прекращает торговлю
Проще всего на мой взгляд использовать глобальную переменную для хранения значения.
Сюда легко запомнить, и так-же просто вытащить и сравнить.
Устанавливает новое значение глобальной переменной |
Запрашивает значение глобальной переменной |
потом делаете проверку на изменение, и если нужно - перезаписываете.
Можно и просту переменную использовать.
bool chaked; double eqiu; bool stop_trade; ... if(Hour()==12 && equi!=AccountEquity()) { stop_trade=true; chaked=false; } if(Hour()==1 && !chaked) { equi=AccountEquity(); chaked=true; }
Благодарю за информацию
Буду изучать и разбираться
Можно и просту переменную использовать.
Такая переменная при изменении тайм-фрейма или при перезапуске терминала очищается, а это не есть хорошо.
Предположим, перемигнул свет, терминал перезапустился, изменили фрейм и что? все - нет больше значения в переменной, там уже новосозданное.
Вот набросал решение которое будет работать при любых условиях
//+------------------------------------------------------------------+ //| файл.mq4 | //+------------------------------------------------------------------+ #property strict extern string starthour = "01:00"; // начало работы extern int ProfitNoTrade = 10; // профит в единицах депозита, при превышении которого сегодня не работаем string trade_mode; double ReadAccFreeMarg=0,WriteAccFreeMarg=0; bool Write=true; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { // Определяем на каком счете запущен эксперт ENUM_ACCOUNT_TRADE_MODE account_type=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE); switch(account_type) { case ACCOUNT_TRADE_MODE_DEMO: trade_mode="demo"; break; case ACCOUNT_TRADE_MODE_CONTEST: trade_mode="comp"; break; default: trade_mode="real"; break; } // Если нет глобальной переменной - создаем if (!GlobalVariableCheck(StringConcatenate(Symbol(),"_OFM_test"))) { GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_test"), AccountFreeMargin()); } // Если нет глобальной переменной - создаем if (!GlobalVariableCheck(StringConcatenate(Symbol(),"_OFM_",trade_mode))) { GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_",trade_mode), AccountFreeMargin()); } //- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- WriteAccFreeMarg=AccountFreeMargin(); // Записываем в переменную ReadAccFreeMarg=IsTesting()?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")):GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode)); // читаем что там есть сейчас if(CurTime() > StringToTime(starthour) && CurTime() < StringToTime(starthour+(string)15) && WriteAccFreeMarg != ReadAccFreeMarg) // проверяем время и баланс на изменение перед записью { // Записываем в определенное время значение баланса Write=IsTesting()?GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_test"),WriteAccFreeMarg):GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_",trade_mode),WriteAccFreeMarg); } ReadAccFreeMarg=(IsTesting())?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")):GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode)); // Обновляем переменную баланса, вдруг изменилась if(WriteAccFreeMarg < ReadAccFreeMarg + ProfitNoTrade) // Тут проверям теперешний баланс { // сюда код } }
Такая переменная при изменении тайм-фрейма или при перезапуске терминала очищается, а это не есть хорошо.
Предположим, перемигнул свет, терминал перезапустился, изменили фрейм и что? все - нет больше значения в переменной, там уже новосозданное.
Вот набросал решение которое будет работать при любых условиях
Дык. А зачем так много кода?
То что я написал можно глобальной заменить и всё.
Такая переменная при изменении тайм-фрейма или при перезапуске терминала очищается, а это не есть хорошо.
Предположим, перемигнул свет, терминал перезапустился, изменили фрейм и что? все - нет больше значения в переменной, там уже новосозданное.
Вот набросал решение которое будет работать при любых условиях
А без #property strict никак нельзя? А то весь советник написан без структур, и незачем перелопачивать весь из-за одной глобальной! :((
И чем отличаются эти два выражения:
ReadAccFreeMarg = IsTesting()?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")): GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode));// читаем что там есть сейчас //---- ReadAccFreeMarg = (IsTesting())?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")): GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode));// Обновляем переменную баланса, вдруг изменилась
Разве только разными комментариями на русском? Или двумя скобками, заключающими IsTesting?
Рад буду Вашему пояснению! Спасибо!
Борис, это работа с тиками, за которыми код может не успеть,- поэтому нужна дополнительная проверка: не изменилась ли ситуация, пока обрабатывалось событие.
Ну, а строгость или нестрогость контроля кода компилятором - личное дело каждого, имхенько.
ЗЫ Здравствуй.
Борис, это работа с тиками, за которыми код может не успеть,- поэтому нужна дополнительная проверка: не изменилась ли ситуация, пока обрабатывалось событие.
Ну, а строгость или нестрогость контроля кода компилятором - личное дело каждого, имхенько.
ЗЫ Здравствуй.
Алексей, разобрался сам. Отсутствие #property strict нисколько не мешает! Только нужно было сменить логику, поскольку у меня другой алгоритм, по которому эксперт строго контролирует потери, а не прибыль, которую незачем контролировать! И скобки лишние не нужны, как и несколько фигурных тоже!
Без ЗЫ Здравствуй!
Кстати, ты был прав, когда я кому-то посоветовал ограничивать проходы в тестере! Я и сам давно не позволяю тестеру строчить логи по превышению норм! Просто не разрешаю эксперту открывать позиции при недозволенной просадке! И порядок!
Неприятный сюрприз! Без #property strict работает только в тестере, если отключаюсь от Инета! При подключении к Инету не работает!
А с #property strict компилятор ругается! Так что моя просьба о варианте без #property strict остаётся в силе!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите плиз запомнить значение ACCOUNT_EQUITY
Т.е сова запоминает значение ACCOUNT_EQUITY к примеру в час ночи
и если к обеду текущее ACCOUNT_EQUITY изменилось на энное значение то сова прекращает торговлю