Типичные ошибки и способы их устранения при работе с торговым окружением - страница 4

 
Artyom Trishkin:

А если ордер будет отменён сервером?

То на следующем тике советник увидит, что позиций нет, и все будет хорошо. Но дублирования не будет.


Artyom Trishkin:

Думается мне, что при учёте маркет-ордеров, необходимо - если таковой нашёлся - возвращать допустим WRONG_VALUE - позиций не может быть меньше нуля. Это будет сигналом, что есть неучтённый маркет-ордер. Но никак не добавлять число позиций.

Это зависит от логики конкретной ТС.

В самом примитивном случае, когда допускается одна сделка в рынке, достаточно возвращать любое отличное от 0 значение, 1 тоже подойдет.

 
Andrey Khatimlianskii:

То на следующем тике советник увидит, что позиций нет, и все будет хорошо. Но дублирования не будет.


Это зависит от логики конкретной ТС.

В самом примитивном случае, когда допускается одна сделка в рынке, достаточно возвращать любое отличное от 0 значение, 1 тоже подойдет.

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

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

Ведь есть такие стратегии, которые требуют точных расчётов по точному и определённому количеству позиций, объёмов, совокупных уровней стоп/тейк, и проч. ...

 
Andrey Khatimlianskii:

Это зависит от логики конкретной ТС.

В самом примитивном случае, когда допускается одна сделка в рынке, достаточно возвращать любое отличное от 0 значение, 1 тоже подойдет.

Андрей, функция, у которой запрашивают количество или объём или ещё какие-либо количественные данные, обязана выдать их точное значение.

Вроде как не в игрушки же играемся :)

 
Artyom Trishkin:

Андрей, функция, у которой запрашивают количество или объём или ещё какие-либо количественные данные, обязана выдать их точное значение.

Рассматривается конкретный пример советника с одной сделкой в рынке, и он в 99% случаев пишется ошибочно. До сложных еще добраться нужно.

Если очень хочется, переименуй функцию в IsPosition и сделай ее булевой: return(Res>0);

 
Andrey Khatimlianskii:

Рассматривается конкретный пример советника с одной сделкой в рынке, и он в 99% случаев пишется ошибочно. До сложных еще добраться нужно.

Если очень хочется, переименуй функцию в IsPosition и сделай ее булевой: return(Res>0);

Ну неее..., рассматривается пример некой общей библиотечной функции "на все случаи жизни"...

Кстати, интересное предложение сделать булевой - по примеру многих стандартных mql5-функций - с возвратом результата исполнения в виде значения bool, и количества позиций посредством передачи значения в переменную по ссылке.

 
Artyom Trishkin:

Ну неее..., рассматривается пример некой общей библиотечной функции "на все случаи жизни"...

Да, универсальная.

 
fxsaber:

Да, универсальная.

Предложенный вами вариант решения содержит неточность при отмене ордера сервером. Хочу обсудить варианты отработки этой неточности. Без них предложение сырое.
 
Artyom Trishkin:
Предложенный вами вариант решения содержит неточность при отмене ордера сервером. Хочу обсудить варианты отработки этой неточности. Без них предложение сырое.

Отвлечемся от MT5 в сторону MT4. Торгует советник. Вдруг брокер по своей технической ошибке (не Вы) выставляет на Вашем счете позицию, которая успешно проходит фильтр советника свой-чужой - мэджик, символ и т.д. Через секунду брокер исправляет свою ошибку - удаляет (не закрывает даже) свою позицию с Вашего счета.

Ваша ТС сломается?


ЗЫ Помню случаи, как отлично нагревал любителей советников один крупный брокер. Он "по ошибке" пополнял счет на очень крупную сумму. Советник открывал, соответственно, позицию с очень крупным лотом. Затем брокер исправлял "ошибку" - снимал неправильно начисленные деньги. Счет выносило по стопауту.

 
fxsaber:

Отвлечемся от MT5 в сторону MT4. Торгует советник. Вдруг брокер по своей технической ошибке (не Вы) выставляет на Вашем счете позицию, которая успешно проходит фильтр советника свой-чужой - мэджик, символ и т.д. Через секунду брокер исправляет свою ошибку - удаляет (не закрывает даже) свою позицию с Вашего счета.

Ваша ТС сломается?


ЗЫ Помню случаи, как отлично нагревал любителей советников один крупный брокер. Он "по ошибке" пополнял счет на очень крупную сумму. Советник открывал, соответственно, позицию с очень крупным лотом. Затем брокер исправлял "ошибку" - снимал неправильно начисленные деньги. Счет выносило по стопауту.

Мы говорим не о ТС. 
О функции, которая ОБЯЗАНА возвращать то, что есть физически на счёте.
Все остальные "представьте" - должны быть на балансе разработчика ТС. Но в его арсенале должна быть простая функция, которая не врёт, и при этом даёт возможность знать о неопределённом состоянии окружения.
 

Artyom Trishkin:
Мы говорим не о ТС.

В примере мы говорим о конкретной описанной ситуации с ТС. И там вопрос оставлен без ответа.

О функции, которая ОБЯЗАНА возвращать то, что есть физически на счёте.
Все остальные "представьте" - должны быть на балансе разработчика ТС. Но в его арсенале должна быть простая функция, которая не врёт, и при этом даёт возможность знать о неопределённом состоянии окружения.

Функция и возвращает то, что физически есть на счете. И она врет ровно настолько же, насколько врала бы в MT4. Т.е. нормально все.