Особенности языка mql5, тонкости и приёмы работы - страница 24

 
Alexey Viktorov:
А что от этого изменится?
Констатация ситуации про Trade-события полностью согласуется с темой ветки.
 

Простой кратковременный сетевой сбой сводит на нет торговую логику, основанную ТОЛЬКО на прослушивании Trade-событий.

Поэтому адепты OnTradeTransaction несколько перебарщивают в своих рассуждениях.

Вот такой механизм торговой логики будет служить верно на любой платформе

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Хороший пример работы с лимитными ордерами в советнике

fxsaber, 2017.01.02 23:12

Торгую только через отложки тучу времени. Никакой обработки не делаю. OrderSend вернул -1 (MT4 или MT5+MT4Orders) - не получилось и ладно, потому что на следующем шаге все равно полностью просматривается торговое окружение. И если отложки/позы нет, а должна быть, то идет синхронизация с тем состоянием, которое должно быть - отправляется соответствующий OrderSend.

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

Асинхронные варианты не пробовал, тут не видится сильно сложнее, но утверждать не возьмусь.

 
fxsaber:

Простой кратковременный сетевой сбой сводит на нет торговую логику, основанную ТОЛЬКО на прослушивании Trade-событий.

Поэтому адепты OnTradeTransaction несколько перебарщивают в своих рассуждениях.

Вот такой механизм торговой логики будет служить верно на любой платформе

Да, единственный надёжный способ - проверка состояния торгового счета. Все события OnTrade* не могут обеспечить надёжного механизма управления торговыми приказами.

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

Состояние торгового счета это то, что имеем на момент запроса (мы сами делаем запрос), если проблемы с сетью - не беда, можно делать запросы до тех пор, пока сеть не восстановиться. А вот полагаясь на события мы полностью становимся зависимы от внешних факторов.

 

fxsaber:
Констатация ситуации про Trade-события полностью согласуется с темой ветки.

Да я совсем не возражаю, просто сказал что мало кому надо ловить такие тонкости.

fxsaber:

Простой кратковременный сетевой сбой сводит на нет торговую логику, основанную ТОЛЬКО на прослушивании Trade-событий.

Поэтому адепты OnTradeTransaction несколько перебарщивают в своих рассуждениях.

Вот такой механизм торговой логики будет служить верно на любой платформе

И от этого никого не собираюсь отговаривать. Тем более что считаю очень необходимым контролировать возврат от сервера. Только подходы бывают разные. То что вы предлагаете правильно, но не панацея.

Может быть это от моего жизненного ‌принципа: "Пусть я сделаю хуже, но по-своему. Если что случится ругать будет некого."

 

Как-то привык в 4-ке для стоимости пункта по инструменту пользоваться функцией MarketInfo(_Symbol, MODE_TICKVALUE). И пока с проблемами не сталкивался.

В МТ5 у разных брокеров смотрю не все так единообразно‌. Запустил на EURUSD и USDJPY небольшой скрипт на двух разных счетах. Обратите внимание на стоимость пункта и размер контракта.

Это демо-счет от MQ:‌

Это демо-счет от Just2Trade:

‌Есть у кого-то универсальная функция которая приводила бы к однообразному виду стоимость пункта?
Я так понимаю и размер тика и размер контракта нужно учитывать, может еще что-то?

Т.е. если это EURUSD и депозит долларовый - то 1 пятизнаковый пункт чтобы у него был равен 1 дол.

И в каких случаях правильно использовать SYMBOL_TRADE_TICK_VALUE_PROFIT или SYMBOL_TRADE_TICK_VALUE_LOSS ?
 
Vasiliy Pushkaryov:

Как-то привык в 4-ке для стоимости пункта по инструменту пользоваться функцией MarketInfo(_Symbol, MODE_TICKVALUE). И пока с проблемами не сталкивался.

В МТ5 у разных брокеров смотрю не все так единообразно‌. Запустил на EURUSD и USDJPY небольшой скрипт на двух разных счетах. Обратите внимание на стоимость пункта и размер контракта.

Это демо-счет от MQ:‌

Это демо-счет от Just2Trade:

‌Есть у кого-то универсальная функция которая приводила бы к однообразному виду стоимость пункта?
Я так понимаю и размер тика и размер контракта нужно учитывать, может еще что-то?

Т.е. если это EURUSD и депозит долларовый - то 1 пятизнаковый пункт чтобы у него был равен 1 дол.

И в каких случаях правильно использовать SYMBOL_TRADE_TICK_VALUE_PROFIT или SYMBOL_TRADE_TICK_VALUE_LOSS ?
Вот когда в "конторе никонора" будет размер контракта как у нормальных, СТО ТЫСЯЧ, тогда и стоимость пункта будет как у нормальных. А пока можно то, что получил умножить на 100000 и получишь желаемое.
 
Alexey Viktorov:
Вот когда в "конторе никонора" будет размер контракта как у нормальных, СТО ТЫСЯЧ, тогда и стоимость пункта будет как у нормальных. А пока можно то, что получил умножить на 100000 и получишь желаемое.
Я тоже как-то мучился с этим. На MetaQuotes-Demo размер контракта один, у Just2Trade другой. Для форексных - один, для акций и пр. - другой. То, что в справке написано как всё подсчитывать - не сходится - хоть тресни. А заказчик-то ждёт... Так и договорились, что автоматически считать не будет, а тупо на 100 умножать. И только на его Just2Trade. Так и не понял эту фишку... :((
 
Artyom Trishkin:
Я тоже как-то мучился с этим. На MetaQuotes-Demo размер контракта один, у Just2Trade другой. Для форексных - один, для акций и пр. - другой. То, что в справке написано как всё подсчитывать - не сходится - хоть тресни. А заказчик-то ждёт... Так и договорились, что автоматически считать не будет, а тупо на 100 умножать. И только на его Just2Trade. Так и не понял эту фишку... :((

Что тут может быть не понятного?

Размер стандартного контракта = 1 купили 1000 лот получили за 1 пункт 0.00001*1000/1 = 0.01

Другой вариант, размер контракта = 100000 купили 0.01 лот‌ (100000*0.01=1000) получили за 1 пункт 1*1000/100000 = 0.01

Это для 5\3 знака.‌

ps; А в инсте был размер стандартного контракта 10000.
 
Alexey Viktorov:

Что тут может быть не понятного?

Размер стандартного контракта = 1 купили 1000 лот получили за 1 пункт 0.00001*1000/1 = 0.01

Другой вариант, размер контракта = 100000 купили 0.01 лот‌ (100000*0.01=1000) получили за 1 пункт 1*1000/100000 = 0.01

Это для 5\3 знака.‌

ps; А в инсте был размер стандартного контракта 10000.
Понятно, просто непривычно как-то 3000 или 5000 лотов использовать. Придется привыкать.
 
Vasiliy Pushkaryov:
Понятно, просто непривычно как-то 3000 или 5000 лотов использовать. Придется привыкать.

Если не привычно можно написать так

input double               lot         =  0.1;
input int                  take        =  100;   // TakeProfit

double takePips, contract;

/*******************Expert initialization function*******************/
int OnInit()
{
   contract = 100000/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE)*lot;
    takePips = take*_Point;
   return(INIT_SUCCEEDED);
}/*******************************************************************/

и в функцию OrderSend() отправлять переменную contract независимо от прихоти ДЦ.

Причина обращения: