将开放的职位分成若干组 - 页 10 1...345678910111213 新评论 Sergey Voytsekhovsky 2020.04.10 05:38 #91 我把它放在那里,让公众来评判。虽然我还没有附上任何支票,但我想它们应该可以发挥作用。 void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)// Открылась позиция { if(PositionSelectByTicket(trans.position)) { int SizeArrayPosition = ArraySize(ArrayPosition); ArrayResize(ArrayPosition,SizeArrayPosition+1); ArrayPosition[SizeArrayPosition].kod_clana = 0; ArrayPosition[SizeArrayPosition].open_price = trans.price; ArrayPosition[SizeArrayPosition].ticket_position = trans.position; ArrayPosition[SizeArrayPosition].identi_position = PositionGetInteger(POSITION_IDENTIFIER); ArrayPosition[SizeArrayPosition].open_tyme = (datetime)PositionGetInteger(POSITION_TIME); ArrayPosition[SizeArrayPosition].type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); Print("\n" "Открылась новая позиция: ticket = ",ArrayPosition[SizeArrayPosition].ticket_position); } } if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == (DEAL_ENTRY_OUT || DEAL_ENTRY_OUT_BY))// Закрылась позиция { int SizeArrayDealOut = ArraySize(ArrayDealOut); ArrayResize(ArrayDealOut,SizeArrayDealOut+1); ArrayDealOut[SizeArrayDealOut].ticket_position_out = trans.position; ArrayDealOut[SizeArrayDealOut].identi_position_out = HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID); } } } 而在OnTick的某处:DelitClosePositionFromArrayPosition()。 //+------------------------------------------------------------------+ //| Удаляем закрытые позиции из массива структуры //+------------------------------------------------------------------+ int DelitClosePositionFromArrayPosition() { int n = 0; if(!Refresh_Rates())return(false); //---Удаление закрытых позиций из структуры int SizeArrayDealOut = ArraySize(ArrayDealOut); int SizeArrayPosition = ArraySize(ArrayPosition); if(SizeArrayDealOut > 0) { for(int i = SizeArrayDealOut+1; i > 0; i--) { for(int y = SizeArrayPosition+1; y > 0; y--) { if(ArrayPosition[y].identi_position == ArrayDealOut[i].identi_position_out) { if(ArrayRemove(ArrayPosition,y,1) && ArrayRemove(ArrayDealOut,i,1)) { SizeArrayDealOut = ArraySize(ArrayDealOut); SizeArrayPosition = ArraySize(ArrayPosition); n++; break; } } } } } return(n); } Sergey Voytsekhovsky 2020.04.12 08:40 #92 下午好,我再一次恳求。第二天,我不明白为什么这段代码不工作了 //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { Print("Зашла сделка ########## ",trans.position," ###########"); if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)// Открылась позиция { if(PositionSelectByTicket(trans.position)) { int SizeArrayPosition = ArraySize(ArrayPosition); ArrayResize(ArrayPosition,SizeArrayPosition+1); ArrayPosition[SizeArrayPosition].kod_clana = 0; ArrayPosition[SizeArrayPosition].open_price = trans.price; ArrayPosition[SizeArrayPosition].ticket_position = trans.position; ArrayPosition[SizeArrayPosition].identi_position = PositionGetInteger(POSITION_IDENTIFIER); ArrayPosition[SizeArrayPosition].open_tyme = (datetime)PositionGetInteger(POSITION_TIME); ArrayPosition[SizeArrayPosition].type_position = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); ArrayPosition[SizeArrayPosition].StopLoss = trans.price_sl; ArrayPosition[SizeArrayPosition].TakeProfit = trans.price_tp; Print("Открыта позиция +++ ",trans.position," +++ записана в структуру ArrayPosition ++++++++++++++"); } } if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) != DEAL_ENTRY_IN) { Print("Закрыта позиция --- ",trans.position," --- записана в структуру ArrayDealOut ------------"); } } } 打印 "Deal entered.... "很顺利,然后应该有一个分叉,一些交易"Open position .... "被打印出来,但所有其他交易(这些是通过TakeProfit关闭头寸 的交易)没有被打印。 我不明白问题出在哪里。我将在下面用颜色标出损失的交易。 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:54:00 CTrade::OrderSend: market buy 0.01 EURUSD tp: 1.20621 [done at 1.20574] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:54:00 Зашла сделка ########## 1042 ########### 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:54:00 Открыта позиция +++ 1042 +++ записана в структуру ArrayPosition ++++++++++++++ 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:54:00 Зашла сделка ########## 1043 ########### 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:54:00 Открыта позиция +++ 1043 +++ записана в структуру ArrayPosition ++++++++++++++ 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:55:43 take profit triggered #1039 sell 0.01 EURUSD 1.20579 tp: 1.20532 [#1044 buy 0.01 EURUSD at 1.20532] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:55:43 deal #1044 buy 0.01 EURUSD at 1.20527 done (based on order #1044) 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:55:43 deal performed [#1044 buy 0.01 EURUSD at 1.20527] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:55:43 order performed buy 0.01 at 1.20527 [#1044 buy 0.01 EURUSD at 1.20532] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:55:43 Зашла сделка ########## 1039 ########### 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:56:30 take profit triggered #1042 sell 0.01 EURUSD 1.20571 tp: 1.20523 [#1045 buy 0.01 EURUSD at 1.20523] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:56:30 deal #1045 buy 0.01 EURUSD at 1.20523 done (based on order #1045) 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:56:30 deal performed [#1045 buy 0.01 EURUSD at 1.20523] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:56:30 order performed buy 0.01 at 1.20523 [#1045 buy 0.01 EURUSD at 1.20523] 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:56:30 Зашла сделка ########## 1042 ########### 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:57:00 На символе EURUSD открылся новый бар в 2018.01.02 18:57 2020.04.12 11:27:33.103 Core 1 2018.01.02 18:57:00 market sell 0.01 EURUSD tp: 1.20458 (1.20507 / 1.20509 / 1.20507) 所以它就像SOS !!! Sergey Voytsekhovsky 2020.04.12 08:56 #93 Alexey Viktorov: Alexey,这只是指OnTradeTransaction 事件的处理。 一个事件发生了,一个关闭头寸的交易已经被执行。此刻,这个位置已经不在了。你可以通过选择一个订单和交易的列表 来确认(代码中没有这样的列表),并阅读 请注意,我们谈论的是一个Hedge账户,该账户的头寸通常只有两个订单和两个交易。 下午好,如果不麻烦你的话,你在这个帖子里准确地描述了一切。我上面的两个帖子,我是想得到我需要的结果--承诺平仓。我还是不明白。 请告诉我,我哪里有错误或缺陷?????。 Sergey Voytsekhovsky 2020.04.12 09:53 #94 而这种方式根本就没有区别,所以事实证明,在TakeProfit上平仓也符合DEAL_ENTRY_IN 的要求?void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { Print("Зашла сделка ########## ",trans.position," ###########"); if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)// Открылась позиция { Print("Открыта позиция +++ ",trans.position," +++ записана в структуру ArrayPosition ++++++++++++++"); } if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) != DEAL_ENTRY_IN) { Print("Закрыта позиция --- ",trans.position," --- записана в структуру ArrayDealOut ------------"); } } } 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:58:00 CTrade::OrderSend: modify position #1252 EURUSD (sl: 0.00000, tp: 0.00000) [done] 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:38 take profit triggered #2540 sell 0.01 EURUSD 1.20473 tp: 1.20425 [#2676 buy 0.01 EURUSD at 1.20425] 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:38 deal #2676 buy 0.01 EURUSD at 1.20425 done (based on order #2676) 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:38 deal performed [#2676 buy 0.01 EURUSD at 1.20425] 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:38 order performed buy 0.01 at 1.20425 [#2676 buy 0.01 EURUSD at 1.20425] 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:38 Зашла сделка ########## 2540 ########### 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:38 Открыта позиция +++ 2540 +++ записана в структуру ArrayPosition ++++++++++++++ 2020.04.12 12:10:27.368 Core 1 2018.01.03 04:59:40 take profit triggered #2473 sell 0.01 EURUSD 1.20472 tp: 1.20424 [#2677 buy 0.01 EURUSD at 1.20424] Alexey Viktorov 2020.04.12 10:22 #95 Sergey Voytsekhovsky: 这样一来,根本就没有分离,事实证明,在TakeProfit关闭头寸也符合 DEAL_ENTRY_IN 的要求 ? 在我看来,对OnTradeTransaction事件的处理已经做了一些改变。 尝试将TRADE_TRANSACTION_DEAL_ADD替换为TRADE_TRANSACTION_HISTORY_ADD Sergey Voytsekhovsky 2020.04.12 11:01 #96 Alexey Viktorov: 在我看来,OnTradeTransaction事件的处理有了一些变化。 尝试将TRADE_TRANSACTION_DEAL_ADD替换为TRADE_TRANSACTION_HISTORY_ADD 没有帮助。谢谢你的反馈。 Sergey Voytsekhovsky 2020.04.12 11:07 #97 Alexey Viktorov: 在我看来,对OnTradeTransaction事件的处理做了一些改变。 尝试将TRADE_TRANSACTION_DEAL_ADD替换为TRADE_TRANSACTION_HISTORY_ADD 交易开仓 被打印出来,也就是说,这个选择是有效的。但不清楚如何选择交易--平仓,尽管它们在终端交易的列表中是可见的(总是高出几行/三行)。 Sergey Voytsekhovsky 2020.04.12 11:20 #98 我会从头开始尝试,因为我的脑子已经乱了。正如那部经典电影所说--"谁会像这样建造.....????"。 void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { if(trans.type == TRADE_TRANSACTION_HISTORY_ADD) { Print("Торговая транзакция = Добавление сделки в историю ######### Тикет сделки # ",trans.deal," ###########"); } } 有一笔交易,但还没有交易单。我理解得对吗? 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:15:00 deal performed [#405 buy 0.01 EURUSD at 1.20646] 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:15:00 order performed buy 0.01 at 1.20646 [#405 buy 0.01 EURUSD at 1.20646] 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:15:00 CTrade::OrderSend: market buy 0.01 EURUSD tp: 1.20694 [done at 1.20646] 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:15:00 Торговая транзакция = Добавление сделки в историю ######### Тикет сделки # 0 ########### 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:15:00 Торговая транзакция = Добавление сделки в историю ######### Тикет сделки # 0 ########### 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:16:02 take profit triggered #394 sell 0.01 EURUSD 1.20675 tp: 1.20627 [#406 buy 0.01 EURUSD at 1.20627] 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:16:02 deal #406 buy 0.01 EURUSD at 1.20627 done (based on order #406) 2020.04.12 14:14:19.287 Core 1 2018.01.02 13:16:02 deal performed [#406 buy 0.01 EURUSD at 1.20627] Alexey Viktorov 2020.04.12 11:23 #99 Sergey Voytsekhovsky: 交易开仓 被打印出来,也就是说,这个选择是有效的。但如何选择交易--平仓--并不清楚,尽管它们在终端的交易列表中是可见的(总是高出几行/三行)。 试着按下蓝色按钮传入调试器。 预先设定的断点,并检查数值的位置和预期的数值是什么。好吧,我似乎没有看到任何错误,所以我必须检查,因此写下开仓,调整止损,这样我就不用等很久才能关闭...... Alexey Viktorov 2020.04.12 11:27 #100 Sergey Voytsekhovsky:我会从头开始尝试,因为我的脑子已经乱了。正如那部经典电影所说--"谁会像这样建造.....????"。有一笔交易,但还没有交易单。我没看错吧? 我根本就不明白什么。以下是我运行中的EA的一段代码 /*********************TradeTransaction function**********************/ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { if(trans.type == TRADE_TRANSACTION_HISTORY_ADD) { if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN) { if(PositionSelectByTicket(trans.position && PositionGetString(POSITION_SYMBOL) == _Symbol) && PositionGetInteger(POSITION_MAGIC) == magick) { if(HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER))) { double priceGrid = HistoryOrderGetDouble(HistoryOrderGetTicket(0), ORDER_PRICE_OPEN); if(priceGrid == 0) DebugBreak(); 而且它从来没有在DebugBreak() 上停止过;所以一切工作都没有任何问题。 显然,你有一个订单被添加到历史中,你在等待一张交易单。 1...345678910111213 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我把它放在那里,让公众来评判。虽然我还没有附上任何支票,但我想它们应该可以发挥作用。
而在OnTick的某处:DelitClosePositionFromArrayPosition()。
下午好,我再一次恳求。第二天,我不明白为什么这段代码不工作了
打印 "Deal entered.... "很顺利,然后应该有一个分叉,一些交易"Open position .... "被打印出来,但所有其他交易(这些是通过TakeProfit关闭头寸 的交易)没有被打印。
我不明白问题出在哪里。我将在下面用颜色标出损失的交易。
所以它就像SOS !!!
Alexey,这只是指OnTradeTransaction 事件的处理。
一个事件发生了,一个关闭头寸的交易已经被执行。此刻,这个位置已经不在了。你可以通过选择一个订单和交易的列表 来确认(代码中没有这样的列表),并阅读
请注意,我们谈论的是一个Hedge账户,该账户的头寸通常只有两个订单和两个交易。下午好,如果不麻烦你的话,你在这个帖子里准确地描述了一切。我上面的两个帖子,我是想得到我需要的结果--承诺平仓。我还是不明白。
请告诉我,我哪里有错误或缺陷?????。
这样一来,根本就没有分离,事实证明,在TakeProfit关闭头寸也符合 DEAL_ENTRY_IN 的要求 ?
在我看来,对OnTradeTransaction事件的处理已经做了一些改变。
尝试将TRADE_TRANSACTION_DEAL_ADD替换为TRADE_TRANSACTION_HISTORY_ADD
在我看来,OnTradeTransaction事件的处理有了一些变化。
尝试将TRADE_TRANSACTION_DEAL_ADD替换为TRADE_TRANSACTION_HISTORY_ADD
没有帮助。谢谢你的反馈。
在我看来,对OnTradeTransaction事件的处理做了一些改变。
尝试将TRADE_TRANSACTION_DEAL_ADD替换为TRADE_TRANSACTION_HISTORY_ADD
交易开仓 被打印出来,也就是说,这个选择是有效的。但不清楚如何选择交易--平仓,尽管它们在终端交易的列表中是可见的(总是高出几行/三行)。
我会从头开始尝试,因为我的脑子已经乱了。正如那部经典电影所说--"谁会像这样建造.....????"。
有一笔交易,但还没有交易单。我理解得对吗?
交易开仓 被打印出来,也就是说,这个选择是有效的。但如何选择交易--平仓--并不清楚,尽管它们在终端的交易列表中是可见的(总是高出几行/三行)。
试着按下蓝色按钮传入调试器。
预先设定的断点,并检查数值的位置和预期的数值是什么。好吧,我似乎没有看到任何错误,所以我必须检查,因此写下开仓,调整止损,这样我就不用等很久才能关闭......
我会从头开始尝试,因为我的脑子已经乱了。正如那部经典电影所说--"谁会像这样建造.....????"。
有一笔交易,但还没有交易单。我没看错吧?
我根本就不明白什么。以下是我运行中的EA的一段代码
而且它从来没有在DebugBreak() 上停止过;所以一切工作都没有任何问题。
显然,你有一个订单被添加到历史中,你在等待一张交易单。