ほとんどのエキスパートアドバイザーはリアルタイムで動作し、各見積もりに長所と短所があります。 プラスの面としては、ティックごとに実行することで EA が最小の価格変動を捕捉できるため、スキャルピング システムに最適です。
ただし、欠点は、ティックごとにリアルタイムで取引を実行すると、多くのシステムが誤ったシグナルに対して脆弱になることです。
場合によっては、取引条件をバーごとに 1 回だけチェックする方が良い場合があります。 バーが閉じるのを待つことで、その状態が発生し、信号が有効であることを確認できます。 この MQL4 の記事で各ティックでの実行を回避する方法を学び、Expert Advisor をプログラムする方法を学びましょう終値を使用し、誤ったシグナルを避けるためです。
バーごとに 1 回取引するということは、ストラテジー テスターの結果がより正確で関連性のあるものになることも意味します。 MT4 ストラテジー テスターの固有の制限により、ティックは通常 M1 データに基づいてモデル化されるため、テスト モデルとして「すべてのティック」を使用すると、信頼性の低いバックテスト結果が生成されます。 ライブ取引で行われる取引は、ストラテジー テスターで行われる取引と必ずしも一致するとは限りません。
しかし、取引を終値に置き、テスト パターンとして「オープンのみ」を使用することで、ライブ取引のテスト結果をより正確に反映することができます。 。 足ごとに 1 回の取引の欠点は、特に足の途中で価格が大きく変動した場合、取引の実行が遅れる可能性があることです。 基本的には応答性と信頼性の間のトレードオフです。
各足の取引条件を確認するには、1) タイムスタンプ法、2) 出来高法、という 2 つの方法があることは知っています。
< br/>
1. タイムスタンプ メソッド
以下は、新しいバーの開始時のタイムスタンプを確認するメソッドのコードです。 。
外部ブール値 EnterOpenBar = true;
int 現在時刻;
内部 init(){
現在時刻 = time[0];
return(0);
}
start(){
if(EnterOpenBar) = true)
{
if(currenttime!= time [0]) {
// 新しい足の最初の注文番号を見つけます
// 売買条件はここにあります
現在時刻 = time[0 ];
return(0);
}
}
ここメソッド、まず、機能のオンとオフを切り替えるために EnterOpenBar という外部変数を宣言します。
init() 関数では、現在の足のタイムスタンプを CurrentTime に割り当てます。 これにより、次のバーが開くまで取引条件のチェックが遅れます。
次に、CurrentTime 変数の値を、現在のバーのタイムスタンプである Time[0] と比較します。 これら 2 つの値が一致しない場合、新しいバーが検出され、新しいバーで取引を開始し続けることができます。
2. 出来高法
以下は、開始を確認するために使用される取引です。新しいバー 測定メソッドのコード。
外側のブール値 EnterOpenBar = true;
内側の start()
Boolean OpenBar=true;
if(EnterOpenBar) if(iVolume(NULL,0,0)>1) OpenBar=false;
p>
if(OpenBar){
// 新しいバーの最初のティック番号を見つける
// ここで売買条件を指定します
return ( 0);
}
ボリューム メソッドの方がはるかに短いコード スニペットが含まれるため、私はボリューム メソッドを好みます。
前のメソッドと同様に、まず EnterOpenBar という外部変数を宣言して、機能をオンまたはオフにします。 init() 関数には何も必要ありません。
ボリュームベースのオープンバー条件をチェックするコードを 1 行追加するだけです。 この条件は、ボリュームが 1 であるかどうかをチェックします。この場合、新しいバーの最初のティックが見つかったため、OpenBar=true になります。 ボリュームが 1 より大きい (>1) 場合、それは新しいバーではないため、OpenBar = false になります。