ポジションをクローズする。オン表示信号です。 - ページ 3 123456789 新しいコメント Andrey Khatimlianskii 2007.11.27 12:07 #21 goldtrader: 第一に、実数の Stochast_ と整数の 75 を比較するのは誤りであり、第二に、それらの差を 0 と比較するのがより正しいのです。 この状況では、小数点以下8桁の誤差は結果に影響を与えないと思うのですが。 Rid 2007.11.29 16:14 #22 もう一つの問題は、Position Closing Blockで発生します。私はこのブロックをお気に入りのExpert Advisorに入れました。トレンドの方向にしか取引しない(その点では、深く感謝しています...)。 しかし、トレンドの強さに応じて、エキスパートアドバイザーは一貫して複数の取引を次々と開くことが可能です(実際にそうしています!)。そこで、インジケーターのシグナルで決済ポジションのブロックが必要です。しかし、ここで問題です!トレンドの中でいくつかのポジションを持ち、トレンドに反する調整が始まった場合、ブロック内のインジケータはクローズのシグナルを出します。必要な時に必要なだけ。 しかし、何らかの理由で、すべてのオープンポジションがクローズされるわけではありません。基本的に、一番最初のものだけです。後から開いたものは、クローズ信号に反応せず、そのまま動き続ける。そしてさらに、-「歴史は茶番劇のように繰り返される」のだ!各クローズ信号で、1つだけ、最も早いオープンポジションがクローズされ、他のポジションは動き続けるのですすべてのポジションのロットは一定です。 こちらがビジュアルモードチャートです。インジケーターのシグナルによる終値は、緑の三角形で表示されます。信号によって毎回1つのポジションだけがクローズされることがよくわかる。すべての募集を締め切ってほしい!」。何が原因なのか、アドバイスをお願いします。 コードの備忘録 : /********* Закрытие позиций **************************************** if (AutoClose) { //---------------------------------------------------------------------- if (ExpertOrder(MagicLong)) { //есть открытые ордера на покупку if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);//закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (ExpertOrder(MagicShort)) { //есть открытые ордера на продажу if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);//закрываем позицию return(0); // выходим } } //------------------------------------------------------- } //if (AutoClose) Виктор 2007.11.29 16:32 #23 rid: Closing Blockではもう一つ問題が発生します...。 OrdersTotal()のループはどこにあるのでしょうか? Andrey Khatimlianskii 2007.11.29 16:35 #24 granit77: OrdersTotal()のループはどこにあるのでしょうか? あるとしても、0からOrdersTotal()-1までであり、その逆であるべきです ;) Rid 2007.11.29 16:58 #25 いいえ、ここではそうではありません。注文の定義が違う -。 //---------------------------------------------------------------------------------+ //---- Функция проверки наличия ордеров эксперта ----------------------------------+ //---------------------------------------------------------------------------------+ // false - ордеров данного эксперта нет; | // true - есть ордера данного эксперта; | //---------------------------------------------------------------------------------+ bool ExpertOrder (int VersionID){ bool result=false; int _OrdersTotal=OrdersTotal(); if (_OrdersTotal>0) { for (int jk=0; jk<_OrdersTotal; jk++) { if (OrderSelect(jk, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==VersionID) { result=true; break; }//Найден ордер принадлежащий эксперту else { result=false; } } } } else { result=false; } //--------------------- return(result);} そして、このバージョンのコードは、私にとってより快適なものなのですなぜなら、私のロングとショートのポジションは互いに独立して開くからです。 //---------проверяем условие на покупку---------------------------- if (LONG) { //если "выключатель" включен if ( ... ... ... ) { ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point, Ask+TP*Point,NULL,MagicLong,0,CLR_NONE); Rid 2007.11.29 17:26 #26 ただし、標準のクロージャーではそのまま ... if (AutoClose) { //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ Victor Nikolaev 2007.11.29 17:43 #27 rid: ただし、標準のクロージャーではそのまま ... if (AutoClose) { //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ OrdersTotalから 0への逆ループを試してみるとよいでしょう。 Rid 2007.11.29 17:56 #28 どうすればいいのか?それは負担のあまりでない場合は、書いてください。 ここでは、ところでチャートだ - 上記の "標準 "で:すべてが同じです - 唯一の位置は、指標の信号で閉じます - 。 Виктор 2007.11.29 18:13 #29 rid: どうやるんですか? komposterとVininによると、その代わりに。 for (int v=0; v<OrdersTotal(); v++) を書きます。 for (int v=OrdersTotal()-1; v>0; v--) 私には効果的です。 Victor Nikolaev 2007.11.29 18:26 #30 granit77: のライドを 行います。 どうやるんですか? komposterとVininが信じるなら、代わりに。 for (int v=0; v<OrdersTotal(); v++) を書きます。 for (int v=OrdersTotal()-1; v>0; v--) 私には効果的です。 まったくその通りです。KimVにはこれらを実装したスクリプトやライブラリがありますが。彼のフォーラムで探した方がいいかもしれませんね。 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
第一に、実数の Stochast_ と整数の 75 を比較するのは誤りであり、第二に、それらの差を 0 と比較するのがより正しいのです。
もう一つの問題は、Position Closing Blockで発生します。私はこのブロックをお気に入りのExpert Advisorに入れました。トレンドの方向にしか取引しない(その点では、深く感謝しています...)。
しかし、トレンドの強さに応じて、エキスパートアドバイザーは一貫して複数の取引を次々と開くことが可能です(実際にそうしています!)。そこで、インジケーターのシグナルで決済ポジションのブロックが必要です。しかし、ここで問題です!トレンドの中でいくつかのポジションを持ち、トレンドに反する調整が始まった場合、ブロック内のインジケータはクローズのシグナルを出します。必要な時に必要なだけ。
しかし、何らかの理由で、すべてのオープンポジションがクローズされるわけではありません。基本的に、一番最初のものだけです。後から開いたものは、クローズ信号に反応せず、そのまま動き続ける。そしてさらに、-「歴史は茶番劇のように繰り返される」のだ!各クローズ信号で、1つだけ、最も早いオープンポジションがクローズされ、他のポジションは動き続けるのですすべてのポジションのロットは一定です。
こちらがビジュアルモードチャートです。インジケーターのシグナルによる終値は、緑の三角形で表示されます。信号によって毎回1つのポジションだけがクローズされることがよくわかる。すべての募集を締め切ってほしい!」。何が原因なのか、アドバイスをお願いします。
コードの備忘録 :
/********* Закрытие позиций **************************************** if (AutoClose) { //---------------------------------------------------------------------- if (ExpertOrder(MagicLong)) { //есть открытые ордера на покупку if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);//закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (ExpertOrder(MagicShort)) { //есть открытые ордера на продажу if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);//закрываем позицию return(0); // выходим } } //------------------------------------------------------- } //if (AutoClose)
Closing Blockではもう一つ問題が発生します...。
OrdersTotal()のループはどこにあるのでしょうか?
いいえ、ここではそうではありません。注文の定義が違う -。
そして、このバージョンのコードは、私にとってより快適なものなのですなぜなら、私のロングとショートのポジションは互いに独立して開くからです。
ただし、標準のクロージャーではそのまま ...
ただし、標準のクロージャーではそのまま ...
OrdersTotalから 0への逆ループを試してみるとよいでしょう。
どうすればいいのか?それは負担のあまりでない場合は、書いてください。 ここでは、ところでチャートだ - 上記の "標準 "で:すべてが同じです - 唯一の位置は、指標の信号で閉じます - 。
どうやるんですか?
for (int v=0; v<OrdersTotal(); v++)
を書きます。
for (int v=OrdersTotal()-1; v>0; v--)
私には効果的です。
どうやるんですか?
for (int v=0; v<OrdersTotal(); v++)
を書きます。
for (int v=OrdersTotal()-1; v>0; v--)
私には効果的です。
まったくその通りです。KimVにはこれらを実装したスクリプトやライブラリがありますが。彼のフォーラムで探した方がいいかもしれませんね。