2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 < clos 1.1304 ExistPosSell 0 2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 > clos 1.1304 ExistPosBuy 1 2022.01.17 16:22:08.366 2022.01.04 08:00:00 e: Signal 1.1325 < clos 1.1306 ExistPosSell 0 2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 > clos 1.1306 ExistPosBuy 1 2022.01.17 16:22:08.327 2022.01.04 2022.01.04 00:00:00 e: Signal 1.1325 > clos 1.1306 *1: Signal 1.1325 >clos 1.1306 ExistPosBuy 1 2022.01.17 16:22:08.326 2022. 02:00:001326 < clos 1.1296 ExistPosSell 0 2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 > clos 1.1296 ExistPosBuy 1 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 < clos 1.1283 ExistPosSell 0 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: close #1 buy 0.01 EURUSD at 1.13598 at price 1.12831 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 > close 1. 1383.1283 ExistPosBuy 1 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: open #4 buy 0.01 EURUSD at 1.13512 ok 2022.01.17 16:22:08.190 2022.01.17 17:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 < close 1.135 ExistPosSell 0 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 > close 1.135 ExistPosBuy 1
if(isNewBar()==true) {
if(Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_BUY, Magic) == true) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(ExistPositions( NULL, OP_BUY, Magic) == False) //----------- если позиции BUY отсутствуют то
ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию SELLif(Signal < clos ) { //--------------------- МА ниже цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_SELL, Magic) == true) //---------------- Если есть позиция SELL то
ClosePosWithMaxProfitInCurrency(); //---------------------закрытие одной позиции с максимальным профитом в валюте депозита.if(ExistPositions( NULL, OP_SELL, Magic) == False) //----------- если позиции SELL отсутствуют то
ticket=OpenPosition(NULL,OP_BUY, NDLot(Lot),0,0, Magic, Com);} //------------ открываем позицию BUY
} return;
...
if(isNewBar()) {
if(Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if(ExistPositions( NULL, OP_BUY, Magic)) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(!ExistPositions( NULL, OP_BUY, Magic))//----------- если позиции BUY отсутствуют тоsellSignal= true;
}
// и аналогично для п.4.
}
return;
...
voidOnTimer() {
if (sellSignal) {
ticket=OpenPosition(NULL,OP_SELL, NDLot(Lot),0,0, Magic, Com); //------------ открываем позицию SELLsellSignal= false;
}
// и аналогично для buy
}
先日、アラート:#18550を 書きました。しかし、SendNotificationを追加することで改善することができます。
ハイライトした行をソースコードに追加し、Indicatorsフォルダにドロップしてコンパイルしてください。このインジケータは何度でもチャートに追加することができ、異なるレベルを超えたときにシグナルを受け取ることができます。コードはオンラインで最終決定されました。結果は未検証です。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。
GlaVredFX, 2022.01.17 18:59
私は注文を 閉じるコードを探していて、もし何も表示されなければ、私は新しい注文を開くでしょう。
しかし、なぜか1つしか注文 を閉じず、次のシグナルの前に止まってしまいます。
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 < clos 1.1304 ExistPosSell 0
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: Signal 1.1322 > clos 1.1304 ExistPosBuy 1
2022.01.17 16:22:08.366 2022.01.04 08:00:00 e: Signal 1.1325 < clos 1.1306 ExistPosSell 0
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: Signal 1.1325 > clos 1.1306 ExistPosBuy 1
2022.01.17 16:22:08.327 2022.01.04 2022.01.04 00:00:00 e: Signal 1.1325 > clos 1.1306 *1: Signal 1.1325 >clos 1.1306 ExistPosBuy 1 2022.01.17 16:22:08.326 2022. 02:00:001326 < clos 1.1296 ExistPosSell 0
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: Signal 1.1326 > clos 1.1296 ExistPosBuy 1
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 < clos 1.1283 ExistPosSell 0
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: close #1 buy 0.01 EURUSD at 1.13598 at price 1.12831
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: Signal 1.1328 > close 1. 1383.1283 ExistPosBuy 1
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: open #4 buy 0.01 EURUSD at 1.13512 ok
2022.01.17 16:22:08.190 2022.01.17 17:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 < close 1.135 ExistPosSell 0
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: Signal 1.134 > close 1.135 ExistPosBuy 1
あなたの質問とあなたのコードにもう少し注意を 払えば、あなた自身のために見ることができます。
質問は、最も収益性の高い1つの注文を1つのバーで決済し、その後新しいバーを待って、再び収益性の高い1つの注文を決済することです。一度に全部を閉じるべきではない。
これは、最初のバーでクローズするが、次のバーでは何も起こらないことを意味します。
そこでの問題は、最も収益性の高い1つの注文を1つのバーで決済し、その後新しいバーを待って、再び収益性の高い1つの注文を決済することです。一度に全部は閉じない方がよいでしょう。
それから、質問を正しく定式化することです。信号は1つだけです。新しいバーのオープニングで1回だけシグナルを取得します。シグナルが1つしかない場合、いくつの注文がクローズされるのでしょうか?そして、新しいバーでシグナルが表示された場合のみ。また、シグナルがない場合は、次のバーで注文を終了します。もう一度、信号があれば。
そして、質問を正しく組み立てることです。信号が1つしかない。しかも、新しいバーの開店時にである。また、シグナルが1つしかない場合、いくつのオーダーがクローズされるのでしょうか?そして、新しいバーでシグナルが表示された場合のみ。また、シグナルがない場合は、次のバーで注文を終了します。そしてまた、信号があれば。
このような場合、通常はフローチャートが役に立ちます。あるいは、紙やテキストファイルに一点一点、アルゴリズムを詳細に記述する必要があります。そして初めて、コードの書き方を理解することができるのです。
すべての注文の中で、最初に開いた1つの注文を決済する機能が必要です。
そこでお気づきのように、アルゴリズムがコードに 書かれているのです。
1)新しいバーが表示される
2) MAが前バーの終値より高ければステップ3へ、MAが終値より低ければステップ4へ。
3)買いポジションを持っている場合、通貨ペアで最大限の利益を得て1つのポジションを決済 します。
3.1) 買いの 注文がない場合は、売りのポジションを建 てる。
4) BUYポジションを持っている場合、通貨ペアで最大限の利益を得て1つのポジションを決済します。
4.1)売りの 注文がなければ買いのポジションを建てます。
さて、もう一度質問ですが、上記のアルゴリズムのこのコードのどこが問題なのでしょうか?
このコードにはコマンド一式が 含まれています。端末は、あなたが何を必要としているのかを知らない。それは、コードに書かれていることだけを知っているのだ
変数 buySignal とsellSignal をグローバルに書き込み ます。コマンドの セットがコードに書かれています。端末は、あなたが何を必要としているのかを知らない。それは、コードに書かれていることだけを知っているのだ
問題は、注文を利益ではなく時間で閉じることなので、このメッセージは削除しました。
なぜなら、私たちは常に、そして常にあるべきところに利益があるわけではないからです。
したがって、「すべての利用可能なポジションの一番最初に開かれた1つのポジションを閉じる」 機能が必要です。
問題は、利益よりも時間によって注文を閉じることなので、このメッセージは削除しました。
なぜなら、利益はいつもそこにあるわけではなく、あるべきところにあるわけでもないからです。
したがって、「すべての利用可能なポジションの一番最初に開かれた1つのポジションを閉じる」 機能が必要です。
前の記事でタイマーのポジションオープンの例を追加しました。ポジションのオープンが保証されるように。そこに自分の好きな機能を代入することができます。
前の記事でタイマーの位置が開く例を追加しました。ポジションのオープンが保証されるように。そこに自分の好きな機能を代入することができます。
でも、こうはいかない。の結果を監視する必要があります。
またはOnTradeTransactionにあなたの新しい関数があります。そして、ポジションがなければ、エントリーします。または、例に 挙げたようにbuySignalやsellSignalに シグナルを書き、OnTimerで処理 する。