//Pseudo codeif(NewBar) ResetSignals(); //Set all SignalxExecuted to falseif(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
SignalBuy1Executed=true; //Set Signal to exectued to prevent a reuse in the same bar
}
if(SignalBuy2&&!SignalBuy2Executed&&OpenOrders()==2){
//do open buy position
SignalBuy2Executed=true; //Set Signal to exectued to prevent a reuse in the same bar
}
SignalBuy1=CheckForOpenBull42(); //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62(); //Check for Signal2 condition is true
if(OpenOrders()>0)CheckForClose(); //Check any order needs to be closed
//and so on.....
bool Fun_New_Bar()
{
staticdatetime New_Time=0;
if(New_Time!=Time[0])
{
New_Time=Time[0];
return(true); // <---- we have a new bar so the function returns true
}
return(false);
}
//Pseudo codeif(NewBar) ResetSignals(); //Set all SignalxExecuted to falseif(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
SignalBuy1Executed=true; //Set Signal to exectued to prevent a reuse in the same bar
}
if(BULL4()&&!BULL6(){ // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.if(!SignalBULL41Executed && OpenOrders(Symbol())==0){
OpenBULL41();//do open buy position
SignalBULL41Executed=true;
}
if(!SignalBULL42Executed && OpenOrders(Symbol())==1){
OpenBULL42();//do open buy position
SignalBULL42Executed=true;
}
// Check for open for scenario 1 / EA 1 / startegy 1 bool OpenBULL41()
{
int res;
if(Bid==Close[1]+3*Point) // <--- equal makes no sense here and you should not compare doubles for equality.
Read (again): https://www.mql5.com/en/forum/136997
{
res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue); // <--- what is your plan with res? You are aware, it does include the ticket
number or -1, aren't you?
return (true); // <--- Even if OrderSend() fails you return true.
}
return (false);
}
//----------------------------------- bool OpenBULL42()
{
int res;
if(Ask>OrderOpenPrice()+4*Point) // <--- OrderOpenPrice() from a somewhere selected order may or may not work here
(may because only one order is open), but it is not nice coded.
{
res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
return;
}
}
まだ 私の EAを 理解して いない人のために 、 物語を 書く。D hehehehe
イベントは キャンドル です - 購入と売却 または閉鎖の ための様々な オプションを備えて います。
2番目の機能としてテレビ番組を見る代わりに、本を 読んで理解することを検討すべきです;-)
しかし、あなたのコードとそのストーリーは、少なくともコードについては、部分的に間違っています。
とりあえず1つのシグナルだけを実装して、必要な機能のコーディングに集中してはいかがでしょうか?もし、1つのシグナルについて良いコードがあれば、他のシグナルを実装するのは簡単でしょうし、多くの関数がすでに存在しています。
後でArrayや他の関数を使って簡素化することもできますが、上記のコードの簡素化は現時点では最大の問題ではないはずです。
Kronin はい! ご理解 いただけたようで:) 1つの EAに たくさんのストラテジーを入れて います。
150の EAを同時に動かすと 、 PCが 爆発 しそう な気が する。
それ以降は、ストラテジー EAは 1 つだけで、 中にはすでに 多くの ストラテジーが入っているので 意味が ない。
もちろん、 ストラテジーは 互いに干渉 し合うことはできませんし、一方を実行するともう一方も実行できますし、ストラテジー1、3、5とストラテジー(1、3、5)を同時に実行させることができます。
もう これ以上の話は 書きません :)
私の コードは間違っています - それは知られている、私は 単一の EAに 2つの戦略を入れて みました、コードは うまく 動作 しますが、 全体が うまく動作して いません。
あなたのコードは非常に 興味深いです、 私は それを 勉強 します。
こんにちは 、友人は、 コードで 長い 作業の 後 、 クローニンコードからの 情報を介して 構成され、 動作して います。
コードは、単一の EAで 2つの戦略を 提示
1.小さな ろうそく 購入 シナリオのために 青い矢印で マークされ 、 買いの ための2つのオプション です
2. 平均 ろうそくについては、購入 シナリオ ろうそくは 赤い矢印で マーク され 、 買いのための3つのオプションが あります 。
私も 1 ポイント = 1ピップが 便利な 状況です ( 問題を解決する のは後回し です)。
私は 彼らが エラーの 原因 ではないと思うので、(NewBar) ResetSignals ()の 場合はオプションを 使用 しないで ください。
start() の 関数 PART2を削除 すると、青い 1つのストラテジーが 動作し、 正常に動作 します。
あなたは 2つの 起動 戦略を 含む コード PART 1と PART2を実行した場合 、 しかし、彼らは 重複しています。
Kroninを見ていただけますか?
オプションは 使用 しないでください if (NewBar) ResetSignals () なぜなら、私は それらが エラーの 原因 ではないと思うから です。
Fun_NewBar()関数が コード化されている方法は、あなたがそれを行うことはできません ... あなたはそれがbool 型であり、bool 値を返すように、このようにそれを行う必要があります ... ...
はい、あなたは右の 戻り値は boolと 私は前に表示されない int(すでに固定)が ありますよ。ありがとうございます
しかし、 この関数は、私は 使用しないでください、それは テキストとして ある
私は、これは 私が2つの 重複する 戦略を 分離 する 機能に 適用されないと思います。私は関係が表示さ れません。 または多分 私は間違っている?
あなたが少し進歩したのを見るのは良いですが、それはまだ長い道のりです:-)
上記のRaptorUK氏の指摘を修正する必要があります。シグナルのリセットは重要で、そうしないとEAが新しい取引を始めるとすぐに止まってしまいます。
あなたの実装は間違っています。SignalExecutedをティック 毎にリセットするのであれば、それは意味がありません。OpenOrdersをフィルタリングしているため、より多くの取引を開始することはできないかもしれません。しかし、あなたのストラテジーは複数の注文を開くことができるので、注文を閉じるアルゴリズムも必要で、新しいバーでSignalExecutedフラグをリセットする必要があると想像できます(あなたの実装では、それは無駄で、必要ありません)。
BULL6が成立していれば、BULL4は実行されないということですね。つまり、赤のストラテジーが有効でなければ青のストラテジーしか実行しないとか、平均のローソクが有効でなければ小さいローソクしか実行しないとか。
次のステップ
CheckForClose()関数にも同じような問題があり、さらにマジックナンバーのフィルタもありません。 また、ここでは買いカウントの注文から選択したOrderOpenPrice()は間違った注文を決済してしまうかもしれません(実際にうまくいくかどうかわかりませんが)。
このスレッドの最初のページでRaptorが書いたことももう一度読んでみてください。
あなたの投稿とコード内のコメントから、あなたはどの注文がどのストラテジーに属するかを知りたいのだと感じました。そのためには、2つ目のストラテジーに2つ目のマジックナンバーを定義します。 そうすれば、開いていたストラテジーに従って注文をクローズすることが容易になります。
次のステップ
あなたの投稿とコード内のコメントから、あなたはどの注文がどのストラテジーに属するかを知りたいのだと感じました。そのためには、2つ目のストラテジーに2つ目のマジックナンバーを定義します。 そうすれば、開いていたストラテジーに従って注文をクローズすることが容易になります。
2つのEAで2つの異なる戦略を実行し、それぞれを独自のチャートで表示する方が簡単ではないでしょうか?
そうですね、2、3、4、5...は同意です。でも、この話や、「 150個の ポリシーを 書き 、 それらが 同じグラフ上を 同時に 歩き、 すべての戦略を 一 度に 実行 する 必要が ある。 150のEAを 同時に動かすと、 PCが 爆発 し そう です 。"
1つのEAでもっとたくさんのストラテジーを動かすつもりなんだろうけど...。