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

 
MrBrooklin OnTick()関数の 前と後では根本的に違うのでしょうか?もし基本的なことであれば、それはなぜですか?

よろしくお願いします。

はい。違いはありません。少なくともプラグインファイルでは。

 
Artyom Trishkin #:

いいね。違いはない。プラグインファイルでもいい。

なるほど。ありがとう!

ウラジミール

 
Artyom Trishkin #:

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

アーテム、私の愚かさであなたを苦しめているかもしれませんが、取引の データはどれくらいの期間サーバーに保存されるのですか?1日、2日、3日...1年?文献も参考書も読みましたが、この情報はどこにもありませんでした。

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

 
MrBrooklin #:

アーテム、私のバカさ加減で退屈させてしまったかもしれないが、取引データは サーバーにどのくらい保存されるんだ?1日、2日、3日...1年?文献やハンドブックを読みましたが、このような情報はどこにもありませんでした。

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

ウラジミール、なぜ必要なんだ?このデータが必要なのは、議論の余地のある瞬間を解決するためだけだ。しかし、ブローカーが派手なことをすれば、何かを証明できる可能性は低い。また、具体的な保管時間はブローカー自身が設定するもので、これに関する規制はありません。

 
Alexey Viktorov #:

ウラジミール、なぜそれが必要なんだ?このデータが必要なのは、議論の余地がある点を解決するためだけだ。しかし、ブローカーが派手なことをすれば、何かを証明できる可能性は低い。また、具体的な保管時間はブローカー自身が設定するもので、これに関する規制はない。

こんにちは、アレクセイ、私は自己啓発のためにこれを知る必要があると同時に、徹底的に理解したいのです。私はこれらの取引を全く理解していないようです。あなたの話を聞いているときは、すべてがクリアに思えたのですが、少し時間が経つと、すべてが溶けてしまいました。また始まった!全く理解できない!

ウラジーミル

 

実例を挙げよう。私は週末のオープンポジションを持っています。これは私のライブ口座のスクリーンショットです:


取引が行われ、ポジションがオープンされています。スクリプトを実行します:

//+------------------------------------------------------------------+
//|1.mq5
//|著作権 2023, MetaQuotes Ltd.|
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
ulong pos_ticket;
double pos_open;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
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;
        }
     }
  }
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print("Ticket = ",pos_ticket);
   Print("Price = ",pos_open);
  }
//+------------------------------------------------------------------+

Experts タブに結果が表示されます:

2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Ticket = 0
2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Price = 0.0

Artyomは、取引がサーバーに保存されると書きましたが、どれくらいの期間保存されるかは書いていません。どうしてですか?私は最後までそれを理解しようとしています。

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

 
MrBrooklin #:

実例を挙げよう。私は週末のオープンポジションを持っています。これは私のライブ口座のスクリーンショットです:


取引が行われ、ポジションがオープンされています。スクリプトを実行しています:

Experts タブに結果が表示されます:

Artemは、取引がサーバーに保存されていると書きましたが、どれくらいの期間保存されているかは教えてくれませんでした。どうしてですか?私は最後までそれを理解しようとしています。

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

あなたはスクリプトを実行 しました。

void OnStart()
  {
   Print("DateTime = ", TimeCurrent());
  }

それはイベントです。昨日スクリプトを実行したなら、昨日プリントアウトされたはずです。そして今日、昨日の日付と昨日の時刻がプリントアウトされることはありません。今日スクリプトを実行すれば、またイベントとなる。そしてまた、現在の日付と時刻がプリントアウトされる。

頭を叩けば、それはイベントだ。そして明日、あなたは昨日のTUKから何も感じなくなる......。

 

こうしてスクリプトは問題なくポジションと必要なデータを見つける:

//+------------------------------------------------------------------+
//|2.mq5
//|著作権 2023, MetaQuotes Ltd.|
//|https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print("Ticket = ",PositionGetInteger(POSITION_IDENTIFIER));
         Print("Price = ",PositionGetDouble(POSITION_PRICE_OPEN));
     }
  }
//+------------------------------------------------------------------+

結果:

2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Ticket = 1029935900
2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Price = 1.05...

市場が開いていようが閉じていようが、停電があろうがなかろうが、インターネットが停止していようがなかろうが、このバリアントは問題なく動作します。しかし、この目的のために、我々はサイクルを実行する必要があり、専門家によると、プログラムの実行が遅くなります。

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

 
Alexey Viktorov #:

頭をたたく、それが出来事だ。そして明日は、昨日のトゥクトゥクから何も感じなくなる......。

履歴の取引は、取引セッションが終了するまでしかサーバーに保存されないことが判明した?そうなんですか?

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

 

とまれ!では、1日取引した後でも、エキスパートアドバイザーはこの取引(つまりオープンポジション)を見て、アルゴリズム通りに動いたのだろうか?いや、とんでもないことだ!

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