記事「取引トランザクション:リクエストとレスポンスの構造体、説明、ロギング」についてのディスカッション - ページ 4

 
MrBrooklin ポジションをクローズする 前に 停電があり、私のコンピュータの電源が切れたとします。また、この情報はどこかに保存さ れる のでしょうか?

このような理解しがたい瞬間について、もう少し詳しく説明してもらえますか?

よろしくお願いします。

データはサーバーに保存されます。ターミナルはそれを受信し、Expert Advisorはそれを使用します。

 
Artyom Trishkin #:

データはサーバーに保存される。端末はそれらを受信し、Expert Advisor はそれらを使用する。

では、なぜ今日、EAが昨日オープンした 取引を見つけられなかったのか。以前は見つかったのに。これがそのコードだ:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // 貿易取引の構造
   const MqlTradeRequest&        request, // リクエスト構造
   const MqlTradeResult&         result   // 応答構造
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

ちょっとした追加です。ロールオーバーは何らかの形でオープントレードのチケットに影響を与えることができますか?

よろしく、ウラジミール。

 
MrBrooklin #:

それなら、なぜ今日エキスパート・アドバイザーが昨日オープンした 取引を見つけられなかったのかが不思議だ。以前は見つかったのに。これがそのコードだ:

ちょっとした補足です。ロールオーバーは、未決済取引のチケットに何らかの影響を与えることができますか?

よろしく、ウラジミール。

未決済ポジションのIDで、そのすべての取引と注文を見つけることができます。

 
MrBrooklin #:

では、なぜ今日、エキスパート・アドバイザーが昨日の取引を見つけられなかった のか。以前は見つかったのに。これがそのコードだ:

ちょっとした補足です。ロールオーバーは、未決済取引のチケットに何らかの影響を与えることができますか?

よろしく、ウラジミール。

取引を行う際、サーバーは取引が行われたという「メッセージ」を端末に送信し、それを忘れる。サーバーは端末がそれを受け取ったかどうかを気にしません。そのため、端末の電源が切れている場合は、端末を閉じた瞬間から現在までの履歴を読むことによってのみ、取引の内容を知ることができます。

 
Alexey Viktorov #:
そのため、取引の瞬間に端末の電源がオフになっている場合、端末を閉じた瞬間から現在までの履歴を読むことによってのみ、その取引について知ることができます。

ハイ、アレクセイ、取引の瞬間、つまりポジションをオープンした瞬間、エキスパートアドバイザーがオープンしたため、ターミナルのスイッチはオンになっています。

ありがとうございます。

 
Artyom Trishkin #:

オープン・ポジションのIDから、すべての取引と注文を見つけることができます。

なるほど。ハンドブックをもっと勉強してみます。

それでは、ウラジミール。

 
MrBrooklin #:

ハイ、アレクセイ、トレードの瞬間、つまりポジションオープンの瞬間、エキスパートアドバイザーがオープンしていたため、ターミナルはオンになっていました。

ありがとうございます。

これを理解する方法

取引、自動取引システム、取引戦略のテストに関するフォーラム。

取引トランザクション。リクエストとレスポンスの構造、説明、ログ出力"

MrBrooklin、2023.10.17 16:48

なぜ今日、Expert Advisorが昨日開いた取引を見つけられなかった のでしょうか?さっきは見つかったのに。これがそのコードです:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // 貿易取引の構造
   const MqlTradeRequest&        request, // リクエスト構造
   const MqlTradeResult&         result   // レスポンス構造
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

少し補足します。ロールオーバーは、何らかの形で未決済取引のチケットに影響を与える、すなわち変更することができますか?

よろしく、ウラジミール。

だから昨日、それはそれを見つけた。そして今日、列車はすでに出発している...

もし昨日注文があり、保留中の注文があり、今日すでにポジションがあるのであれば、私が話しているように、その取引はターミナルがクローズされた瞬間にあったことになります... したがって、ポジションIDでそれを探してください。

 
Alexey Viktorov #:
従って、アルテムが言っているポジションIDで探す んだ。

アレクセイ、もう君に乗り換えたのかな?))

はい、ポジションIDについてはすでに理解して います。助けを借りながら、自分で考えてみます:

long position_ID=HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

ありがとう、ウラジミール。

 
MrBrooklin #:

では、なぜ今日EAが昨日の取引を見つけられなかった のか?

アレクセイ、私の考えを表現するのは難しいかもしれませんが、要するに次のようなことです:昨日EAはポジションをオープンしました。今日、アルゴリズムによれば、Expert Advisorは昨日オープンしたポジションを見て、ある操作を行うはずでした。しかし、私がまだ理解していない理由により、EAは昨日オープンしたポジションを見ず、それに応じて、何のアクションも起こしませんでした。私の考えをより明確に表現できたでしょうか?

ありがとう、ウラジミール。

 
MrBrooklin #:

アレクセイ、私の考えを表現するのは難しいかもしれないが、その本質は次のようなものだ:昨日、エキスパートアドバイザーはポジションを建てた。今日、アルゴリズムによれば、Expert Advisorは昨日オープンしたポジションを見て、ある操作を行うはずだった。しかし、私がまだ理解していない理由により、EAは昨日オープンしたポジションを見ず、それに応じて、何のアクションも起こしませんでした。私の考えをより明確に表現できたでしょうか?

ありがとう、ウラジミール。

ヴォロディア、この声については何度も話したね。できる限り説明したし、君はすべてを理解しているようだった。

OnTradeTransaction関数はイベント処理関数です。取引は昨日起こったイベントです。OnTradeTransaction 関数は昨日は機能するはずですが、今日は機能しません。今日はこのトランザクションのイベントはありません。