Полезные функции от KimIV - страница 126

 
khorosh:
Войди в его положение. Жизнь на чужбине, вдали от Родины не проходит бесследно. Появляется раздражительность, злость на себя, что когда то совершил непоправимую ошибку, став гастарбайтером.)
Проверка на ошибки работает исправно, но пока ошибок нет, несмотря на многие попытки помешать нормальному функционированию. Имею достаточную защиту от всех возможных непредвиденностей. Опять же, будущее покажет!
 
artmedia70:

Я вот специально if(OrderSelect(i,SELECT_BY_POS)) выделил отдельным блоком. Чтобы возвращать при отладке значение ошибки. else {// пишем про ошибку выбора как душе угодно и возвращаем из неё, например EMPTY}.

А давайте придумайте ситуацию, когда при наличии в рынке выбираемого ордера произойдёт ошибка его выбора. Пообсуждаем. Я ещё ни разу не столкнулся.

Roger:

А назовите хотя бы одну причину, когда правильно созданный цикл перебора ордеров может вернуть "false". 

Ой, не заметил, что Артем уже спросил, упс. И все же.

А какая разница?

В общем случае может вернуть. Ну и что, что наблюдения при каких-то условиях или даже наборе разных условий показали, что не возвращает false?

Мы же не знаем деталей реализации этой функции, и никаких "предполаганий" по этому поводу документация не даёт. А вдруг при очередном наборе условий у очередного брокера функция вдруг начнёт возвращать false?

На заданный вопрос по поводу причины/ситуации все равно отвечу, потому что это легко: причиной может быть ошибка реализации этой функции, допущенная командой разработчиков при выходе очередной версии MT. Надеюсь, это достаточно вероятное событие, чтобы его всерьёз можно было учитывать?

Предположим, что из-за этой гипотетической ошибки, функция начала случайным образом, но, в среднем, только для каждого 5-го запроса, возвращать false.

Обычно заранее нельзя придумать то, чего не знаешь. Поэтому нет особого смысла спрашивать о том, из-за чего это могло бы быть. Когда случится, тогда и можно будет с легкостью объяснить, из-за чего.

Но незнание того, что могло бы случиться в будущем не мешает от этого защищаться. Может оказаться так, что какие-то верхнеуровневые алгоритмы из-за полученного ложного значения наломают немало дров. Они же не будут знать, что значение - ложное.

Если же будут знать, что значения нет, а если есть, то оно - истинное, то, при отсутствии собственных ошибок, дров не наломают. И поэтому информация о невозможности вычислить значение должна выдаваться не только в режиме отладки, но и в боевом.

 

есть ли возможность загружать внешние данные в индикатор ,скажем из текстового файла?

Например есть дневная цена и по ней нужно построить линию на любом графике, таймфреме?

DATE          Price 

04.12.2014  100.00

03.12.2014  101.12

02.12.2014  102.45

01.12.2014  103.23

28.11.2014  102.43

27.11.2014  101.90

 
Хорошие функции, спасибо Игорю за труд.
 
KimIV:

Примеры использования функции OpenPosition().

1. Купить 0.1 лота текущего инструмента

2. Продать 0.2 лота EURUSD

3. Продать 0.12 лота USDCAD со стопом 20 пунктов

4. Купить 0.15 лота USDJPY с тейком 40 пунктов

5. Продать 0.1 лота GBPJPY со стопом 23 и тейком 44 пункта

В прицепе скрипт для тестирования функции OpenPosition(). Первые 4 примера закомментированы.
я не знаю ответите вы мне или нет . я сижу и туплю не знаю как мой советник сделать мультивалютным!
 
logut:
я не знаю ответите вы мне или нет . я сижу и туплю не знаю как мой советник сделать мультивалютным!
Дмитрий, я обычно на листе бумаги всю логику расписываю. Что и когда, и с чем делать
 
Roger:

А назовите хотя бы одну причину, когда правильно созданный цикл перебора ордеров может вернуть "false". 

Ой, не заметил, что Артем уже спросил, упс. И все же.

Да легко!

После очередного обновления терминал перезагрузился и стал показывать ордера только за последний день. По истории ордеров не видно. Функция должна что-то вернуть - типа нет истории. 

Брокер удалил некоторые ордера.  

Дырка в оперативе. Память у вас посыпалась и функция берет мусорную ячейку памяти. При этом на мониторе могут появляться прострелы. А могут и не появляться. Могут быть и другие проблемы с железом. 

терминал перезагрузился и "потерял" связь с сервером. Сидел когда то на НА Мт3 за прокси сервером. Инет был диалапный и жестко лимитрованный по времени и поскрости и качество инета было ужасное. Так вижу тики приходят, график двигается. При поппытке открыть ордер терминал писал типа "нет связи с сервером". 

В МТ4 сталкивался с проблемой и до сих пор существует: Приходит тик и черный(пустой)  экран чарта. Совтеник выдает ошибку деленеия на ноль и робот слетает. Дернешь график мышкой или приходит новый тик - все нормально. Поэтому при делении сначала делаю проверку на что будем делить и если не равно нулю то идем дальше!

 

Уважаемый KimIV, использую ваши функции закрытия всех позиций при достижении определённой прибыли и столкнулся с ситуацией , когда в процессе закрытия за счёт срабатывания отложенного ордера появляется ещё одна позиция, которая остаётся не закрытой. Сейчас я ввёл дополнительную проверку такой ситуации и повторный вызов вашей функции. Как вы считаете стоит ввести такую доработку внутри функции после окончания основного цикла закрытия?

Это функции ClosePosBySortLots() и ClosePositions(); 

 

Есть коды функции для удаления отложенных  ордеров при чем есть для онлайна и для тестов на истории - https://forum.mql4.com/ru/38949#434195

можете пояснить, в чем разница между тестами и онлайном? 

 
Функции isCloseLastPosByStop() и isCloseLastPosByTake() не всегда работают правильно, так как цена закрытия ордера и стоплосс(тейкпрофит) не всегда совпадают. Я у себя переделал. Условие равенства этих величин заменил на условие: абсолютная величина разности этих величин (при 5 разрядных котировках) должна быть менее 5*Point.
Причина обращения: