https://docs.mql4.com/ru/check/GetLastError:
"
Функция возвращает код последней ошибки, после чего значение специальной переменной last_error, в которой хранится код последней ошибки обнуляется. Так что последующий вызов GetLastError() вернет значение 0."
https://docs.mql4.com/ru/check/GetLastError:
"
Функция возвращает код последней ошибки, после чего значение специальной переменной last_error, в которой хранится код последней ошибки обнуляется. Так что последующий вызов GetLastError() вернет значение 0."
Мда... возможно...
*
Однако почему тогда, если явно была ошибка 136 офф-квотес не отработал вызов CloseAll();} ?
Вот последовательно...:
- подаётся команда закрыть, выполняется, тут-же получает ответ 136 (?), и... уходит в задумчивость на три минуты
тогда по логике, если ошибка больше 0 должен и отработать иф с гетластерром, однако из лога видно что нет...
Получается, приказ посланый на сервер там и ждёт эти три минуты что-б потом победно обьявить эту,
уже никому не нужную "новость", о которой даже по времени можно догадаться и так...
*
Не уверен, но в других местах срабатывала эта конструкция нормально.
Проверю отпишусь... ;)
if(GetLastError()>0) Print("Ощибка № "+ENTO(GetLastError())); // и так if(GetLastError()>0) {Print("Ощибка № "+ENTO(GetLastError())); return;}
Да. Действительно была моя ошибка...
Просто рассудил логически дабы не принтовать попусту а по событию.
ЕСЛИ ошибка >0 ТО принтуем "текст" + трнсформированое описалово НОМЕРА ошибки.
Однако вот... с толку сбило то, что в подобном не использовался вызов гетластеррор дважды.
а чё нить вроде этого:
ticket=OrderSend(Sim,Top,Lots,cena,slipp,0,0,txt,MGiK,0,CLR_NONE); if (ticket<1) Print(Sim+"-"+MGiK+"="+ErrNumToStr(GetLastError()));
Победил принтовку двумя способами:
void CloseAll(){ int b, s, clo, dev=10000; for (int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; //--- через присвоение переменной возвращаемого значения OrderClose() if(OrderType()==0) b=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),dev); if(b>0) {Print("Ощибка BUY № "+ENTO(b));} //--- через присвоение переменной возвращаемого значения GetLastError() if(OrderType()==1) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),dev); clo=GetLastError(); if(clo>0) {Print("Ощибка SELL № "+ENTO(clo));} //--- clo=0; } }
осталось лишь выбрать приемлимый вариант...
Скорее всего через GetLastError() ибо через OrderClose() грешит № 1=Нет ошибки, но результат неизвестен
05:22:30 Закрыть все EURJPY,M30: removed
05:22:30 Закрыть все EURJPY,M30: uninit reason 0
05:22:30 Закрыть все EURJPY,M30: close #162229 sell 0.10 EURUSD at 1.4182 at price 1.4184
05:22:27 Закрыть все EURJPY,M30: Ощибка BUY № 1=Нет ошибки, но результат неизвестен
05:22:27 Закрыть все EURJPY,M30: close #162230 sell 0.10 EURUSD at 1.4181 at price 1.4184
05:22:24 Закрыть все EURJPY,M30: Ощибка BUY № 1=Нет ошибки, но результат неизвестен
05:22:24 Закрыть все EURJPY,M30: Ощибка BUY № 1=Нет ошибки, но результат неизвестен
05:22:24 Закрыть все EURJPY,M30: close #162231 buy 0.10 EURUSD at 1.4183 at price 1.4182
05:22:21 Закрыть все EURJPY,M30: Ощибка BUY № 1=Нет ошибки, но результат неизвестен
05:22:21 Закрыть все EURJPY,M30: close #162232 buy 0.10 EURUSD at 1.4183 at price 1.4182
05:22:17 Закрыть все EURJPY,M30: loaded successfully
UP!
Пока писал дошло... :)))
OrderClose() то булева, потому и возвращает токма 0 или 1
... :))) вот олух я...
Вот так правильней будет:
if(OrderType()==0) b=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),dev); if(b==0) {Print("Ощибка BUY № "+ENTO(GetLastError()));}
однако выбор остался...
Блин! Достало... :(
Ладно с мозгами траблы, это лечится временем и опытом,
так ещё старые болячки терминала ещё встревают...
Наверное уже сто раз просили исправить:

Вроде с кодом разобрался, так после очередной перезагрузки началось...
11:21:40 basket_CLOSEallOPEN EURRURx,M30: removed
11:21:40 basket_CLOSEallOPEN EURRURx,M30: uninit reason 0
11:18:35 basket_CLOSEallOPEN EURRURx,M30: loaded successfully
ошибка, точнее НЕ закрывается поза EURRURx и всё тут! хоть убей.
Благо заметил глюк маркетвоча, а то покусал бы монитор...
Скрипт зависал, и "выключался" сам по себе. То бишь по истечении времени.
Хоть бы ошибкой какой нить ругнулся терминал чтоли...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Увы. Но это факт. Рублевые пары настоящая пока экзотика...
Ранее как-то не особо интересовался инструментами с "бешенным спредом".
т.е. теми где спред исчисляется сотнями, а порой тысячей пипс...
Но вот появилась торговля рублевыми парами USDRUR и EURRUR
и в купе с рублевым депо решил таки обратить более плотный на них свой взор...
*
Первое с чем столкнулся и впринципе решил вроде как это величина слиппа в коде.
Оказалось что "заоблачной" сотни пип которой хватало за глаза в этом случае мало...
Воспользовавшись тем-же принципом спред*20 вывел что для экзотики надо 10000 слипп.
500 средний сред * 20 = 10000
Имеет ли смысл такие величины с точки зрения правильности величин сервером... не знаю...
На данном этапе важнее что-бы открылось\закрылось нежели уровни исполнения по этим инструментам.
*
Второе это собственно код и получаемые ошибки. Которых порой как-бы и нет. Но они есть! (с) ;)
2009.07.21 05:15:20 Script Закрыть все открытые USDJPY,M30: removed
2009.07.21 05:15:20 '13031': order #160575 buy 4.50 EURRURx closing at 44.0920 failed [Off quotes]
2009.07.21 05:12:19 '13031': request in process
2009.07.21 05:12:18 '13031': request was accepted by server
Ибо чем ещё обьяснить столь долгое закрытие.
Прааавильно... необработкой скриптом ошибки 136, и дождавшись положенного времени скрипт завершает работу.
В принципе ничего страшного, только вот напрягает что эти три минуты полная неизвестность и висящий скрипт...
*
Ха! плёво дело! щас понавешаем обработку и... И ничего...
06:01:13 Закрыть все открытые EURJPY,H4: removed
06:01:13 Закрыть все открытые EURJPY,H4: uninit reason 0
06:01:13 Закрыть все открытые EURJPY,H4: close #160707 buy 5.50 USDRURx at 31.0745 at price 31.0335
06:01:10 Закрыть все открытые EURJPY,H4: Ощибка № Нет ошибки
05:58:07 Закрыть все открытые EURJPY,H4: close #160708 buy 4.50 EURRURx at 44.1210 at price 44.0910
05:58:04 Закрыть все открытые EURJPY,H4: Ощибка № Нет ошибки
05:54:59 Закрыть все открытые EURJPY,H4: loaded successfully
Причём в полном смысле ничего. Нет говорит у вас ошибки. Но она то есть! и по логу это видно! не говоря уже
о красноречивом времени которое пришлось героически пережидать держа себя в руках шоб не покусать монитор...
:)))
Эксперименты пока завершил на этом варианте закрытия.
Гадости ко всему этому добавляет ещё то, что это "мерцающая проблема".
Проявляется когда её вздумается...
*
Весьма предполагаю что первым советом будет понаФтыкать везде рефреш ратес.
;)
Но повторюсь! мне важнее знать почему не проявилась ошибка в принтах...