Пока в голове только одна более-менее здравая на мой взгляд идея:
Запомнить количество открытых ордеров и сравнивать с текущим в данный момент, если их стало больше - открытие, меньше - закрытие.
Пока в голове только одна более-менее здравая на мой взгляд идея:
Запомнить количество открытых ордеров и сравнивать с текущим в данный момент, если их стало больше - открытие, меньше - закрытие.
Закрытие ордера - в принципе нет такой операции. ОТЛОЖЕННЫЙ ордер можно УДАЛИТЬ, а ПОЗИЦИЮ можно ЗАКРЫТЬ.
Сначала определитесь - что же Вы хотите: работать с ПОЗИЦИЕЙ или с ОТЛОЖЕННЫМ ордером?
Доброго времени суток!
Понадобился значит мне копировальщик сделок (дублирование позиций из терминала А в терминал Б). Бесплатных нет, а покупать для меня дорого.
Написал функции:
- получение списка открытых ордеров
- запись в файл
- чтение из файла
- открытие ордера
- изменение ордера (T/P и S/L)
- закрытие ордера
После столкнулся с вопросом - как правильно ловить закрытие ордеров для дальнейшей их обработки (т.е. передачи второму терминалу для закрытия дублирующей сделки)?
До этого я думал воспользоваться событиями - OnTrade или OnTradeTransaction, но опытным путём было установлено, что на закрытие или открытие ордера данное событие срабатывает 10 раз. На изменение 4 раза. В OnTradeTransaction тоже более 1 раза, но менее чем 10. В моём же представлении было, что данные события будут срабатывать по 1 разу на каждую операцию.
Теперь я даже немного в растерянности, как мне грамотно отлавливать закрытие ордеров. Хотя примерные варианты в голове есть (быть может брать информацию из истории закрытых ордеров, ещё можно считать кол-во срабатываний и обрабатывать только после 10 срабатываний, но мне кажется это порнухой, вдруг у другого провайдера этих срабатываний будет меньше) и все их можно пересмотреть, но боюсь, что из-за недостаточно сильных познаний в данной сфере, самый верный вариант будет обойдён стороной.
В общем прошу помочь мне советом. Заранее благодарен!
if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { if(!HistoryDealSelect(trans.deal)) Print(GetLastError()); if(trans.symbol == _Symbol) { if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN && HistoryDealGetInteger(trans.deal, DEAL_MAGIC) == magick) Print("Позиция открылась"); if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_OUT) Print("Позиция закрылась"); } }
Это кусок кода из OnTradeTransaction. Проблема только в том, что если надо определять магик закрывшейся позиции, то надо поколдовать с
историей. Магик закрывающей сделки не совпадает с магиком закрываемой позиции.
Доброго времени суток!
Понадобился значит мне копировальщик сделок (дублирование позиций из терминала А в терминал Б). Бесплатных нет, а покупать для меня дорого.
Написал функции:
- получение списка открытых ордеров
- запись в файл
- чтение из файла
- открытие ордера
- изменение ордера (T/P и S/L)
- закрытие ордера
После столкнулся с вопросом - как правильно ловить закрытие ордеров для дальнейшей их обработки (т.е. передачи второму терминалу для закрытия дублирующей сделки)?
До этого я думал воспользоваться событиями - OnTrade или OnTradeTransaction, но опытным путём было установлено, что на закрытие или открытие ордера данное событие срабатывает 10 раз. На изменение 4 раза. В OnTradeTransaction тоже более 1 раза, но менее чем 10. В моём же представлении было, что данные события будут срабатывать по 1 разу на каждую операцию.
Теперь я даже немного в растерянности, как мне грамотно отлавливать закрытие ордеров. Хотя примерные варианты в голове есть (быть может брать информацию из истории закрытых ордеров, ещё можно считать кол-во срабатываний и обрабатывать только после 10 срабатываний, но мне кажется это порнухой, вдруг у другого провайдера этих срабатываний будет меньше) и все их можно пересмотреть, но боюсь, что из-за недостаточно сильных познаний в данной сфере, самый верный вариант будет обойдён стороной.
В общем прошу помочь мне советом. Заранее благодарен!
Копировщик лучше писать синхронизируя не события, а состояния. Если дублирующая сделка есть, а на мастере ее родителя нет, значит она закрылась, удалилась и т.д. Можно смело искать в истории, если нужно.
С открытием такая же история.
Доброго времени суток!
Понадобился значит мне копировальщик сделок (дублирование позиций из терминала А в терминал Б). Бесплатных нет, а покупать для меня дорого.
Написал функции:
- получение списка открытых ордеров
- запись в файл
- чтение из файла
- открытие ордера
- изменение ордера (T/P и S/L)
- закрытие ордера
После столкнулся с вопросом - как правильно ловить закрытие ордеров для дальнейшей их обработки (т.е. передачи второму терминалу для закрытия дублирующей сделки)?
До этого я думал воспользоваться событиями - OnTrade или OnTradeTransaction, но опытным путём было установлено, что на закрытие или открытие ордера данное событие срабатывает 10 раз. На изменение 4 раза. В OnTradeTransaction тоже более 1 раза, но менее чем 10. В моём же представлении было, что данные события будут срабатывать по 1 разу на каждую операцию.
Теперь я даже немного в растерянности, как мне грамотно отлавливать закрытие ордеров. Хотя примерные варианты в голове есть (быть может брать информацию из истории закрытых ордеров, ещё можно считать кол-во срабатываний и обрабатывать только после 10 срабатываний, но мне кажется это порнухой, вдруг у другого провайдера этих срабатываний будет меньше) и все их можно пересмотреть, но боюсь, что из-за недостаточно сильных познаний в данной сфере, самый верный вариант будет обойдён стороной.
В общем прошу помочь мне советом. Заранее благодарен!
изучите матчасть вначале как работает и чем отличаются ордер - сделки - позиция, тогда и выстроится правильная логика. В мт5 надо уходить от решений для работы с позициями используемых в мт4.
проще по моему потратить немного денег за готовые решения, чем изобретать свой велосипед, если конечно это не связано с тягой к познаниям.
изучите матчасть вначале как работает и чем отличаются ордер - сделки - позиция, тогда и выстроится правильная логика. В мт5 надо уходить от решений для работы с позициями используемых в мт4.
проще по моему потратить немного денег за готовые решения, чем изобретать свой велосипед, если конечно это не связано с тягой к познаниям.
Спасибо! Буквально вчера пришлось разобраться что такое сделка, позиция и ордер. Хотел получить свойства закрытого ордера, но думал что это сделка. Как только понял, что нужных данные от сделки мне не получить, тут то и пришло осознание в ошибочных действиях и понимании всей этой терминологии.
Жалко тратить денег когда есть образование программиста, тем более работать по профессии не удалось, занимаюсь этим как хобби. В итоге одним выстрелом получается убить сразу трёх зайцев:
- навыки разработки на незнакомом языке (MQL5) + сравниваю и ощущаю разницу между PHP и Си;
- познания по терминалу, MetaEditor и хоть какое-то понимание процессов работы всей этой кухни от клиента до сервера;
- экономия средств (как от затрат на покупку готового решения, так и от затрат на обучение).
Копировщик лучше писать синхронизируя не события, а состояния. Если дублирующая сделка есть, а на мастере ее родителя нет, значит она закрылась, удалилась и т.д. Можно смело искать в истории, если нужно.
С открытием такая же история.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток!
Понадобился значит мне копировальщик сделок (дублирование позиций из терминала А в терминал Б). Бесплатных нет, а покупать для меня дорого.
Написал функции:
После столкнулся с вопросом - как правильно ловить закрытие ордеров для дальнейшей их обработки (т.е. передачи второму терминалу для закрытия дублирующей сделки)?
До этого я думал воспользоваться событиями - OnTrade или OnTradeTransaction, но опытным путём было установлено, что на закрытие или открытие ордера данное событие срабатывает 10 раз. На изменение 4 раза. В OnTradeTransaction тоже более 1 раза, но менее чем 10. В моём же представлении было, что данные события будут срабатывать по 1 разу на каждую операцию.
Теперь я даже немного в растерянности, как мне грамотно отлавливать закрытие ордеров. Хотя примерные варианты в голове есть (быть может брать информацию из истории закрытых ордеров, ещё можно считать кол-во срабатываний и обрабатывать только после 10 срабатываний, но мне кажется это порнухой, вдруг у другого провайдера этих срабатываний будет меньше) и все их можно пересмотреть, но боюсь, что из-за недостаточно сильных познаний в данной сфере, самый верный вариант будет обойдён стороной.
В общем прошу помочь мне советом. Заранее благодарен!