Попробуйте пройти в отладчике нажав на синюю кнопку.
предварительно поставив точки останова и проверьте где какие значения имеются и какие ожидались. Так, вроде ошибок не вижу, поэтому надо проверять, следовательно писать открытие позиций, подгонять стопы так чтобы не долго ждать закрытия...
Во блин, для меня это вообще пока новая тема, а по какому принципу расставляются точки ? Впрочем не суть, ... спасибо, буду изучать.
А есть ли способ обратиться к какому либо помагеру от разработчика? Есть тут такая служба? Ну ведь непонятка на лицо, заходят транзакции, часть из них отбирается по условию, а остальные по !условию куда-то проваливаются. Ну тут ведь даже больших знаний не нужно.!
Во блин, для меня это вообще пока новая тема, а по какому принципу расставляются точки ? Впрочем не суть, ... спасибо, буду изучать.
А есть ли способ обратиться к какому либо помагеру от разработчика? Есть тут такая служба? Ну ведь непонятка на лицо, заходят транзакции, часть из них отбирается по условию, а остальные по !условию куда-то проваливаются. Ну тут ведь даже больших знаний не нужно.!
Никого из разработчиков конечно не спросишь. Вкратце так:
Ставите курсор на строку на которой надо остановиться, нажимаете F9 и появляется такая синяя точка на номере строки
это и есть точка останова. Ещё её можно установить двойным тычком по номеру строки. Так-же можно снять, можно поставить несколько. Все остальные тонкости отладки в справочнике.
Я вообще ничего не понимаю. Вот кусок кода из моего работающего советника
и ведь ни разу не остановился на DebugBreak(); значит всё отрабатывает без проблем.
Видимо у вас отрабатывает добавление ордера в историю, а вы ждёте тикет сделки.
Информация о типе транзакции содержится в поле type переменной trans. Типы торговых транзакций описываются в перечислении ENUM_TRADE_TRANSACTION_TYPE:
•TRADE_TRANSACTION_ORDER_ADD – добавление нового действующего ордера
•TRADE_TRANSACTION_ORDER_UPDATE – изменение действующего ордера
•TRADE_TRANSACTION_ORDER_DELETE – удаление ордера из списка действующих
•TRADE_TRANSACTION_DEAL_ADD – добавление сделки в историю
•TRADE_TRANSACTION_DEAL_UPDATE – изменение сделки в истории
•TRADE_TRANSACTION_DEAL_DELETE – удаление сделки из истории
•TRADE_TRANSACTION_HISTORY_ADD – добавление ордера в историю в результате исполнения или отмены
•TRADE_TRANSACTION_HISTORY_UPDATE – изменение ордера, находящегося в истории ордеров
•TRADE_TRANSACTION_HISTORY_DELETE – удаление ордера из истории ордеров
•TRADE_TRANSACTION_POSITION – изменение позиции, не связанное с исполнением сделки
•TRADE_TRANSACTION_REQUEST – уведомление о том, что торговый запрос обработан сервером и результат его обработки получен.
Четко написано - добавил СДЕЛКУ, даже пропустил по этому условию в PRINT. А вот "тикет сделки" в этот принт не предоставляет, или не должен???
Я вообще ничего не понимаю. Вот кусок кода из моего работающего советника
Взял за основу кусок Вашего кода, чуть изменил и появился первый результат. Если конечно можно назвать результатом нестабильное появление нужного принта. Теперь он отрабатывает некоторые, далеко не все, меньше половины, срабатывания ТэйкПрофита, не могу уловить закономерность.
DF 016:03:13.543 Core 12018.08.0223:00:06 deal performed [#8571sell 0.01 EURUSD at 1.15887]
PL 016:03:13.543 Core 12018.08.0223:00:06 order performed sell 0.01 at 1.15887 [#8571sell 0.01 EURUSD at 1.15887]
OR 016:03:13.543 Core 12018.08.0223:00:06 CTrade::OrderSend: market sell 0.01 EURUSD tp: 1.15841 [done at 1.15887]
JM 016:03:13.543 Core 12018.08.0223:20:40take profit triggered#8571sell 0.01 EURUSD 1.15887 tp: 1.15841 [#8572buy 0.01 EURUSD at 1.15841]
CR 016:03:13.543 Core 12018.08.0223:20:40 deal #8572buy 0.01 EURUSD at 1.15841 done (based on order #8572)
QM 016:03:13.543 Core 12018.08.0223:20:40 deal performed [#8572buy 0.01 EURUSD at 1.15841]
MS 016:03:13.543 Core 12018.08.0223:20:40 order performed buy 0.01 at 1.15841 [#8572buy 0.01 EURUSD at 1.15841]
FQ 016:03:13.543 Core 12018.08.0223:41:40take profit triggered#8570sell 0.01 EURUSD 1.15868 tp: 1.15822 [#8573buy 0.01 EURUSD at 1.15822]
CN 016:03:13.543 Core 12018.08.0223:41:40 deal #8573buy 0.01 EURUSD at 1.15822 done (based on order #8573)
RQ 016:03:13.543 Core 12018.08.0223:41:40 deal performed [#8573buy 0.01 EURUSD at 1.15822]
QG 016:03:13.543 Core 12018.08.0223:41:40 order performed buy 0.01 at 1.15822 [#8573buy 0.01 EURUSD at 1.15822]
IF 016:03:13.543 Core 12018.08.0223:41:40 Закрыта позиция ---Тикет сделки--- 8573 --- записана в структуру ArrayDealOut ------------
ED 016:03:13.543 Core 12018.08.0223:59:59 position closed due end of test at 1.15858 [#8079sell 0.01 EURUSD 1.15860 tp: 1.15814]
KJ 016:03:13.543 Core 12018.08.0223:59:59 deal #8574buy 0.01 EURUSD at 1.15858 done (based on order #8574)
KD 016:03:13.543 Core 12018.08.0223:59:59 deal performed [#8574buy 0.01 EURUSD at 1.15858]
OK 016:03:13.543 Core 12018.08.0223:59:59 order performed buy 0.01 at 1.15858 [#8574buy 0.01 EURUSD at 1.15858]
EN 016:03:13.543 Core 12018.08.0223:59:59 position closed due end of test at 1.15858 [#7386sell 0.01 EURUSD 1.15674 tp: 1.15628]
QD 016:03:13.543 Core 12018.08.0223:59:59 deal #8575buy 0.01 EURUSD at 1.15858 done (based on order #8575)
JO 016:03:13.543 Core 12018.08.0223:59:59 deal performed [#8575buy 0.01 EURUSD at 1.15858]
NQ 016:03:13.543 Core 12018.08.0223:59:59 order performed buy 0.01 at 1.15858 [#8575buy 0.01 EURUSD at 1.15858]
NS 016:03:13.543 Core 12018.08.0223:59:59 position closed due end of test at 1.15858 [#7385sell 0.01 EURUSD 1.15691 tp: 1.15645]
И перед тем как сюда скопировать я раскомментировал хвост и когда компиляция не получилась не ту лишнюю скобку удалил. Потом скомпилировал и не проверял.
Спасибо за подсказку. Мне пришлось-бы завтра прогнать несколько раз этот код чтобы выявить эту ошибку.
На самом деле в моём коде, для проверки и отладки, это было так
И перед тем как сюда скопировать я раскомментировал хвост и когда компиляция не получилась не ту лишнюю скобку удалил. Потом скомпилировал и не проверял.
Спасибо за подсказку. Мне пришлось-бы завтра прогнать несколько раз этот код чтобы выявить эту ошибку.
Взял за основу кусок Вашего кода, чуть изменил и появился первый результат. Если конечно можно назвать результатом нестабильное появление нужного принта. Теперь он отрабатывает некоторые, далеко не все, меньше половины, срабатывания ТэйкПрофита, не могу уловить закономерность.
У меня тейки и стопы не предусмотрены. Но всё-же это настораживает. Никогда проблем не было. И сейчас при закрытии одной из позиций из массива удаляется одна запись именно в том месте где у вас Print(). Если-бы закрытие не обработалось и не была-бы удалена запись, то появилась-бы в логе запись об ошибке.
Кажется получилось, на каждый ТэйкПрофит есть принт с минусами и на каждый вход в рынок - принт с плюсами. Извините за колхозный слэнг, но я абсолютный самоучка, общаться на эту тему нескем, словей не знаю.
voidOnTradeTransaction(constMqlTradeTransaction& trans,
constMqlTradeRequest& request,
constMqlTradeResult& result)
{
//---if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
{
if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN )
{
if(PositionSelectByTicket(trans.position))
{
Print("Открыта позиция +++ ",trans.position," +++ Будет записана в структуру ArrayPosition ++++++++++++++");
}
else
{
Print("Закрыта позиция ---Тикет сделки--- ",trans.deal," ---Позицию в структуре ArrayDealOut пометить на удаление ------------");
}
}
}
//---
}
Конечно непонятно почему, но различие сделок по способу изменения позиций - НЕ РАБОТАЕТ. Они ВСЕ
DEAL_ENTRY_IN
Вот поэтому получается что можно их разделить только на имеющие собственную открытую позицию и на не имеющую таковой. На мой дилетантский взгляд - чистое упущение. Если знаете и умеете сообщить разработчикам и посчитаете нужным, сделайте плиз.
На символе EURUSD открылся новый бар в 2018.08.0214:00
HS 018:15:09.620 Core 12018.08.0214:00:08 market sell 0.01 EURUSD tp: 1.16177 (1.16223 / 1.16227 / 1.16223)
DR 018:15:09.620 Core 12018.08.0214:00:08deal #8162sell 0.01 EURUSD at 1.16223 done (based on order #8162)
KH 018:15:09.620 Core 12018.08.0214:00:08deal performed [#8162sell 0.01 EURUSD at 1.16223]
JF 018:15:09.620 Core 12018.08.0214:00:08 order performed sell 0.01 at 1.16223 [#8162sell 0.01 EURUSD at 1.16223]
OD 018:15:09.620 Core 12018.08.0214:00:08 CTrade::OrderSend: market sell 0.01 EURUSD tp: 1.16177 [done at 1.16223]
RK 018:15:09.620 Core 12018.08.0214:00:08 Открыта позиция +++ 8162 +++ Будет записана в структуру ArrayPosition ++++++++++++++
MK 018:15:09.620 Core 12018.08.0214:02:40 take profit triggered #8162sell 0.01 EURUSD 1.16223 tp: 1.16177 [#8163buy 0.01 EURUSD at 1.16177]
JI 018:15:09.620 Core 12018.08.0214:02:40 deal #8163buy 0.01 EURUSD at 1.16177 done (based on order #8163)
PK 018:15:09.620 Core 12018.08.0214:02:40 deal performed [#8163buy 0.01 EURUSD at 1.16177]
IM 018:15:09.620 Core 12018.08.0214:02:40 order performed buy 0.01 at 1.16177 [#8163buy 0.01 EURUSD at 1.16177]
IM 018:15:09.620 Core 12018.08.0214:02:40 Закрыта позиция ---Тикет сделки--- 8163 ---Позицию в структуре ArrayDealOut пометить на удаление ------------
CK 018:15:09.620 Core 12018.08.0214:47:40 take profit triggered #8161sell 0.01 EURUSD 1.16138 tp: 1.16092 [#8164buy 0.01 EURUSD at 1.16092]
MI 018:15:09.620 Core 12018.08.0214:47:40 deal #8164buy 0.01 EURUSD at 1.16092 done (based on order #8164)
RK 018:15:09.620 Core 12018.08.0214:47:40 deal performed [#8164buy 0.01 EURUSD at 1.16092]
IM 018:15:09.620 Core 12018.08.0214:47:40 order performed buy 0.01 at 1.16092 [#8164buy 0.01 EURUSD at 1.16092]
MM 018:15:09.620 Core 12018.08.0214:47:40 Закрыта позиция ---Тикет сделки--- 8164 ---Позицию в структуре ArrayDealOut пометить на удаление ------------
DK 018:15:09.620 Core 12018.08.0214:51:40 take profit triggered #7696sell 0.01 EURUSD 1.16070 tp: 1.16024 [#8165buy 0.01 EURUSD at 1.16024]
MH 018:15:09.620 Core 12018.08.0214:51:40 deal #8165buy 0.01 EURUSD at 1.16024 done (based on order #8165)
QJ 018:15:09.620 Core 12018.08.0214:51:40 deal performed [#8165buy 0.01 EURUSD at 1.16024]
MM 018:15:09.620 Core 12018.08.0214:51:40 order performed buy 0.01 at 1.16024 [#8165buy 0.01 EURUSD at 1.16024]
MM 018:15:09.620 Core 12018.08.0214:51:40 Закрыта позиция ---Тикет сделки--- 8165 ---Позицию в структуре ArrayDealOut пометить на удаление ------------
LK 018:15:09.620 Core 12018.08.0215:00:00 На символе EURUSD открылся новый бар в 2018.08.0215:00
GN 018:15:09.620 Core 12018.08.0215:00:07 market sell 0.01 EURUSD tp: 1.16125 (1.16171 / 1.16175 / 1.16171)
RN 018:15:09.620 Core 12018.08.0215:00:07 deal #8166sell 0.01 EURUSD at 1.16171 done (based on order #8166)
ML 018:15:09.620 Core 12018.08.0215:00:07 deal performed [#8166sell 0.01 EURUSD at 1.16171]
DE 018:15:09.620 Core 12018.08.0215:00:07 order performed sell 0.01 at 1.16171 [#8166sell 0.01 EURUSD at 1.16171]
PI 018:15:09.620 Core 12018.08.0215:00:07 CTrade::OrderSend: market sell 0.01 EURUSD tp: 1.16125 [done at 1.16171]
DG 018:15:09.620 Core 12018.08.0215:00:07 Открыта позиция +++ 8166 +++ Будет записана в структуру ArrayPosition ++++++++++++++
NG 018:15:09.620 Core 12018.08.0215:02:40 take profit triggered #8166sell 0.01 EURUSD 1.16171 tp: 1.16125 [#8167buy 0.01 EURUSD at 1.16125]
HM 018:15:09.620 Core 12018.08.0215:02:40 deal #8167buy 0.01 EURUSD at 1.16125 done (based on order #8167)
FG 018:15:09.620 Core 12018.08.0215:02:40 deal performed [#8167buy 0.01 EURUSD at 1.16125]
JI 018:15:09.620 Core 12018.08.0215:02:40 order performed buy 0.01 at 1.16125 [#8167buy 0.01 EURUSD at 1.16125]
JI 018:15:09.620 Core 12018.08.0215:02:40 Закрыта позиция ---Тикет сделки--- 8167 ---Позицию в структуре ArrayDealOut пометить на удаление ------------
DD 018:15:09.620 Core 12018.08.0216:00:00 На символе EURUSD открылся новый бар в 2018.08.0216:00
MK 018:15:09.620 Core 12018.08.0216:00:00 market sell 0.01 EURUSD tp: 1.16212 (1.16258 / 1.16262 / 1.16258)
NJ 018:15:09.620 Core 12018.08.0216:00:00 deal #8168sell 0.01 EURUSD at 1.16258 done (based on order #8168)
CP 018:15:09.620 Core 12018.08.0216:00:00 deal performed [#8168sell 0.01 EURUSD at 1.16258]
FN 018:15:09.620 Core 12018.08.0216:00:00 order performed sell 0.01 at 1.16258 [#8168sell 0.01 EURUSD at 1.16258]
QL 018:15:09.620 Core 12018.08.0216:00:00 CTrade::OrderSend: market sell 0.01 EURUSD tp: 1.16212 [done at 1.16258]
FS 018:15:09.620 Core 12018.08.0216:00:00 Открыта позиция +++ 8168 +++ Будет записана в структуру ArrayPosition ++++++++++++++
JQ 018:15:09.620 Core 12018.08.0217:00:00 На символе EURUSD открылся новый бар в 2018.08.0217:00
OP 018:15:09.620 Core 12018.08.0217:00:12 market sell 0.01 EURUSD tp: 1.16201 (1.16247 / 1.16251 / 1.16247)
LE 018:15:09.620 Core 12018.08.0217:00:12 deal #8169sell 0.01 EURUSD at 1.16247 done (based on order #8169)
RK 018:15:09.620 Core 12018.08.0217:00:12 deal performed [#8169sell 0.01 EURUSD at 1.16247]
IK 018:15:09.620 Core 12018.08.0217:00:12 order performed sell 0.01 at 1.16247 [#8169sell 0.01 EURUSD at 1.16247]
EG 018:15:09.620 Core 12018.08.0217:00:12 CTrade::OrderSend: market sell 0.01 EURUSD tp: 1.16201 [done at 1.16247]
QN 018:15:09.620 Core 12018.08.0217:00:12 Открыта позиция +++ 8169 +++ Будет записана в структуру ArrayPosition ++++++++++++++
FI 018:15:09.620 Core 12018.08.0217:02:40 take profit triggered #8168sell 0.01 EURUSD 1.16258 tp: 1.16212 [#8170buy 0.01 EURUSD at 1.16212]
MF 018:15:09.620 Core 12018.08.0217:02:40 deal #8170buy 0.01 EURUSD at 1.16212 done (based on order #8170)
MH 018:15:09.620 Core 12018.08.0217:02:40 deal performed [#8170buy 0.01 EURUSD at 1.16212]
LO 018:15:09.620 Core 12018.08.0217:02:40 order performed buy 0.01 at 1.16212 [#8170buy 0.01 EURUSD at 1.16212]
HP 018:15:09.620 Core 12018.08.0217:02:40 Закрыта позиция ---Тикет сделки--- 8170 ---Позицию в структуре ArrayDealOut пометить на удаление ------------
GN 018:15:09.620 Core 12018.08.0217:07:20 take profit triggered #8169sell 0.01 EURUSD 1.16247 tp: 1.16201 [#8171buy 0.01 EURUSD at 1.16201]
DF 018:15:09.620 Core 12018.08.0217:07:20 deal #8171buy 0.01 EURUSD at 1.16201 done (based on order #8171)
CH 018:15:09.620 Core 12018.08.0217:07:20 deal performed [#8171buy 0.01 EURUSD at 1.16201]
DN 018:15:09.620 Core 12018.08.0217:07:20 order performed buy 0.01 at 1.16201 [#8171buy 0.01 EURUSD at 1.16201]
DP 018:15:09.620 Core 12018.08.0217:07:20 Закрыта позиция ---Тикет сделки--- 8171 ---Позицию в структуре ArrayDealOut пометить на удаление ------------
Попробуйте пройти в отладчике нажав на синюю кнопку.
предварительно поставив точки останова и проверьте где какие значения имеются и какие ожидались. Так, вроде ошибок не вижу, поэтому надо проверять, следовательно писать открытие позиций, подгонять стопы так чтобы не долго ждать закрытия...
Во блин, для меня это вообще пока новая тема, а по какому принципу расставляются точки ? Впрочем не суть, ... спасибо, буду изучать.
А есть ли способ обратиться к какому либо помагеру от разработчика? Есть тут такая служба? Ну ведь непонятка на лицо, заходят транзакции, часть из них отбирается по условию, а остальные по !условию куда-то проваливаются. Ну тут ведь даже больших знаний не нужно.!
Во блин, для меня это вообще пока новая тема, а по какому принципу расставляются точки ? Впрочем не суть, ... спасибо, буду изучать.
А есть ли способ обратиться к какому либо помагеру от разработчика? Есть тут такая служба? Ну ведь непонятка на лицо, заходят транзакции, часть из них отбирается по условию, а остальные по !условию куда-то проваливаются. Ну тут ведь даже больших знаний не нужно.!
Никого из разработчиков конечно не спросишь. Вкратце так:
Ставите курсор на строку на которой надо остановиться, нажимаете F9 и появляется такая синяя точка на номере строки
это и есть точка останова. Ещё её можно установить двойным тычком по номеру строки. Так-же можно снять, можно поставить несколько. Все остальные тонкости отладки в справочнике.
Я вообще ничего не понимаю. Вот кусок кода из моего работающего советника
и ведь ни разу не остановился на DebugBreak(); значит всё отрабатывает без проблем.
Видимо у вас отрабатывает добавление ордера в историю, а вы ждёте тикет сделки.
Четко написано - добавил СДЕЛКУ, даже пропустил по этому условию в PRINT. А вот "тикет сделки" в этот принт не предоставляет, или не должен???
Четко написано - добавил СДЕЛКУ, даже пропустил по этому условию в PRINT. А вот "тикет сделки" в этот принт не предоставляет, или не должен???
Здесь у вас TRADE_TRANSACTION_HISTORY_ADD и мой ответ был именно с учётом этого.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Разделение открытых позиций на группы
Sergey Voytsekhovsky, 2020.04.12 13:20
Попробую с самого начала, ато в голове уже каша. Как говорил классик кино - "Ну кто так строит.....????".
Торговая транзакция уже есть, а тикета сделки еще нету. Я правильно понимаю ???
Я вообще ничего не понимаю. Вот кусок кода из моего работающего советника
и ведь ни разу не остановился на DebugBreak(); значит всё отрабатывает без проблем.
Видимо у вас отрабатывает добавление ордера в историю, а вы ждёте тикет сделки.
Кажется у Вас там ошибка, может потому и "не ставился"?
Я вообще ничего не понимаю. Вот кусок кода из моего работающего советника
Взял за основу кусок Вашего кода, чуть изменил и появился первый результат. Если конечно можно назвать результатом нестабильное появление нужного принта. Теперь он отрабатывает некоторые, далеко не все, меньше половины, срабатывания ТэйкПрофита, не могу уловить закономерность.
Кажется у Вас там ошибка, может потому и "не ставился"?
На самом деле в моём коде, для проверки и отладки, это было так
И перед тем как сюда скопировать я раскомментировал хвост и когда компиляция не получилась не ту лишнюю скобку удалил. Потом скомпилировал и не проверял.
Спасибо за подсказку. Мне пришлось-бы завтра прогнать несколько раз этот код чтобы выявить эту ошибку.
На самом деле в моём коде, для проверки и отладки, это было так
И перед тем как сюда скопировать я раскомментировал хвост и когда компиляция не получилась не ту лишнюю скобку удалил. Потом скомпилировал и не проверял.
Спасибо за подсказку. Мне пришлось-бы завтра прогнать несколько раз этот код чтобы выявить эту ошибку.
Рад что смог быть полезен.
Взял за основу кусок Вашего кода, чуть изменил и появился первый результат. Если конечно можно назвать результатом нестабильное появление нужного принта. Теперь он отрабатывает некоторые, далеко не все, меньше половины, срабатывания ТэйкПрофита, не могу уловить закономерность.
У меня тейки и стопы не предусмотрены. Но всё-же это настораживает. Никогда проблем не было. И сейчас при закрытии одной из позиций из массива удаляется одна запись именно в том месте где у вас Print(). Если-бы закрытие не обработалось и не была-бы удалена запись, то появилась-бы в логе запись об ошибке.
Конечно непонятно почему, но различие сделок по способу изменения позиций - НЕ РАБОТАЕТ. Они ВСЕ
DEAL_ENTRY_IN