記事"単一インスツルメント上で異なるExpert Advisorsを使ったトレーディングのためのORDER_MAGICの使用"についてのディスカッション - ページ 2

 
ias:


2.式(int)が何を表し、どのような値をとるか(int) DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;


明示的な型変換について 読む。
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
ias:


2..式(int)が何を意味し、どのような値を取るか int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.テスト中に式(int)とSYMBOL_VOLUME_STEPがUnknown識別子の値を取るのはなぜですか?また、それが結果のint DIGITSにどのように影響しますか?
4.相互作用コードはどのように機能しますか?
EAが同じインストゥルメントで動作する場合、相互作用コードは重要ですか?

式(int)は、以下の式をint型に 変換したものです。

SYMBOL_VOLUME_STEP式は、ENUM_SYMBOL_INFO_INTEGER列挙型の値の1つです。

上記の式はどれも変数ではないので、当然、Debuggerでは「不明な識別子」という値になっています、

これは文字通り "認識できない "という意味で、Debuggerはトラッキングのために宣言された変数がどのような型に属しているのか理解できません。


Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
ias:


4.相互作用コードはどのように機能しますか?
EAが同じインストゥルメントで動作する場合、相互作用コードは問題になりますか?

すみません、気が散って4番目の質問に答えていませんでした。

インタラクションコードは、信頼できる複数のExpert Advisorのための1つのマジックとして使用されます。

例えば、完全に完成されたEAがあり、何も変更したくないが、トレーリングEAを作成し、このEAとどのように動作するかをテストしたい場合、元のEAとトレーリングEAを起動し、両方のEAに同じ相互作用コードを与えると、それらは他のEAのアクションを自分のものとして認識し、そのような相互作用コードを持たない第3のEAによって行われた変更は無視されます(それらは選択されたEAのペアには見えません)。

同時に、EAの識別コード(デジタルネーム)が異なるため、いくつかのデータを別々に処理することができます、

すべては、あなたがそれを形成するように要求によって異なります(例えば、トロールの作業に関するレポートのみを形成することができます)。

同じトランザクションでも、リクエストによって、自分のものにも他人のものにもなります。

削除済み  
ias:


2..式(int)が何を意味し、どのような値を取るか int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;
3.テスト中に式(int)とSYMBOL_VOLUME_STEPがUnknown識別子の値を取るのはなぜですか?また、それが結果のint DIGITSにどのように影響しますか?
4.相互作用コードはどのように機能しますか?
EAが同じインストゥルメントで動作する場合、相互作用コードは重要ですか?

コードの意味をよく理解していないようなので、何が起こるか詳しく理解しましょう。

int DIGITS=(int)-log10(SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP)); if(DIGITS<0)DIGITS=0;

1.SYMBOL_VOLUME_STEP - 取引を行うための最小数量ステップ(通常は0.01);

2.2.この数値の10進数の対数を取得します。-log10(0,01) = 2または-log10(0,10) = 1 (MQの場合は-log10(0,10) = 1);

3. 結果(-2/-1)をint型の変数DIGITSに等化する。

4.DIGITS<0の場合、値=0を代入する。

PS

(int)は計算結果を強制的にint型にするために使われる。

 

この記事には「ストップ・ロス/利益確定が発生した」という事象が反映されていません。そして、これは非常に強い省略です!

:Expert Advisorには2つのパートがあります:最初のパートは、指定されたシンボルとタイムフレーム上の「仮想ポジション」が0に等しいときに機能し、2番目のパートは、この仮想ポジション」が 0に等しくないときに機能します。あるシグナルで買いを入れ、「仮想ポジション」が +100 となった。ストップロスがトリガーされ、実際の仮想ポジション」は「0」となった。しかし、このケースでは+100となります。Expert Advisorはポジションが+100であると「考え」ますが、実際には0であり、望ましくない結果につながります。

この点について教えてください。

 
beast:

この記事には「ストップ・ロス/利益確定が発生した」という事象が反映されていません。そして、これは非常に強い脱落です!

:Expert Advisorには2つのパートがあります:最初のパートは、指定されたシンボルとタイムフレーム上の「仮想ポジション」が0に等しいときに機能し、2番目のパートは、この仮想ポジション」が 0に等しくないときに機能します。あるシグナルで買いを入れ、「仮想ポジション」が +100 となった。ストップロスがトリガーされ、実際の仮想ポジション」は「0」となった。しかし、このケースでは+100となります。Expert Advisorはポジションが+100であると「考え」ますが、実際には0であり、望ましくない結果につながります。

この点について教えてください。

その通り、この記事には逆指値注文を処理するモジュールは含まれていません。

マジックナンバーを使用する可能性について説明しています。

バーチャル・ポジションを使用するには、バーチャル・ストップが必要です。

 

では、なぜマジックが必要なのか。

なぜなら、履歴を掘り下げるためにそれを使用すると、このExpert Advisorによって発注された注文の全体像を把握できないからです。

 
beast:

では、なぜマジックが必要なのか。

なぜなら、履歴を掘り下げるためにそれを使用すると、このエキスパートアドバイザーが発注した注文の全体像を把握することができないからです。


取引戦略の一部としてストップを使用するのは間違いであることを理解する必要があります。サーバーに保存されているストップ注文は、何か問題が発生した場合(サーバーとの通信障害、市場でのパニック)から保護するための注文であり、その他のケースではEAシグナルの形式による仮想ストップ注文は非常に適しています。

しかし、実際には、プログラマーはストップを仮想化することを怠りがちである。結局のところ、既製の逆指値注文を使用する方がはるかに簡単なのです。

 

計算をする際には、すべての取引に目を通す必要がある。もし、あるマジシャンとの取引があれば、その取引量を考慮し、それ以外の取引は、ストップロス/ステイクプロフィットでクローズした事実をチェックし、もしあれば、計算した金額をリセットする必要がある。私の記事では、ストップロスは考慮されていません。誰が想像しただろうか...これは新しいトピックなので、失礼する。

EAがポジションをオープン し、EAを切断し、手動でポジションをクローズします。

例えば、1つのEAが0.1買いポジションを持ち、2つ目のEAが0.1売りポジションを持ったとします。

これに加えて、何らかの制御手段、すべてのマッグについて計算された数量が実際の数量と一致しているかどうかを計算するスクリプト、あるマジックでオープンし、別のマジックでクローズするという平準化の手段が必要です。

このことは、マジックの使用はまったく需要がないのか、もしそうなら、どうやって生きていくのか、という大きな問題を提起している......。

それぞれのアドバイザーに別の口座を開くべきか?

 

間違っていたら訂正してください...

異なるEAの操作とポジションを識別するために、あなたのコードと似たようなことを試さなければなりません。いくつか疑問があります。このコードは最適化されていますか?取引履歴が長く、複数のEAがこのコードを実行している場合、このコードは本当にコンピュータを遅くする可能性があると思います。

例えば、magic_exp1_en.mq5ではprHistory_Deals(ulong &buf[],int HTD) というメソッドが、バッファbuf[]を今までの取引で埋めています。

まだDEAL OUTで埋まっていない最後のDEAL INだけを保存した方が、パフォーマンス的には良いのではないでしょうか?

多分、私はこのコードが何をするのか本当に理解していないのだろう。magic_exp1_en.mq5でやって いることは、時間の始まりからのディールの全履歴についてです。)DEAL_TYPE_SELL と DEAL_TYPE_BUY の数量の合計が同じかどうかをチェックします。もし売りの数量の方が買いの数量よりも多ければ、一般的な売りポジションを持ち、買いの数量の方が売りの数量よりも多ければ買いポジションを持つ。

他の方法はないのか?