マルチカレンシーEAがある。簡単に言うと、以下のような考え方です。あるシンボルに対してすべての計算を行い、別のシンボルに対して取引を行う。Expert Advisorは、新しいバーを開くという明示的な制御で動作します。そうすると、次の嫌なことが起こるんです。Expert Advisor が実際の口座で取引を開始(スキップ)していなくても、Strategy Tester で確認すると、この取引は存在していることがあります。あるいは、Expert Advisor が必要以上に遅いバーで実際の取引を開始しても、Strategy Tester で確認すると、取引は行われていることがあります。何に関連することができるのか?
新しい相場が来ても、古い相場で開くとポジションが開かないことがある...。
新しい相場が来ても、古い相場で開くとポジションが開かないことがある...。
言いたいことはわかるが、この状況をEAが処理するのである。ログを見ただけでは、まったく信号がない。これは、EAが自らトリガーをかけていない(ポジションを開く要求を出していない)ことを意味します。あるいは、次のバーでのみ動作しました。そして、このようなことは常に起こるわけではありません。でも、時々でいいんです。そして、それに関連するものがまったくわからない......。テスターでは、すべて正常に開閉していますが
多通貨EAがあります。簡単に言うと、意味は以下の通りです。すべての計算は、あるシンボルに対して行われ、取引は別のシンボルに対して行われます。Expert Advisorは、新しいバーを開くという明示的な制御で動作します。そうすると、次の嫌なことが起こるんです。Expert Advisor が実際の口座で取引を開始(スキップ)していなくても、Strategy Tester で確認すると、この取引は存在していることがあります。あるいは、Expert Advisor が必要以上に遅いバーで実際の取引を開始しても、Strategy Tester で確認すると、取引は行われていることがあります。何に関連することができるのか?
プリントアウトしてみる...
プリント(.
信号前、信号後、開口時、開口後
印刷明示条件
のように
// Print( " MyOPEN == 1 " + MyOPEN を待ちます );
if ( MyOPEN == 1 )
{
Print( " entered by MyOPEN == 1 " );.
}
---
それと、新しいBARのオープンについても !
スキップされたバーがあることに注意してくださいまた、テスターではミスバーが発生しない酒場を探すより、新しい酒場を探せ
---
今この瞬間も
チャートEURUSD M5で一日の初めから140バーが形成されたが、CHF 137バー、すなわち3バー:-)を失った。
CHFでEURに対応するバーを単純に探すと、バーを見落とす可能性があります。
---
で、再入力
シグナルが出たら、そのシグナルを見逃さずに、コンディションでエントリー、エグジットしてください。
で、信号がFILLEDになっているかどうか確認してください。
されるまで - 実行するコードを実行する - ループに入らないように、カウンタを作る
カウンターを出てから→入る必要があるかどうか確認→出ていく
そして、入る必要がある場合は、もう一度実行します。
----
さらに、トレーディングコード
しかも、このコードが単純であるはずがないのです
(トロールのロスレス開閉、つまりシグナルを受け取った後のオーダーを処理するような、メカニックの仕事を担当するコードがあります )
マルチカレンシーエキスパートアドバイザーがあります。簡単に言うと、以下のような考え方です。すべての計算は、あるシンボルに対して行われ、取引は別のシンボルに対して行われます。Expert Advisorは、新しいバーを開くことを明示的に制御して動作します。そうすると、次の嫌なことが起こるんです。Expert Advisor が実際の口座で取引を開始(スキップ)していなくても、Strategy Tester で確認すると、この取引は存在していることがあります。あるいは、Expert Advisor が必要以上に遅いバーで実際の取引を開始しても、Strategy Tester で確認すると、取引は行われていることがあります。何に関連することができるのか?
これをリクオートと呼びます。テスターでは、トレードはリクオートではありません。したがって、オープンしたトレードのチケットがマイナスである場合、形成されたバーのフラグをリセットする必要があります。
static int prevtime = 0; // バーの開始時刻
...
int start() {
if (Time[0] == prevtime) return(0); // バーは同じなので終了。
prevtime = Time[0]; // 新しいバー、時間を維持する
...
int ticket = -1;
...
ticket = OrderSend(...); //ポジションオープンを 試みる
if (ticket < 0) { // 何らかの理由でポジションがオープンされませんでした。
Sleep(30000)です。
// 次のバーではなく、次のティックで操作を繰り返すために、形成されたバーのフラグをリセットします。
prevtime = Time[1];
}
}
このEAは1時間足のバーで動作します。EAはこれを監視し、必要であれば新しいリクエストを送信します。EAが少なくとも注文を開始しようとするために、トリガーさえもしないことについて書きました。つまり、2-3人の注文で、しっかり開き(当たり前ですが)、4人目(3人目)は開き始めもしないか、1時間後に開くこともあります。テスターでこの瞬間を確認すれば、このオーダーは正しい位置にあることになりますが。
問題は、私が理解しているように、楽器のティックが均等に来ないことです。また、計算が行われるシンボルの新しいバーを 開くためのティックは、私たちが取引するシンボルよりもずっと後に来るかもしれません。あるいはその逆もしかり。そして、ここで矛盾が生じることがあります。しかし、どうすればこれを回避できるのでしょうか。
Expert Advisorは、異なるシンボルの1時間足のローソクが同期して開くことを意味します。つまり、EURUSDに新しい1時間足のローソク足が表示されると、Expert AdvisorはGBPUSDの1時間足のタイムフレームで値をチェックすることを開始するのです。しかし、その瞬間にポンドの新時給が始まっていなければ、すべてがボロボロになってしまう。一般的には、EAのロジックを少し整理する必要があります。
返信ありがとうございます、そういう理由かと思いました。どうか、方法を教えてください。なぜなら、これは大きな問題だからです。スクリーンショットはこちら、実物のものです。ストラテジーテスターではポーズが15.00にオープンされ、実際の口座では16.00にのみオープンされたことがわかります。Strategy Testerとリアル口座で同じパラメータを使用していますが。
このEAは1時間足のバーで動作します。EAはこれを監視し、必要であれば新しいリクエストを送信します。EAが少なくとも注文を開始しようとするために、トリガーさえもしないことについて書きました。つまり、2-3人の注文で、しっかり開き(当たり前ですが)、4人目(3人目)は開き始めもしないか、1時間後に開くこともあります。テスターでこの瞬間を確認すれば、このオーダーは正しい位置にあることになりますが。
問題は、私が理解しているように、楽器のティックが均等に来ないことです。また、計算が行われるシンボルの新しいバーを開くためのティックは、私たちが取引するシンボルよりもずっと後になることがあります。あるいはその逆もしかり。そして、ここで矛盾が生じることがあります。しかし、どうすればそれを回避できるのか。
どの時間足でも(どの商品でも)新しいティックが1時間の始まりであることを考慮する。
---
ろんを正す
時間バーが開いたらすぐに
新しいバーが 形成されていないにもかかわらず、バーが既に終了していると仮定して、他の計器を再計算する。
というのも、数秒から数十秒の間に、そこに表示されるからです。
---
2つ、3つの楽器を数えたとします。
少なくとも20の金融商品で、1時間の始まりを捉えることができる - 円の金融商品は非常に速いので望ましい
// --- практически гарантия ловли начала часа двумя БОДРЫМИ парами if ( TimeSaveBehchH1 == iTime("GBJJPY",PERIOD_H1,0) ) { TimeSaveBehchH1 = iTime("GBJJPY",PERIOD_H1,0); // новый бар } if ( TimeSaveBehchH1 == iTime("USDJPY",PERIOD_H1,0) ) { TimeSaveBehchH1 = iTime("USDJPY",PERIOD_H1,0); // новый бар } //--- if ( TimeSaveBehchH1 == iTime("EURUSD",PERIOD_H1,0) ) // в довершении ловим на своей рабоче паре { TimeSaveBehchH1 = iTime("EURUSD",PERIOD_H1,0); // новый бар } if ( TimeSaveBehchH1 == iTime("USDCHF",PERIOD_H1,0) ) // ловим на второй паре { TimeSaveBehchH1 = iTime("USDCHF",PERIOD_H1,0); // новый бар }
というのは、正直なところ、あまりいいことではありません. ダニはこのペアには来なかったので、また飛んでくるでしょう。
入力を生成するコードの一部を見せれば、ロジックの誤りをより早く発見できるかもしれません。
Expert Advisorは、異なるシンボルの1時間足のローソク足が同期して開くと仮定しています。つまり、EURUSDに新しい1時間足のローソク足が表示されると、エキスパートアドバイザーはGBPUSDの1時間足のタイムフレームで値をチェックすることを開始するのです。しかし、その瞬間にポンドの新時給が始まっていなければ、すべてがボロボロになってしまう。一般的には、EAのロジックを少し整理する必要があります。
返信ありがとうございます、そういう理由かと思いました。どうか、方法を教えてください。なぜなら、これは大きな問題だからです。スクリーンショットはこちら、実物のものです。ストラテジーテスターではポーズが15.00にオープンされ、実際の口座では16.00にのみオープンされたことがわかります。テスター上と実機のパラメータは同じですが。
...
取引されたシンボルでは、新しいバーの ティックが早く来て、分析されたシンボルの古いバーが分析に参加した理由である、開始はオフに動作し、次の時間を待っています。コードの断片を見ずに推測するのは楽しいものです。
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索