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

 
goldtrader :

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.

Bu durumda 8. ondalık basamaktaki hatanın sonucu etkilemeyeceğini düşünüyorum.
 

Blok kapanış pozisyonlarında başka bir problem ortaya çıkar. Bu bloğu favori Uzman Danışmanıma ekledim. Hangi sadece kesinlikle trend yönünde esnaf açar (bunun için ona dua edin...)

Ancak, eğilimin gücüne bağlı olarak, Uzman Danışman sürekli olarak birkaç işlem açabiliyor (ve yapıyor!) - birbiri ardına! - bir tür "martingale karşıtı". Gösterge sinyali üzerindeki pozisyonları kapatmak için Blok'a ihtiyacım olan yer burasıdır. Ama sorun şu! - Ne zaman ve eğer trend boyunca birkaç pozisyon açılırsa ve trende karşı bir düzeltme başlarsa, o zaman Kapanış Bloğundaki gösterge bir sinyal verir - kapanmak için. İhtiyacım olduğu gibi.

Ancak aynı zamanda, nedense TÜM AÇIK pozisyonlar hiç kapalı değildir. Ve temelde, - sadece en erken. Daha sonra açılanlar, kapanış sinyaline tepki vermezler ve hareket etmeye devam ederler. Ve dahası, - "tarih bir saçmalık gibi tekerrür ediyor"! Her kapatma sinyaliyle, yalnızca biri kapanır - en erken açık konum ve geri kalanı hareket etmeye devam eder! Tüm pozisyonların çoğu kalıcıdır.

İşte görsel mod grafiği. Göstergenin sinyalinin kapanması yeşil bir üçgen ile gösterilir. Her seferinde bir sinyalde sadece bir pozisyonun kapatıldığı açıkça görülmektedir. Ve tüm açıkları kapatmak istiyorum! Lütfen söyle bana, burada sorun ne?

Kodu hatırlıyorum:

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

Pozisyon Kapanış Bloğu ile ilgili başka bir sorun ortaya çıkıyor...

Ve OrdersTotal () üzerindeki döngü nerede?
 
granit77 :
Ve OrdersTotal () üzerindeki döngü nerede?
Varsa bile, 0'dan OrdersTotal()-1'e kadardır, ancak tam tersi olmalıdır;)
 

Hayır, burada değil. Siparişler tanımlanmıştır - aksi halde:

 //---------------------------------------------------------------------------------+
//---- Функция проверки наличия ордеров эксперта ----------------------------------+
//---------------------------------------------------------------------------------+
// 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 ) ; }

Ve kodun bu versiyonu benim için daha uygun! Uzun ve kısa pozisyonlarım olduğu için - birbirlerinden bağımsız olarak açılıyorlar.

 //---------проверяем условие на покупку----------------------------
if ( LONG ) {     //если  "выключатель" включен
 if  ( ... ... ...      )
   {
  ticket = OrderSend ( Symbol () , 0 , Lot , Ask , Slippage , Bid - SL * Point ,
                                        Ask + TP * Point , NULL , MagicLong , 0 , CLR_NONE ) ; 
 

Ancak ve standart kapanışta - hepsi aynı tarih. ...

 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_
 
rid :

Ancak ve standart kapanışta - hepsi aynı geçmiş. ...

 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_

Ama yine de OrdersTotal'dan 0'a tam tersini yapmayı deneyebilirsiniz. Bu yardımcı olacaktır.
 

Ama nasıl yapmalı? Çok ağır değilse lütfen yazın. Bu arada, işte tablo - yukarıdaki "standart" ile: Her şey aynı - hindi sinyaliyle sadece bir pozisyon kapandı -

 
rid :

Ama nasıl yapmalı?

Komposter ve Vinin'e göre, bunun yerine:
for (int v=0; v< OrdersTotal (); v++)

yazmak:
for (int v=OrdersTotal()-1; v>0; v--)

Benim için çalışıyor.
 
granit77 :
kurtulmak :

Ama nasıl yapmalı?

Komposter ve Vinin'e göre, bunun yerine:
for (int v=0; v< OrdersTotal (); v++)

yazmak:
for (int v=OrdersTotal()-1; v>0; v--)

Benim için çalışıyor.

Oldukça doğru. KimV'nin tüm bunları uygulayan komut dosyaları ve kitaplıkları olmasına rağmen. Görmeye değmeli. Ve belki onun forumunda.
Neden: