fxsaber: Второй OrderSend содержит ошибку. И нормализация не нужна. На форуме (и не только) код легче читается, когда он короче.
да, вижу, писал код на лету - запустил в тестере - работает, скопировал на форум
fxsaber:
Тут уже надо будет постараться.
вот поэтому я и обратился за помощью на форум! - решил оценить возможности СБ CTrade - взял в качестве примера элементарную задачу и пока результат отрицательный!
Vladimir Karputov:
Теперь решить задачу станет намного легче.
знаю Вас как активного участника форума, Вы не могли бы мой, вернее правленый код fxsaber , воспроизвести с помощью СБ CTrade под MQL5
вот поэтому я и обратился за помощью на форум! - решил оценить возможности СБ CTrade - взял в качестве примера элементарную задачу и пока результат отрицательный!
хм, странная ситуация, вроде активность в топике я поднял, вопрос у меня был, с моей точки зрения конкретный, а вместо ответа пока получил "а зачем тебе это?"
ОК, мне нужно в тестере промасштабировать ТС сразу на несколько ТФ, хочу это реализовать с помощью СБ CTrade, вот пример (собранный из 2-х моих примеров): открываем каждый новый бар на 9-ти ТФ по одному ордеру, тикет запоминаем и по номеру тикета определяем закрылся ли ордер? и какое направление было у закрытого ордера?
хм, странная ситуация, вроде активность в топике я поднял, вопрос у меня был, с моей точки зрения конкретный, а вместо ответа пока получил "а зачем тебе это?"
ОК, мне нужно в тестере промасштабировать ТС сразу на несколько ТФ, хочу это реализовать с помощью СБ CTrade, вот пример (собранный из 2-х моих примеров): открываем каждый новый бар на 9-ти ТФ по одному ордеру, тикет запоминаем и по номеру тикета определяем закрылся ли ордер? и какое направление было у закрытого ордера?
в MQL4 код для тестера будет выглядеть так:
как написать этот код в MQL5 с помощью СБ CTrade ???!!!
Итак, основа основ - Идентификатор позиции (POSITION_IDENTIFIER), но ни как не тикет позиции. Это важно, как раз из-за неттинга:
POSITION_IDENTIFIER
Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция.
Идентификатор позиции указывается в каждом ордере (ORDER_POSITION_ID) и сделке (DEAL_POSITION_ID), которая ее открыла, изменила или закрыла. Используйте это свойство для поиска ордеров и сделок, связанных с позицией.
При развороте позиции в режиме неттинга (единой сделкой in/out) идентификатор позиции POSITION_IDENTIFIER не изменяется. Однако при этом POSITION_TICKET изменяется на тикет ордера, в результате которого произошел разворот. В режиме хеджинга разворот позиции не предусмотрен.
long
Значит нужно запоминать и отслеживать идентификатор позиции (POSITION_IDENTIFIER).
Теперь уточнённая задача: при первом запуске открываем ПОЗИЦИЮ BUY и запоминаем её (ВНИМАНИЕ: запоминать нужно идентификатор позиции, но не тикет). Если позиция была закрыта - открываем противоположную позицию: например жила-была позиция BUY, затем она была закрыта, а значит открывается сразу позиция SELL.
пролистал справку, не вижу у СБ CTrade методов для работы с идентификатором позиции, т.е. СБ CTrade не умеет определять самостоятельно открыт ордер или закрыт? какой тип был у последнего закрытого ордера?
какую библиотеку нужно использовать для этой цели?
пролистал справку, не вижу у СБ CTrade методов для работы с идентификатором позиции, т.е. СБ CTrade не умеет определять самостоятельно открыт ордер или закрыт? какой тип был у последнего закрытого ордера?
какую библиотеку нужно использовать для этой цели?
Ну я уже сто раз говорил - выкиньте из лексикона слово "ордер". Пока Вы этого не сделаете - Вы не сможете идти дальше. В общем я вероятно Вам не смогу помочь. Печаль.
Ну я уже сто раз говорил - выкиньте из лексикона слово "ордер". Пока Вы этого не сделаете - Вы не сможете идти дальше. В общем я вероятно Вам не смогу помочь. Печаль.
А подскажите, как понимать это:
GN 016:24:14.030 Core 12018.06.0608:00:00 Sell market. Ticket = 20
JF 016:24:14.030 Core 12018.06.0608:00:00 Sell market. Identifier = 0
FQ 016:24:14.030 Core 12018.06.1916:00:00 ======closePosition======
HG 016:24:14.030 Core 12018.06.1916:00:00 market buy 0.10 AUDUSD, close #20(0.73633 / 0.73637 / 0.73633)
PH 016:24:14.030 Core 12018.06.1916:00:00 deal #21buy 0.10 AUDUSD at 0.73637 done (based on order #21)
KJ 016:24:14.030 Core 12018.06.1916:00:00 deal performed [#21buy 0.10 AUDUSD at 0.73637]
IL 016:24:14.030 Core 12018.06.1916:00:00 order performed buy 0.10 at 0.73637 [#21buy 0.10 AUDUSD at 0.73637]
RN 016:24:14.030 Core 12018.06.1916:00:00 CTrade::OrderSend: market buy 0.10 position #20AUDUSD [done at 0.73637]
HN 016:24:14.030 Core 12018.06.1916:00:00 Позиция с магиком 2544113114312914, тикетом 20 и лотом 0.1 успешно закрыта.
LO 016:24:14.030 Core 12018.06.1916:00:00 Очистка данных произведена.
CH 016:24:14.030 Core 12018.06.1916:00:00 ======checkMargin======
OF 016:24:14.030 Core 12018.06.1916:00:00 market buy 0.10 AUDUSD (0.73633 / 0.73637 / 0.73633)
DS 016:24:14.030 Core 12018.06.1916:00:00 deal #22buy 0.10 AUDUSD at 0.73637 done (based on order #22)
RM 016:24:14.030 Core 12018.06.1916:00:00 deal performed [#22buy 0.10 AUDUSD at 0.73637]
DS 016:24:14.030 Core 12018.06.1916:00:00 order performed buy 0.10 at 0.73637 [#22buy 0.10 AUDUSD at 0.73637]
FF 016:24:14.030 Core 12018.06.1916:00:00 CTrade::OrderSend: market buy 0.10 AUDUSD [done at 0.73637]
MJ 016:24:14.030 Core 12018.06.1916:00:00 magic = 2544113114312914
RR 016:24:14.030 Core 12018.06.1916:00:00 balance = 11308.94
JK 016:24:14.030 Core 12018.06.1916:00:00 lot = 0.10
HQ 016:24:14.030 Core 12018.06.1916:00:00 Buy market. Ticket = 22
CJ 016:24:14.030 Core 12018.06.1916:00:00 Buy market. Identifier = 20
HR 016:24:14.030 Core 12018.07.0408:00:00 ======closePosition======
FI 016:24:14.030 Core 12018.07.0408:00:00 market sell 0.10 AUDUSD, close #22(0.74021 / 0.74025 / 0.74021)
RF 016:24:14.030 Core 12018.07.0408:00:00 deal #23sell 0.10 AUDUSD at 0.74021 done (based on order #23)
ID 016:24:14.030 Core 12018.07.0408:00:00 deal performed [#23sell 0.10 AUDUSD at 0.74021]
GM 016:24:14.030 Core 12018.07.0408:00:00 order performed sell 0.10 at 0.74021 [#23sell 0.10 AUDUSD at 0.74021]
NQ 016:24:14.030 Core 12018.07.0408:00:00 CTrade::OrderSend: market sell 0.10 position #22AUDUSD [done at 0.74021]
PO 016:24:14.030 Core 12018.07.0408:00:00 Позиция с магиком 2544113114312914, тикетом 22 и лотом 0.1 успешно закрыта.
FO 016:24:14.030 Core 12018.07.0408:00:00 Очистка данных произведена.
CH 016:24:14.030 Core 12018.07.0408:00:00 ======checkMargin======
OI 016:24:14.030 Core 12018.07.0408:00:00 market sell 0.10 AUDUSD (0.74021 / 0.74025 / 0.74021)
JO 016:24:14.030 Core 12018.07.0408:00:00 deal #24sell 0.10 AUDUSD at 0.74021 done (based on order #24)
LM 016:24:14.030 Core 12018.07.0408:00:00 deal performed [#24sell 0.10 AUDUSD at 0.74021]
ND 016:24:14.030 Core 12018.07.0408:00:00 order performed sell 0.10 at 0.74021 [#24sell 0.10 AUDUSD at 0.74021]
LI 016:24:14.030 Core 12018.07.0408:00:00 CTrade::OrderSend: market sell 0.10 AUDUSD [done at 0.74021]
OJ 016:24:14.030 Core 12018.07.0408:00:00 magic = 2544113114312914
RR 016:24:14.030 Core 12018.07.0408:00:00 balance = 11335.85
DK 016:24:14.030 Core 12018.07.0408:00:00 lot = 0.10
PN 016:24:14.030 Core 12018.07.0408:00:00 Sell market. Ticket = 24
QE 016:24:14.030 Core 12018.07.0408:00:00 Sell market. Identifier = 22
NR 016:24:14.030 Core 12018.07.1900:00:00 ======closePosition======
NF 016:24:14.030 Core 12018.07.1900:00:00 market buy 0.10 AUDUSD, close #24(0.73968 / 0.73989 / 0.73968)
JI 016:24:14.030 Core 12018.07.1900:00:00 deal #25buy 0.10 AUDUSD at 0.73989 done (based on order #25)
QK 016:24:14.030 Core 12018.07.1900:00:00 deal performed [#25buy 0.10 AUDUSD at 0.73989]
MM 016:24:14.030 Core 12018.07.1900:00:00 order performed buy 0.10 at 0.73989 [#25buy 0.10 AUDUSD at 0.73989]
PN 016:24:14.030 Core 12018.07.1900:00:00 CTrade::OrderSend: market buy 0.10 position #24AUDUSD [done at 0.73989]
DO 016:24:14.030 Core 12018.07.1900:00:00 Позиция с магиком 2544113114312914, тикетом 24 и лотом 0.1 успешно закрыта.
LP 016:24:14.030 Core 12018.07.1900:00:00 Очистка данных произведена.
KK 016:24:14.030 Core 12018.08.0816:00:00 ======checkMargin======
RI 016:24:14.030 Core 12018.08.0816:00:00 market sell 0.10 AUDUSD (0.73933 / 0.73937 / 0.73933)
GO 016:24:14.030 Core 12018.08.0816:00:00 deal #26sell 0.10 AUDUSD at 0.73933 done (based on order #26)
OM 016:24:14.030 Core 12018.08.0816:00:00 deal performed [#26sell 0.10 AUDUSD at 0.73933]
JD 016:24:14.030 Core 12018.08.0816:00:00 order performed sell 0.10 at 0.73933 [#26sell 0.10 AUDUSD at 0.73933]
QI 016:24:14.030 Core 12018.08.0816:00:00 CTrade::OrderSend: market sell 0.10 AUDUSD [done at 0.73933]
HN 016:24:14.030 Core 12018.08.0816:00:00 Sell market. Ticket = 26
CF 016:24:14.030 Core 12018.08.0816:00:00 Sell market. Identifier = 0
Ну я уже сто раз говорил - выкиньте из лексикона слово "ордер". Пока Вы этого не сделаете - Вы не сможете идти дальше. В общем я вероятно Вам не смогу помочь. Печаль.
OK? сформулирую вопрос иначе:
как используя запомненный тикет с помощью CTrade::ResultOrder()
узнать:
1. закрыта ли позиция?
2. какой тип сделки был у закрытой позиции?
3. нужна одновременная работа с 9-ю позициями, ордерами или тикетами или ... НаВашеУсмотрениеЛюбаяТерминология на счете типа хэдж
в такой формулировке мой вопрос однозначный? (воспроизводимый пример под MQl4 выложен выше)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Теперь решить задачу станет намного легче.
При написании примера загляните немного вперед.
Второй OrderSend содержит ошибку. И нормализация не нужна. На форуме (и не только) код легче читается, когда он короче.
да, вижу, писал код на лету - запустил в тестере - работает, скопировал на форум
Тут уже надо будет постараться.
вот поэтому я и обратился за помощью на форум! - решил оценить возможности СБ CTrade - взял в качестве примера элементарную задачу и пока результат отрицательный!
Теперь решить задачу станет намного легче.
знаю Вас как активного участника форума, Вы не могли бы мой, вернее правленый код fxsaber , воспроизвести с помощью СБ CTrade под MQL5
да, вижу, писал код на лету - запустил в тестере - работает, скопировал на форум
Когда начинаю писать советник, то стартую всегда с голого листа (рекомендую). Наверное, чаще всего стартуют с шапки с On-функциями.
вот поэтому я и обратился за помощью на форум! - решил оценить возможности СБ CTrade - взял в качестве примера элементарную задачу и пока результат отрицательный!
Есть еще более короткий пример.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2018.02.15 11:48
С ним тяжко в MT5, если не в тестере.
хм, странная ситуация, вроде активность в топике я поднял, вопрос у меня был, с моей точки зрения конкретный, а вместо ответа пока получил "а зачем тебе это?"
ОК, мне нужно в тестере промасштабировать ТС сразу на несколько ТФ, хочу это реализовать с помощью СБ CTrade, вот пример (собранный из 2-х моих примеров): открываем каждый новый бар на 9-ти ТФ по одному ордеру, тикет запоминаем и по номеру тикета определяем закрылся ли ордер? и какое направление было у закрытого ордера?
в MQL4 код для тестера будет выглядеть так:
нужен код для тестера, т.е. минимум проверок и максимально быстро работающий в оптимизаторе
как написать этот код в MQL5 с помощью СБ CTrade ???!!!
хм, странная ситуация, вроде активность в топике я поднял, вопрос у меня был, с моей точки зрения конкретный, а вместо ответа пока получил "а зачем тебе это?"
ОК, мне нужно в тестере промасштабировать ТС сразу на несколько ТФ, хочу это реализовать с помощью СБ CTrade, вот пример (собранный из 2-х моих примеров): открываем каждый новый бар на 9-ти ТФ по одному ордеру, тикет запоминаем и по номеру тикета определяем закрылся ли ордер? и какое направление было у закрытого ордера?
в MQL4 код для тестера будет выглядеть так:
как написать этот код в MQL5 с помощью СБ CTrade ???!!!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Vladimir Karputov, 2019.07.21 12:56
Итак, основа основ - Идентификатор позиции (POSITION_IDENTIFIER), но ни как не тикет позиции. Это важно, как раз из-за неттинга:
POSITION_IDENTIFIER
Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Соответствует тикету ордера, которым была открыта позиция.
Идентификатор позиции указывается в каждом ордере (ORDER_POSITION_ID) и сделке (DEAL_POSITION_ID), которая ее открыла, изменила или закрыла. Используйте это свойство для поиска ордеров и сделок, связанных с позицией.
При развороте позиции в режиме неттинга (единой сделкой in/out) идентификатор позиции POSITION_IDENTIFIER не изменяется. Однако при этом POSITION_TICKET изменяется на тикет ордера, в результате которого произошел разворот. В режиме хеджинга разворот позиции не предусмотрен.
long
Значит нужно запоминать и отслеживать идентификатор позиции (POSITION_IDENTIFIER).
Теперь уточнённая задача: при первом запуске открываем ПОЗИЦИЮ BUY и запоминаем её (ВНИМАНИЕ: запоминать нужно идентификатор позиции, но не тикет). Если позиция была закрыта - открываем противоположную позицию: например жила-была позиция BUY, затем она была закрыта, а значит открывается сразу позиция SELL.
Теперь решить задачу станет намного легче.
пролистал справку, не вижу у СБ CTrade методов для работы с идентификатором позиции, т.е. СБ CTrade не умеет определять самостоятельно открыт ордер или закрыт? какой тип был у последнего закрытого ордера?
какую библиотеку нужно использовать для этой цели?
пролистал справку, не вижу у СБ CTrade методов для работы с идентификатором позиции, т.е. СБ CTrade не умеет определять самостоятельно открыт ордер или закрыт? какой тип был у последнего закрытого ордера?
какую библиотеку нужно использовать для этой цели?
Ну я уже сто раз говорил - выкиньте из лексикона слово "ордер". Пока Вы этого не сделаете - Вы не сможете идти дальше. В общем я вероятно Вам не смогу помочь. Печаль.
Ну я уже сто раз говорил - выкиньте из лексикона слово "ордер". Пока Вы этого не сделаете - Вы не сможете идти дальше. В общем я вероятно Вам не смогу помочь. Печаль.
А подскажите, как понимать это:
Ну я уже сто раз говорил - выкиньте из лексикона слово "ордер". Пока Вы этого не сделаете - Вы не сможете идти дальше. В общем я вероятно Вам не смогу помочь. Печаль.
OK? сформулирую вопрос иначе:
как используя запомненный тикет с помощью CTrade::ResultOrder()
узнать:
1. закрыта ли позиция?
2. какой тип сделки был у закрытой позиции?
3. нужна одновременная работа с 9-ю позициями, ордерами или тикетами или ... НаВашеУсмотрениеЛюбаяТерминология на счете типа хэдж
в такой формулировке мой вопрос однозначный? (воспроизводимый пример под MQl4 выложен выше)
ЗЫ: я не могу забыть слово ордер, к сожалению это слово используется в справке наряду с другими терминами: https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctraderequestorder