Kapanış pozisyonları. Göstergeye göre. - sayfa 2

 

Öyleydi ve bende "<=" var, ancak Stokastik'in değerleri çok iyi değişiyor. her tik ile kuvvetle, - ondalık noktadan sonra değerde dört ondalık basamak daha vardır, yani. bir tıkta, değerler (örneğin) 75.0003 ile 74.0900 arasında değişebilir.

Ve dahası açılış fiyatlarında ... / Böylece "=" işareti korkmadan atlanabilir. Ama elbette, düşünmemek için - belki yaparım.

 
Uzmana baktım - her şey doğru görünüyor. Kontrol edemedim - gösterge yok.
OrderClose'dan önce Print eklemeyi deneyin ve bir kapatma sinyalinin oluşup oluşmadığına bakın.
 

Yapılmış. Katma. Hayır, .....b! Günlük Kapanış notunda görünmez.

 //********* Закрытие позиций ****************************************
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_ 
 //****************************************************************************

Hiçbir şey anlamıyorum! Bu bloğu başka bir Uzman Danışmana ekledim. Ve üçüncüsü. ... . Ama durum değişmedi! Pozisyonlar kapalı değildir . Nadiren de olsa (tarihte bir veya iki kez = 1 yıl), görsel grafikte yeşil bir kapanış üçgeni yanıp sönecektir. Ama böyle olmamalı! Mevzuata göre pozisyonlar, bir dikiş makinesi mekiği gibi kapatılmalıdır!

İndirmede - gösterge NOnLagMA

Dosyalar:
 

Ya da belki bu blok çalışmamalı? Sonuçta kodu açtığımızda stoplar veriliyor: - zararı durdur ve kar al. Ve belki de diğer tüm kapanış koşulları bu nedenle göz ardı edilir?

bilet= OrderSend (Symbol(),0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point, NULL,MagicNum, 0,CLR_NONE);

Ve bununla bir şekilde başa çıkmak zorundasın.

 
rid :

Hiçbir şey anlamıyorum!

Pozisyon kapatma bloğu "if ( OrdersTotal () == 0)" koşulunun içindeydi
Dikkatli olmalısın ;)

İşte test senaryosunun start() işlevi (SL ve TP olmadan, doğru mesajlarla ve gereksiz kayma olmadan):
 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 ) ;
      }



Ama yerinizde olsam bu Expert Advisor'ı gerçek bir hesapta kullanmazdım. Sıraya konmalı, ya da isterseniz "savaş hazırlığı";)
 

Tabiiki. Yardımın için teşekkürler! Hatamla ilgili yorumunuzu anlıyorum.

Ve önerilerinizi not aldım. Gerçek ticaretten önce daha gidecek çok yol var...

ps/ Her şey çalıştı ....! Ve nasıl!

 
Böyle bir kapanışla kar elbette artmaz. Ama işte dezavantaj..... Sıklıkla önemli ölçüde azalır.
 
komposter :
Koda bakmadım.
Ama bir şeyi kesin olarak düzeltirdim: "if(Stochast_1>75 && Stochast_0<75)" yerine "if(Stochast_1>75 && Stochast_0 <= 75)" yapardım.

Ve daha iyi olmazdı: şöyle: int ve double türlerinin gereksiz dönüşümlerini önlemek için if(Stochast_1-75.0>0 && Stochast_0-75.0 <= 0).
 
Ve gereksiz int ve double'dan nasıl kaçınırız. ? Öyle düşünmüyorum. Ayrıca, sayılar yerine harici parametreleri girmek için bir neden vardır - extern int Up_lim = 80; harici int Low_lim = 20;
 
rid :
Ve gereksiz int ve double'dan nasıl kaçınırız. ? Öyle düşünmüyorum. Ayrıca, sayılar yerine harici parametreleri girmek için bir neden vardır - extern int Up_lim = 80; harici int Low_lim = 20;

IMHO, ilk olarak, gerçek Stokast_ ve tamsayı 75'i karşılaştırmak yanlıştır ve ikincisi, farklarını sıfır ile karşılaştırmak daha doğrudur.

'Gerçek sayıların karşılaştırılması'

Neden: