Artemさん、mql4でポジションをオープンした後、または注文を有効化した後に、そのポジションのプロパティを 取得する必要があります。イベントのインデックスを取得する方法を見つけました。
ENUM_TRADE_EVENT engine.LastTradeEvent()
この時点で利用可能なプロパティを取得する必要があります。
enumも見つけたのですが、どうやって取得するのでしょうか?
Artemさん、mql4でポジションをオープンした後、または注文を有効化した後に、そのポジションのプロパティを 取得する必要があります。イベントのインデックスを取得する方法を見つけました。
現時点では、利用可能なプロパティを取得する必要があります。
enumも見つけたのですが、どうやって取得するのでしょうか...。
最後のイベントがポジションをオープンすることだとしたら?最後にオープンしたポジションを取得し、そのすべてのプロパティにアクセスする必要があるのでしょうか?そうですよね?
もしそうなら、それは簡単です(リストとオブジェクトの取得結果をチェックすることなく):

何とかなりそうだ。ありがとう。
次の質問(バカバカしいものではありません):2つの未決注文があります。そのうちのひとつがアクティベートされるとイベントが発生し、その後もうひとつがアクティベートされました。そして2つ目が起動されました。イベント受信後、番人を戻すにはどうすればいいのでしょうか?試してみました。
イベントを処理した 後、番人を戻すにはどうしたらいいでしょうか?イベントを正しく制御できていない。ライブラリはすべてのイベントをキャッチし、テストEAは過去のイベントと現在のイベントの違いをチェックします。そして、同じイベントが2つある。
原則的に、イベントを送信した後、ライブラリはイベント自体をリセットします。イベントを受信した後、もう一度イベントを受信してみてください。イベントがないことが変数に書き込まれ、次のイベントがキャッチされるはずです。
しかし、トレード・イベントはシンボルや口座のイベントと同じように行うべきだと、私はずっと前に計画に書いていた。そして、プログラムの中で、そのイベントが何であるかを見ることができる。Expert AdvisorのOnDoEasyEvent()関数では、フラグがまだ返されていないため、取引イベントだけがストッパーになっています:
//--- 貿易イベントの処理 else if(idx>TRADE_EVENT_NO_EVENT && idx<TRADE_EVENTS_NEXT_CODE) { event=EnumToString((ENUM_TRADE_EVENT)ushort(idx)); int digits=(int)SymbolInfoInteger(sparam,SYMBOL_DIGITS); }
イベントコントロールがおかしくなっています。ライブラリーはそれらをすべてキャッチし、テストEAは過去のイベントと現在のイベントの違いをチェックする。そして、同じイベントが2つある。
原則的に、イベントを送信した後、ライブラリはイベント自体をリセットします。イベントを受信した後、もう一度イベントを受信してみてください。イベントがないことが変数に書き込まれ、次のイベントがキャッチされるはずです。
しかし、トレード・イベントはシンボルや口座のイベントと同じように行うべきだと、私はずっと前に計画に書いていた。そして、プログラムの中で、そのイベントが何であるかを見ることができる。Expert AdvisorのOnDoEasyEvent()関数では、フラグがまだ返されていないため、取引イベントだけがストッパーになっています:
確かに、朝より晩の方が賢いですね...。イベントを受信した場合、私の特定のケースでは、我々は何らかの形でそれに反応する必要があります。特に、別の保留中の注文を 入れる。新しいイベントはここまで。
イベントコントロールがおかしくなっています。ライブラリーはそれらをすべてキャッチし、テストEAは過去のイベントと現在のイベントの違いをチェックする。そして、同じイベントが2つある。
原則的に、イベントを送信した後、ライブラリはイベント自体をリセットします。イベントを受信した後、もう一度イベントを受信してみてください。イベントがないことが変数に書き込まれ、次のイベントがキャッチされるはずです。
しかし、トレード・イベントはシンボルや口座のイベントと同じように行うべきだと、私はずっと前に計画に書いていた。そして、プログラムの中で、そのイベントが何であるかを見ることができる。Expert AdvisorのOnDoEasyEvent()関数では、フラグがまだ返されていないため、取引イベントだけがストッパーになっています:
しかし、eventはOnChartEventでのみ 利用可能な変数で、テスターでは処理されません。
OnTick()でこのようなことをしたいのです:
//--- 最後の取引イベントが変更された場合 if(engine.LastTradeEvent() != last_event) { switch(last_event) { case TRADE_EVENT_PENDING_ORDER_PLASED : // 対応する関数を呼び出す break; case TRADE_EVENT_PENDING_ORDER_REMOVED : // 対応する関数を呼び出す break; case TRADE_EVENT_PENDING_ORDER_ACTIVATED : // 対応する関数を呼び出す break; case TRADE_EVENT_POSITION_OPENED : // 対応する関数を呼び出す break; case TRADE_EVENT_POSITION_CLOSED : // 対応する関数を呼び出す break; default : break; }
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第22部): 取引クラス - 基本取引クラス、制限の検証 はパブリッシュされました:
この記事では、ライブラリベースの取引クラスの開発を開始し、最初のバージョンに取引操作を行うためのアクセス許可の初期検証を追加します。さらに、基本取引クラスの機能とコンテンツをわずかながら拡張します。
取引制限を確認するメソッドの動作を確認するには、制限を人為的に作成する必要があります。
以下は例です。
EA取引パネルでポジションを開くボタンをクリックすると、操作ログに以下が表示されます。
制限を1つずつ取り除きましょう。
インターネット接続を有効にした後でポジションを開こうとすると、次のメッセージが表示されます。
ターミナルで[AutoTrading]ボタンをクリックして、自動取引を有効にします。ポジションを開こうとすると、以下が表示されます。
F7を押して、EAの設定でEAが取引できるようにします。ポジションを開句試みはようやく成功します。
他の制限は、制限の1つがアクティブになったときに状況を作成することによってテスターまたはデモ口座で確認できます。例は、口座での未決注文の上限です。作者: Artyom Trishkin