オープンポジションをグループ分けする - ページ 10 1...345678910111213 新しいコメント Sergey Voytsekhovsky 2020.04.10 07: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 10:40 #92 こんにちは、今回もお願いします。2日目 なぜこのコードが動作しないのか理解できない //+------------------------------------------------------------------+ //| 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 10:56 #93 Alexey Viktorov: Alexey、それはすべてOnTradeTransaction イベントの処理にのみ関連しています。 イベントが発生し、ポジションを閉じる取引が実行されました。この瞬間、すでにポジションはなくなっている。これは、注文と案件のリストを選択 し(コード内にそのようなリストはありません)、読み取ることで確認できます。 そして、私たちは、ポジションが通常2つの注文と2つの取引しかないハッジ口座について話していることに注意してください。 こんにちは、ご迷惑でなければ、この投稿ですべてを的確に表現されていますね。上の2つの投稿で、私は必要な結果を得ようとしています-ポジションを閉じることを約束すること。やっぱり無理です。 どこに間違いや欠陥があるのか、ご指摘ください。 Sergey Voytsekhovsky 2020.04.12 11: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 12:22 #95 Sergey Voytsekhovsky: そして、この方法では、全く分離がありません。TakeProfitでポジションを閉じることも DEAL_ENTRY_INに 適合することが判明しました ? OnTradeTransactionイベントの処理に一部変更があったようです。 TRADE_TRANSACTION_DEAL_ADDをTRADE_TRANSACTION_HISTORY_ADDに置き換えてみてください。 Sergey Voytsekhovsky 2020.04.12 13:01 #96 Alexey Viktorov: OnTradeTransactionイベントの処理に何らかの変更が加えられたようです。 TRADE_TRANSACTION_DEAL_ADDをTRADE_TRANSACTION_HISTORY_ADDに置き換えてみてください。 うまくいかない。ご感想をお寄せいただきありがとうございました。 Sergey Voytsekhovsky 2020.04.12 13:07 #97 Alexey Viktorov: OnTradeTransactionイベントの処理に何らかの変更が加えられたようです。 TRADE_TRANSACTION_DEAL_ADDをTRADE_TRANSACTION_HISTORY_ADDに置き換えてみてください。 取引開始位置が 印刷される、つまりこの選択は有効です。しかし、取引-決済ポジションは端末の取引リスト(常に2~3行上)に表示されているにもかかわらず、どのように選択するのかが不明です。 Sergey Voytsekhovsky 2020.04.12 13: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 13:23 #99 Sergey Voytsekhovsky: 取引開始位置が 印刷される、つまりこの選択は有効です。しかし、端末の取引一覧(常に2~3行上)に表示されているにもかかわらず、取引(終値)を選択する方法は明確ではありません。 青いボタンを押して、デバッガーを通過させてみてください。 あらかじめ設定されたブレークポイントで、どこにどんな値があるのか、どんな値が期待されているのかを確認します。OK、エラーは出ていないようなので、チェックして、それ故にオープンポジションを書き、クローズまで長く待つ必要がないようにストップを調整する必要があります...。 Alexey Viktorov 2020.04.12 13: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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
一般の方に判断してもらうために出しているんです。まだチェックを付けていないけれども、うまくいくはずだと思う。
そして、OnTick:DelitClosePositionFromArrayPosition()のどこかにあります。
こんにちは、今回もお願いします。2日目 なぜこのコードが動作しないのか理解できない
Deal entered... "の印刷はうまくいき、その後、いくつかのディール"Open position ... "は印刷 されるが、他のすべてのディール(これらはTakeProfitでポジションを 閉じるディール)は印刷されない という分岐があるはずだ。
何が問題なのか理解できない。以下、失われたトレードをカラーでマークしておきます。
だから、SOSのようなものだ !
Alexey、それはすべてOnTradeTransaction イベントの処理にのみ関連しています。
イベントが発生し、ポジションを閉じる取引が実行されました。この瞬間、すでにポジションはなくなっている。これは、注文と案件のリストを選択 し(コード内にそのようなリストはありません)、読み取ることで確認できます。
そして、私たちは、ポジションが通常2つの注文と2つの取引しかないハッジ口座について話していることに注意してください。こんにちは、ご迷惑でなければ、この投稿ですべてを的確に表現されていますね。上の2つの投稿で、私は必要な結果を得ようとしています-ポジションを閉じることを約束すること。やっぱり無理です。
どこに間違いや欠陥があるのか、ご指摘ください。
そして、この方法では、全く分離がありません。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に置き換えてみてください。
取引開始位置が 印刷される、つまりこの選択は有効です。しかし、取引-決済ポジションは端末の取引リスト(常に2~3行上)に表示されているにもかかわらず、どのように選択するのかが不明です。
もう頭の中がぐちゃぐちゃなので、最初からやってみることにします。映画の名作にあったように、「こんなの誰が作るんだ......?
トレード取引 はあるが、トレードチケットはまだない。これで良いのでしょうか?
取引開始位置が 印刷される、つまりこの選択は有効です。しかし、端末の取引一覧(常に2~3行上)に表示されているにもかかわらず、取引(終値)を選択する方法は明確ではありません。
青いボタンを押して、デバッガーを通過させてみてください。
あらかじめ設定されたブレークポイントで、どこにどんな値があるのか、どんな値が期待されているのかを確認します。OK、エラーは出ていないようなので、チェックして、それ故にオープンポジションを書き、クローズまで長く待つ必要がないようにストップを調整する必要があります...。
もう頭の中がぐちゃぐちゃなので、最初からやってみることにします。映画の名作にあったように、「こんなの誰が作るんだ......?
トレード取引はあるが、トレードチケットはまだない。私の読みは正しいのでしょうか?
全く理解できないんです。以下は、私の実行中のEAからのコードの一部です。
また、DebugBreak();で停止することもなく、すべて問題なく動作しています。
どうやら注文が履歴に追加され、トレードチケット待ちの状態になっているようですね。