MT4のEAでエントリーシグナルの優先順位の付け方について質問です。 一つのEAの…

MT4のEAでエントリーシグナルの優先順位の付け方について質問です。

一つのEAの中にエントリーシグナルを2個以上作り、それに優先順位をつけてエントリーすることは可能でしょうか?

プログラム初心者のため参考書の見よう見まねでEAに挑戦していますが壁にぶつかっており困っております。

具体的にどのようにしたいのかと申しますと、まず前提として当方のトレードスタイルは全体の保有ポジションをエントリー後に動かしません(ナンピンや両建て等をせず、ポジはエントリーした時のlotから増減させない)。
ですのでここではポジションは常に0か1lotと仮定します。
AとBというエントリーシグナルがあり、Aのほうが優位性があるエントリーシグナルだとします。Aのエントリーでポジションを持った場合はそのまま決済まで問題はないのですが、
Bのエントリーでポ 献轡腑鵑鮖っている場合に、決済までの間にAのエントリー条件に合致した時、Bのポジションをクローズ(益でも損でも)し、Aのエントリーでポジションを持ち直したいということです。
Aのエントリーに干渉しないようにBを加えたいということです。
もちろんAB同時にエントリー条件がそろった場合はAを優先します。

なぜこのようにしたいかと申しますと、AのエントリーシグナルのみでEAを走らせた場合、
すぐにエントリー条件に合致する状況が来るとは限らず、その間はノーポジで時間だけが過ぎてしまいもったいなく感じており、その間にAよりは劣るが、やる価値はあるBも同時にEAに組み込んで走らせ、空いた時間を有効に使った場合のバックテストを検証したく何とかしたいと考えております。

現在つまづいているプログラミングの概要を以下に記します。

int EntrySignalA(int magic) //Aのエントリーシグナル
{
// オープンポジションの計算
double pos = $ B8=:_$NJ]M-%]%8%7%g%s7W;;<0(ノーポジは0) int ret = 0;
// 買いシグナル
if(pos == 0 && その他の条件式) ret = 1;
// 売りシグナル
if(pos == 0 && その他の条件式) ret = -1;

return(ret);
}

int EntrySignalB(int magic) //Bのエントリーシグナル
{
// オープンポジションの計算
double pos = 現在の保有ポジション計算式(ノーポジは0)
int bet = 0;
// 買いシグナル
if(pos == 0 && その他の条件式) bet = 1 ;
// 売りシグナル
if(pos == 0 && その他の条件式) bet = -1 ;

return(bet);
}

// スタート関数
int start()
{

// エントリーシグナルA
int sig_entryA = EntrySignalA(MAGIC);

// 買い注文
if(sig_entryA > 0 )
{
Ordersend(1lotで買注文)
}
// 売り注文
if(sig_entryA < 0 )
{
OrderSend(1lotで売注文)
}

// エントリーシグナルB
int sig_entryB = EntrySignalB(MAGIC);

// 買い注文
if(sig_entryB > 0 )
{
Ordersend(1lotで買注文)

}
// 売り注文
if(sig_entryB < 0)
{
OrderSend(1lotで売注文)
}

return(0);
}

上記のEAだとAかBか条件がそろった時エントリーはしてくれるのですが、BがAに干渉してしまいます。
1lotより多くポジションを持たないよう、上記のとおりエントリー判断にポジション0の時と入れておりますが、この制限のせいでBによる保有ポジション時にAによる優先的処理ができずに困っています。
また、Aのエントリー時にあらかじめポジションクローズの記述を入れても、Bのポジション保有時 世韻任呂覆、Aのポジション保有時にも新たな別のAのエントリー条件合致時にその都度本来の決済前にポジションクローズしてしまいます。
Bのポジションを持った状態という判断条件を作り、ポジションをクローズしてAのエントリーといううまい方法は作れるのでしょうか?それとも別の良い方法はないでしょうか?
ちなみにエントリーは5分足の始値で、決済はエントリーの時に逆指値・指値同時発注です。
二つチャートを用意しても結局上記と同じ状態になる結果しか考え付きませんでした。

プログラミングに詳しい方どうぞよろしくお願い申し上げます。

回答1

まず、Bのエントリー条件に
Aのエントリー条件が整っていない事を条件に加えます。
これによってAと被ってエントリーすることは無くなります。

次にBの決済条件を
Bの決済条件または
Aのエントリー条件という状態にしてやります。

これによってAのエントリー条件が整った場合Bは決済されるようになります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA