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

 
 

初期化シーケンス"{ ... "を拡張しているのです。}" のように、次のビルドでは、定数だけでなく、どんな式でも許されるようになります。

この変更の代わりに、(通常の式と同様に)列挙型に対する定数の使用に制限が設けられます:定数が列挙型の一部でない場合、適切なエラーが生成されます。

既存のコードを分析した結果、単一ゼロシーケンス"{0}"が誤って使用されることが多いことがわかった。

例えば、こんな風に。

MqlTradeRequest request={0};


この表記は、構造体の最初のフィールドに0を設定し、残りのフィールドをゼロにすることを意味する。

上記のコード行では、新しいルールによると、最初のフィールドのタイプがENUM_TRADE_REQUEST_ACTIONS、値 "0" を欠く列挙型 であるためエラーとなります。

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


というのが正しい方法でしょう。

MqlTradeRequest request={};
 
Ilyas:

これは正しい。

MqlTradeRequest request={};

そうすると、request.actionは何と同じになるのでしょうか?

 
mktr8591:

そうすると、request.actionは何と同じになるのでしょうか?

もちろん、この構造体のオブジェクトに対してZeroMemoryが 呼び出されるように、ゼロになります

 

時系列やそれに基づく指標を把握する方法は?

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

スラバ さん 2021.05.29 18:16

思い出してほしい。

1.少なくとも1つのチャートが開かれている各シンボルについて、受信したティックを処理するために別のスレッドが動作しています。あるシンボルに対して複数のチャートが開かれていても、スレッドは1つだけです。

2.シンボルスレッドでは、チャートではなく、時系列を扱います。つまり、CopyRatesリクエストに提出される、まったく同じデータ配列です。

3. OnTickやOnCalculateで、シンボルが同期しているかどうかを確認するのは無駄です。もちろん、そうです。

4.すべての時系列は、低いものから高いものへと順番に処理されます。まず、ティックを適用し、この時系列で作成されたすべての指標を計算する。M1で動作するインジケータから同じH1シンボルのデータを要求しても、適用されたティックでデータを取得することはできません。どんなトリックを施しても、データは必ず1ティック戻る。連続したタイムフレーム処理で1シンボルにつき1スレッドだから。

5.EAとスクリプトはそれぞれ別のスレッドで動作するため、前言は当てはまりません。


 
Andrey Khatimlianskii:

時系列やそれに基づく指標を把握するにはどうしたらよいですか?

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

スラバ さん 2021.06.01 06:34

最初のリクエストの際、インジケータはそのシンボルからではなく、別のタイムフレームからデータを受け取ることがあります。

リクエストに失敗した後は、チャートを更新するコマンドを 送るだけで、OnCalculateを直ちに終了させます。OnCalculateが呼び出され、この時間までにタイムスケールが準備されることが保証されています。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2017.11.30 09:48

メモ

アクション/プログラムの種類 TFまたはシンボルの変更 アカウント変更
インジケーター OnDeinitとOnInitを実行すると、グローバルクラスのオブジェクトが変更されます(フルリセット)。 prev_calculatedがリセットされる以外は何も起こりません。
電子ブック OnDeinitとOnInitを実行しても、グローバルクラスのオブジェクトは 変更されません。 OnDeinitとOnInitを実行すると、グローバルクラスのオブジェクトが変更されます(フルリロード)。
指標の強調された挙動が変化した。EAと同じになりました。
 
fxsaber:
ハイライトされたインジケーターの動作が変更されました。EAと一致するようになりました。

ポイントは別にある。意図的な行動変化ではなく、見落としの可能性もあるのでは?見つかったんですか?

 
Artyom Trishkin:

ポイントは別にある。意図的な行動変化ではなく、見落としの可能性もあるのでは?認識できましたか?

してないんです。フィードバックはほとんどない。ところが、ここにきて、こんな機能があることを知りました。

const bool Init = EventSetMillisecondTimer(1);
const long Account = AccountInfoInteger(ACCOUNT_LOGIN);

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTimer()
{
  if (Account != AccountInfoInteger(ACCOUNT_LOGIN))
    Alert(TOSTRING(Account) + TOSTRING(AccountInfoInteger(ACCOUNT_LOGIN)));
}

このExpert Advisorは、口座間の切り替え時に警告を発します。ルール上、そうしてはいけないようです。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

mql5言語の特徴、微妙なニュアンスとコツ

fxsaber さん 2017.11.30 09:48

メモ

アクション/プログラムの種類 TFまたはシンボルの変更 アカウント変更
インジケーター OnDeinitとOnInitを実行すると、グローバルクラスのオブジェクトが変更されます(フルリセット)。 prev_calculatedがリセットされる以外は何も起こりません。
電子ブック OnDeinitとOnInitを実行しても、グローバルクラスのオブジェクトは 変更されません。 OnDeinitとOnInitを実行すると、グローバルクラスのオブジェクトが変更されます(フルリロード)。
ただし、これはタイマーによるものです。
 
fxsaber:

アカウント切り替え時にアラートを出すアドバイザーです。ルールからすると、してはいけないことだと思われます。

しかし、これはタイマーを使っているからこそ起こることです。

他のイベントハンドラが中断される(実行されない)ことは、誰も保証していない。

アラートの後、deinitとinitの両方が起こりますよね?

理由: