記事"MQL5入門: シンプルなExpert Advisorとカスタムインディケーターの書き方"についてのディスカッション

 

新しい記事 MQL5入門: シンプルなExpert Advisorとカスタムインディケーターの書き方 はパブリッシュされました:

MetaTrader 5 クライアントターミナルのMetaQuotesプログラミング言語 5 (MQL5)は、MQL4に比べ新しい可能性を含み、性能がより高いです。本記事はこの新しいプログラミング言語を紹介します。Expert Advisorとカスタムインディケーターの書き方のシンプルな例を本記事で紹介します。これらの例を理解するのに必要なMQL5言語の詳細についても考察します。

図 14. プログラムデバッグ

作者: Denis Zyatkevich

 
MACDやカスタム移動平均などの インジケータのデバッガを起動できません。F5キーを押すと、「コンパイル」ボタンが「キャンセル」ボタンに変わり、数秒後に画面が点滅し、すべてが初期状態に戻ります。デバッグ」タブは表示されません。スクリプト「AccountInfo」をデバッグする場合、デバッガは正常に動作します(Build 257)。
 
インジケーターのデバッグは 今のところ実装されていない。
 

勝利の日おめでとう!

アドバイスいただけますか?

Expert Advisor には、すべてのオープンポジションを交互に検索するサイクルがあります。このサイクルでは、PositionGetDouble(POSITION_SL)関数が 使用されています。POSITION_SL パラメーターの説明から、このパラメーターは未決済ポジションのストップロス・レベルを 取得するために使用することができます。

質問 1: 異なるストップロス・レベルの複数の未決注文をトリガーしてオープンポジションが形成された場合、 PositionGetDouble(POSITION_SL)関数はどのような値を表示しますか?

質問2: 異なるストップロス・レベルの複数の未決注文をトリガーした結果、オープンポジションが形成された場合、これらのストップロス・レベルのデータを取得する最良の方法は何ですか?

このトピックが以前に議論されたことがあれば、リンクを教えてください。

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

勝利の日おめでとうございます!

質問1:異なる損切りレベルの複数の未決注文をトリガーした結果、オープンポジションが形成された場合、PositionGetDouble(POSITION_SL)関数は どのような値を表示しますか?
関数が何を返すか確認しましたか?
 
sergeev:
その関数が何を返すか確認しましたか?

いや、していない。なぜなら、ある関数をチェック(テスト)するときに観察しなければならない重要な初期条件をすべて知らないからだ。そしてまた、私にとって初めてのプログラミング言語を学ぶときに、科学的な突き詰め方を使う可能性に対して否定的な態度のせいでもある。

説明しよう。Expert Advisorに特化した記事の数が非常に少なく、MQL5に関する教科書がないため、一般のユーザーは自分の取引戦略を実行する際に、この(非常に有用な)記事を含め、ウェブ上で入手可能な資料に頼らざるを得ません。

よくご理解いただいているように、私の質問は、MQL5リファレンスガイドの現行版やMQL5 Expert Advisorsに関する既存の記事には反映されていない、理論的および応用的な 側面に関するものです。

このような状況下では、実験や特定の条件下での「関数の戻り値の確認」などの素人的なことではなく、MQL5関数の 理論的・応用的な 側面について、知識のある人(言語開発者や記事の著者)に質問する方がはるかに合理的だと思います。

関数が何を返すか確認しましたか」というような(その関数の機能の特殊性を理解していない)逆質問よりも、「どうあるべきか」についての知識豊富な人々からの回答の方が最適に見えることに同意する。

 

答えが見つかりました。クライアントターミナルのユーザーズガイドに:

...Уровни Тейк Профит и Стоп Лосс устанавливаются для позиции по последнему ордеру (рыночному или сработавшему отложенному).
Иными словами, стоп уровни в каждом последующем ордере по одной позиции заменяют предыдущие. 
...Срабатывание ордеров Тейк профит и Стоп Лосс приводит к полному закрытию позиции.  

奇妙ですね。各金融商品に対してオープンポジションは1つしかできないため、ストップロスによるポジションの一部決済を伴うシナリオは原理的に実装できない ことがわかりますか?

追伸: MT5 固有のこの特殊性が判明した後、異なる損切りレベルを持つ複数の未決注文を トリガーした結果としてオープンポジションが形成された場合、PositionGetDouble(POSITION_SL) 関数によって返される値をチェックする必要はありません。

 
Yedelkin:

答えが見つかりました。クライアント端末のユーザーマニュアルに

奇妙ですね。各金融商品について、オープンポジションは1つのみ可能であるため、ストップロスによるポジションの一部決済を伴うシナリオは原則として実装できない ことがわかりますか?

追伸:MT5固有のこの特殊性が判明した後は、異なる損切りレベルの複数の未決注文をトリガーしてオープンポジションが形成された場合、PositionGetDouble(POSITION_SL)関数がどのような値を返すかをチェックする必要はありません。

また、「izpodvypodvert vypert vypert podvypert」という関数で、指定された商品の取引量に応じて、利益確定をレベル別の保留注文に分割することも可能です。

しかし、個人的には、ロックのない公式取引端末に慣れて いるので、この機能は不要だと考えています。

 
CoreWinTT:

can be made as a function "from-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub" ...

そう、この話題についてはすでに頭を悩ませている。選択肢は3つある :)

- 既存のシナリオをMT5の特殊性に合わせて創造的に作り直す;

- or create a class of sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub functions;

- または、注文で損切りと利益確定を使用せず、最初は反対方向の注文の束で操作する。

気にしないでください!:)

 

Expert Advisor のArraySetAsSeries 関数の 配置についての質問です。

ArraySetAsSeries関数はOnTick()関数内でCopyTime関数、CopyHigh関数、CopyLow関数の直後に配置されています。

ArraySetAsSeries関数をOnInit()関数に配置することに何か支障はありますか、それとも配列は常にコピーされた後にのみインデックスを付けるべきですか?

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
Операции с массивами / ArraySetAsSeries - Документация по MQL5
 
Yedelkin:

EAにArraySetAsSeries関数を配置することについての質問。

ArraySetAsSeries関数はOnTick()関数の中でCopyTime関数、CopyHigh関数、CopyLow関数の直後に配置されています。

ArraySetAsSeries関数をOnInit()関数に配置することに何か支障はありますか?それとも、配列は常にコピーされた後にのみインデックスされるべきですか?

指標バッファについては、SetIndexBufferと 書かれています:

注意

リンク後、動的配列 buffer[] は通常の配列と同様にインデックス付けされます。インジケータ配列の要素へのアクセス順序を変更する必要がある場合は、SetIndexBuffer() 関数で配列をバインドした後、ArraySetAsSeries() 関数を適用する必要があります。

エキスパートアドバイザーの場合も同様です。