mql5言語の特徴、微妙なニュアンスとテクニック - ページ 7

 
RAMファイルを扱うには、次のような構成があります。
const int handleRAM = FileOpen("\\\\.\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN);

あらかじめ適切なファイルを作成して おく。

この実装では、例えば、任意の次元の(そして異なる)アレイを互いにコピーすることが、HDD/SDDを圧迫することなく、便利かつ高速に行えます。

// Копирование массивов любых размерностей (и разных) друг в друга
#define ARRAYCOPY(Dest, Source) \
  if (ArraySize(Source) > 0)                                                                  \
  {                                                                                           \
    const int handleRAM = FileOpen("\\\\REN\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN);  \
                                                                                              \
    if (handleRAM != INVALID_HANDLE)                                                          \
    {                                                                                         \
      if (FileWriteArray(handleRAM, Source) > 0)                                              \
        FileReadArray(handleRAM, Dest);                                                       \
                                                                                              \
      FileClose(handleRAM);                                                                   \
    }                                                                                         \
  }
普遍的な解決策である。このようなコピーの古典は、次のようになります。
// Копирует двумерный массив в одномерный
#define MATRIX_TO_VECTOR(Matrix, Vector)      \
  if (ArraySize(Matrix) > 0)                  \
  {                                           \
    const int Range1 = ArrayRange(Matrix, 0); \
    const int Range2 = ArrayRange(Matrix, 1); \
                                              \
    ArrayResize(Vector, Range1 * Range2);     \
                                              \
    int k = 0;                                \
                                              \
    for (int i = 0; i < Range1; i++)          \
      for (int j = 0; j < Range2; j++)        \
      {                                       \
        Vector[k] = Matrix[i][j];             \
                                              \
        k++;                                  \
      }                                       \
  }

// Копирует одномерный массив в двумерный
#define VECTOR_TO_MATRIX(Vector, Matrix)                               \
  if (ArraySize(Vector) > 0)                                           \
  {                                                                    \
    const int Size = ArraySize(Vector);                                \
    const int Range = ArrayRange(Matrix, 1);                           \
                                                                       \
    ArrayResize(Matrix, Size / Range + ((Size % Range == 0) ? 0 : 1)); \
                                                                       \
    for (int i = 0; i < Size; i++)                                     \
      Matrix[i / Range][i % Range] = Vector[i];                        \
  }
関数の代わりにマクロを使用するのは、関数に普遍的な大きさの配列を渡すことができないからです。
 
ドミトリー・フェドセーエフ

ポイントは、OrderSendの直後にOnTradeTransaction()が発動しないことです。

要するに、ここでは議論の対象にならずに論客が群がっているだけなのです。

OrderSend()の直後に何かをしなければならない場合、アルゴリズムには2つのバリエーションがあります。

1.注文や案件のリストの更新を待つループを開始することができます。

2.OnTick()を終了し、OnTradeTransaction()がトリガーするのを待ちます。

3.新しい注文や案件がリストに表示されるかどうか、ティックで確認します。

2 と 3 を選択 ))
 
mql5で4重のMODE_MARGINREQUIREDを置き換えることができるものは何ですか?
 
アルチョム・トリシキン
mql5でMODE_MARGINREQUIREDの代わりにできることは何ですか?

これは、フォーラムのメンバーの誰も知らないことなので、開発者に聞く必要があります。この質問を4回ほど別のスレッドで行い、一度は「検索を使え」という回答まで得たのですが、検索では100件以上の質問があり、回答は1件もありません。5では 入金通貨以外のペアの証拠金を得る可能性がない ためか、開発元が回答していない ようです。

Fiveではまだすべてが未完成で、今後もこの状態が続くと思われますが、みんなのためのOpenGLがあります =)。

 
Artyom Trishkin:
mql5で4重のMODE_MARGINREQUIREDを置き換えるものは何ですか?
OrderCalcMargin() try https://www.mql5.com/ru/docs/trading/ordercalcmargin
 
アンドレイ・バリノフ
OrderCalcMargin() try

これは理解できるのですが、インジケータからではうまくいきません

  double One_Lot=0.0;
  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
  Comment(One_Lot); // залог на 1 лот
 
ヴィタリー・ムジチェンコ

これは理解できるのですが、インジケータからではうまくいきません

  double One_Lot=0.0;
  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
  Comment(One_Lot);
ヘルプにちゃんと書いてあるんだけど、インジケータからだと動作しない https://www.mql5.com/ru/docs/runtime/running
 
アンドレイ・バリノフ
これはヘルプに明示的に書かれていることで、インジケータ https://www.mql5.com/ru/docs/runtime/running からは動作しない。
プログラムの種類に依存しない計算がしたい。
 
アルチョム・トリシキン
プログラムの種類に依存しない計算がしたい。
おおっ、私もいろいろと欲しいです :)
 
アンドレイ・バリノフ
おおっ、私もたくさん欲しいです :)
うーん...答えになってないなぁ...。
そしてこの質問は、あくまで枝葉の話題についてです。

理由: