記事"MetaTrader 5 の注文、ポジション、取引"についてのディスカッション - ページ 2

 

Торговыми событиями считаются следующие изменения на счете:

  • 資金の引き落としと請求
  • 手数料、スワップ、税金の請求
  • 注文の設定、削除、変更
  • 注文に基づく取引の執行
  • ポジションの開始と決済
  • ポジションの数量および方向の変更。

このリストには、未決済ポジションの「損切りおよび/または利食いレベルの変更(SL & TP Modification)」のような取引イベントは含まれていません。それとも、「注文に基づく 取引の執行」の特別なケースと見なされるのでしょうか?

 
Yedelkin:

このリストには、未決済ポジションの「StopLoss および/または TakeProfit レベルの変更(SL および TP の変更)」のような取引イベントは含まれていません。それとも、「注文に基づく取引」の特別なケースと見なされるのでしょうか?

「未決済ポジションの「StopLoss および/または TakeProfitレベルの変更(SL および TP の変更)」は、「注文の設定、削除、および変更」に近いです。
  • 注文の設定、削除、変更
 
Rosh:
「未決済ポジションでの「StopLossおよび/またはTakeProfitレベルの変更(SLおよびTPの変更)」の方が近いです。

この質問について考えていました。しかし、実際には、「注文の設定、削除、修正」といえば、未決 注文の設定、削除、修正のことです。未決済ポジションの SLおよび/またはTPレベルの変更は、対応する要求が「即時 執行の注文」のカテゴリーに属するため、多少性質が異なります。それとも、「即時約定」について私が間違っているのでしょうか?

 
Rosh:

この記事では1日分の取引履歴を読み込む例を示しています(あるコードでは3日分の履歴を読み込む例を示しています)。そう、これは限界であり、この例は万能ではない。しかし、もし読者が記事を読みながらこの特殊性を理解すれば、どのような間隔でどの時点から 取引履歴を キャッシュに読み込む 必要があるのか、自分で判断できるようになるだろう。

読者は最も簡単な例とアルゴリズムを手に入れ、必要なイベント処理 機能にそれらを独自に適用することができる。自分自身の取引履歴ベースを作成し、その初期化、同期化などを独自に行うことができる。

取引履歴を使った最適な作業のための具体的なレシピや関数を、すべてのケースについて説明しようとすると、少なくとももうひとつ記事が必要になる。より正確には、例そのものではなく、特定のタスクを解決するためのアプローチである。この記事は、取引機能がどのように機能し、どのようなニュアンスに注意を払うべきかを理解することで、自分の研究時間を無駄にしないことを目的としている。

この記事を読めば、これからはすべてが簡単になると確信しています。

ラシッド、私は記事の有用性を軽視しているわけではない。

ただ、実例(EAを書くのに応用できるもの)が ないと、かなり参考的になってしまうということだ。

たしかに有用な情報が書かれているし、理解ある人なら利用できるだろう。しかし、素朴なユーザーは、この記事だけを読んでも、ヒストリーを使った通常の仕事を整理することはできないだろう。

 

記事の中にそのような箇所がある:

"例えば、最終日の注文を検索し、その情報を表示するスクリプトです。

// --- 必要な取引履歴の境界を定義する
   datetime end=TimeCurrent();                 // 現在のサーバー時刻
   datetime start=end-PeriodSeconds(PERIOD_D1);// 開始時刻を24時間前に設定
//--- プログラムキャッシュにその日の取引履歴を要求する。
   HistorySelect(start,end);
//--- 履歴の注文数を取得する
   int history_orders=HistoryOrdersTotal();
//--- リストの最後のインデックスを持つ履歴から注文のチケットを取得する
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // キャッシュで過去のオーダーを取得し、それを使用する
     {
      //--- 注文状況
      ENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
      long order_magic      =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
      long pos_ID           =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
      PrintFormat("Order #%d: ORDER_MAGIC=#%d, ORDER_STATE=%d, ORDER_POSITION_ID=%d",
                  order_ticket,order_magic,EnumToString(state),pos_ID);

     }
   else              // 注文を取ろうとしたが失敗

     {
      PrintFormat("注文履歴の合計が %d で、注文の選択に失敗しました"+
                  " をインデックス %d で返します。エラー %d",history_orders,history_orders-1,GetLastError());
     }

スクリプトの説明では、最後の注文が検索されると書かれていますが、コード自体は、過去の注文のリストの中で最後のインデックスを 持つチケットを取得すると言っています:

//--- 最後のインデックスを  持つ履歴から注文のチケットを取得する。  в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
つまり、最後の注文を参照するのは、最大のインデックスを持つチケットであることが暗示されています。しかし、過去の注文リストの中で、最後の注文が常に最大のインデックスを持つことが保証されて いるとは、資料のどこにも書かれていませんでした。しかし、リストにもっと多くのオーダーがある場合、最後のオーダーを見つけるという提案された方法に常に頼ることができるだろうか?言い換えれば、歴史的な最後の注文は、常に歴史的な注文リストの中で最大のインデックスを持つことが保証されて いるのでしょうか?
 

こんにちは!

1) ポジションプロパティを見ました:

ポジション_利益

これは何ですか?

double profit =PositionGetDouble(POSITION_PROFIT);

結果

EURUSDポジション #101470723:POSITION_MAGIC=0、オープンポジション価格=1.30825、クローズポジション価格=1.30835、タイプ=POSITION_TYPE_BUY、利益=-2061584302、コメント=.

profit=-2061584302 どう理解すればいいのでしょうか?

2) どなたか、このエントリーの読み方を正確に、しかし簡単に説明してください。

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

おそらく、PositionGetInteger(POSITION_TYPE) cis関数は、事前に選択された位置のPOSITION_TYPEというプロパティの値を要求していますが、この値は列挙シーケンス番号として返され、消化可能な形式で表現するために、この消化可能な値をENUM_POSITION_TYPE cis列挙からtype変数に既に取得し、そのtypeは同時にENUM_POSITION_TYPEとして宣言されているのではないでしょうか?

その場合、あるクラスを自分で書くことが可能で、そのクラスは関数になるということでよろしいでしょうか?

初期化 textPosition = その特定のクラス; // そのコンストラクタで、位置バッファを読み込み、すべてのパラメータを記憶する。

そして使用する:

tekPriceOpening=tekPosition.PriceOpening;

tekDirectionPosition=tekPosition.DirectionPosition;

tekDirectionPosition=tekPosition.DirectionPosition;

tekProfitPosition=tekPosition.ProfitPosition;

ありがとうございました!

 
bivmail:

2) どなたか、このエントリの読み方を正確に、しかし簡単に説明してください。

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

関数 PositionGetInteger("property identifier") は、long 型の値を返す。プロパティ識別子 "が long 以外の型の場合(例えば、POSITION_TYPE 識別子がENUM_POSITION_TYPE 型の場合)、PositionGetInteger() 関数によって返される値を、必要な型の値(つまりENUM_POSITION_TYPE 型の値)にキャストすることが望ましい。

この例では、ENUM_POSITION_TYPE 型の変数型が宣言され、その変数型に ENUM_POSITION_TYPE 型の値が代入され、long 型の値が ENUM_POSITION_TYPE 型の値に明示的に変換された結果として得られます。

数値型の値のキャストのルールは、MQL5 Reference Guide /Language Basics /Data Types / Type Casting /Casting Numeric Typesで説明されています。

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - Документация по MQL5
 

記事より引用:「取引サーバーへの接続が失われると、端末は定期的に 接続の復元を試みます。

接続の回復を試みる頻度はどのくらいですか?

 
5秒ごと。
 

ありがとう。