ポジションをクローズする。オン表示信号です。 - ページ 2

 

私の場合は"<="でしたが、ストキャスティクスの値は1ティックごとに非常に強く変化します。

だから、"="の記号は安心して省略できる。でも、もちろん、考えないようにするために-と思うのです。

 
エキスパートを見てみると、すべて正しいようです。インジケーターがないため、確認できなかった。
OrderCloseの 前にPrintを追加して、クローズシグナルが表示されるかどうか試してみてください。
 

完了しました。追加されました。いや、......!?ログブックにClosing Noticeが表示されない。

//********* Закрытие позиций ****************************************
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()==MagicNum)   { 
//-----------------------------------------------------                  
if (OrderType() == OP_BUY) { 
      if(Stochast_1>=75 && Stochast_0<75)     {
         Print ( OrderClose(OrderTicket(),OrderLots(),Bid,3,Green)); // закрываем позицию
                 return(0); // выходим
         
              }       
     }  
 //--------------------------------------------------------
if (OrderType() == OP_SELL) { 
      if(Stochast_1<=25 && Stochast_0>25)    {
               Print  (OrderClose(OrderTicket(),OrderLots(),Ask,3,Green)); // закрываем позицию
                 return(0); // выходим
       
              }       
     }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_ 
 //****************************************************************************

意味がわからない!このブロックは別のEAに入れました。そして3番目は....しかし、状況は変わっていないのです募集は終了して いません。めったにないことですが、まれに(履歴上1~2回=1年)、ビジュアルチャート上で緑の三角形の終値を点滅させることがあります。でも、そんなことはないはずです。ポジションは、コードから判断して、ミシンのシャトルのように閉じるはずです

NOnLagMAインジケータをアップロードしました。

ファイル:
 

もしかして、このブロックは動かないはず?結局のところ、私たちはオープンするときにコード内の停止を持っている: - ストップロスとtakeprofit。そして、もしかしたら、このために他のすべての閉鎖条件が無視されるのでは?

ticket=OrderSend(Symbol(,0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point,NULL,MagicNum,0,CLR_NONE)) を実行。

他の方法で対処する必要があります。

 
rid:

何もわからない!

ポジションクロージングブロックは「if(OrdersTotal() == 0)」句の中にありました。
もっと気配りをしてほしい)

以下は、テストバリアント(SLとTPなし、正しいメッセージと不要なスリップなし)のstart()関数です。
int start()
  {
 
 if(Time[0] <= prevtime) 
       return(0);
 prevtime = Time[0];
  if (UseTrailing) TrailPositions();   
//----
   double NLg_Signal_0 =iCustom(NULL,0,"NonLagMA_v5",0,NLg_Signal,1,0,0,0,0,0,0); 
   double NLg_Signal_1 =iCustom(NULL,0,"NonLagMA_v5",0,NLg_Signal,1,0,0,0,0,0,1); 
   double NLg_long0    =iCustom(NULL,0,"NonLagMA_v5",0,NLg_buy,0,0,0,0,DV_buy,0,0);
   double NLg_short0   =iCustom(NULL,0,"NonLagMA_v5",0,NLg_sell,0,0,0,0,DV_sell,0,0);
 
  if (OrdersTotal()   == 0)//если нет открытых позиций
  { 
//---------проверяем условие на покупку-----------------      
       if   ( 
              (NLg_Signal_1<=NLg_long0)  &&
              (NLg_Signal_0>NLg_long0)  )
       { 
              ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0, NULL,MagicNum,0,CLR_NONE);
              if(ticket < 0)  { Print("Ошибка #", GetLastError(), " при открытии ордера BUY" ); prevtime = Time[1]; }
       }
    //---------проверяем условие на продажу----------------- 
         if  (   
              (NLg_Signal_1>=NLg_short0)  &&
              (NLg_Signal_0<NLg_short0)  )
       { 
              ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0, NULL,MagicNum,0,CLR_NONE);
              if(ticket < 0)  { Print("Ошибка #", GetLastError(), " при открытии ордера SELL" ); prevtime = Time[1]; }
       }
   }
//------------------------------------------------------------------
//********* Закрытие позиций ****************************************
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()==MagicNum)   { 
    //-----------------------------------------------------                  
    if (OrderType() == OP_BUY) { 
          if(Stochast_1>75 && Stochast_0<75)     {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию
                     return(0); // выходим
                    }       
         }  
     //--------------------------------------------------------
    if (OrderType() == OP_SELL) { 
          if(Stochast_1<25 && Stochast_0>25)    {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию
                     return(0); // выходим
                    }       
         }  
 //-------------------------------------------------------                       
    }  // Symbol()  
  } // select
 } //total
} //Close_ 
 //****************************************************************************   
   return(0);
      }



しかし、私があなただったら、このEAを実際の口座で使うことはしないでしょう。順番に、あるいは「準備」しておく必要があります ;)
 

はい、もちろんです。ご協力ありがとうございました私のミスについてのコメント、了解しました。

そして、あなたの推薦をメモしておきました。本格的な取引はまだ先だが...。

p.s/ すべてがうまくいっている...。!そして、その効果はいかに!?

 
このような閉鎖によって利益が増加することは当然ありません。しかし、ドローダウンが......。大幅に減少することが多い。
 
komposter:
コードは見ていない。
ただ、ひとつだけ確かなことは、「if(Stochast_1>75 && Stochast_0<75)」ではなく、「if(Stochast_1>75 && Stochast_0<=75)」にすることです。

より良い方法は、int型と double型の不要な変換を避けるために、 if(Stochast_1-75.0>0 && Stochast_0-75.0<=0) とすることであろう。
 
また、不必要なintやdoubleを避けるにはどうしたらよいのでしょう。?さらに、extern int Up_lim = 80; extern int Low_lim = 20 というように、数値を外部パラメータに置き換えることも可能です。
 
rid:
また、不必要なintやdoubleを避けるにはどうしたらよいのでしょう。?解らないんです。また、数値の代わりに外部パラメータを使用することもできます extern int Up_lim = 80; extern int Low_lim = 20;

第一に、実数のStochast_と整数の75を比較するのは誤りであり、第二に、それらの差を0と比較するのがより正しいのです。

'実数の比較'。