[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 334

 
hoz :


Boris, int GetGeneralSignal() işlevindeki koşullardan birini yorumlarsanız, açılış açıktır.

takip ettim. Mevcut açık siparişlerin karlılığı kırmızı renkte olduğunda bayrak değerini değiştirmez. İşte kısa ve uzun bayrakların değerini false olarak ayarlaması gereken yeniden yazılmış bir fonksiyon, yani. olumsuz emirler varsa pozisyon açma yasağı:

Çağırma işlevi burada:

Belki koy için şartlar daha uygundur? Doğru, bugün sadece eurodaki çok zayıf bir düşüş nedeniyle satışları açıyorum, ama yine de bir şey hiç yoktan iyidir!
 
borilunad :
Belki koy için şartlar daha uygundur? Doğru, bugün sadece eurodaki çok zayıf bir düşüş nedeniyle satışları açıyorum, ama yine de bir şey hiç yoktan iyidir!


Numara. Aynı yerde, int GetGeneralSignal() işlevinde, net bir şekilde çalışan bir sinyal kaydedilir. Sinyal ilkel, sadece test için aldım. RSI üst limiti geçerse - satın alın ve alt ise - satın. Ben kendim hindi kullanmıyorum, ancak bunu tamamen deney için kontrol etmeye karar verdim.

Böyle. Bayraklar olmadan her şey mükemmel çalışıyor. Bayraklarla öyle değil. Sonuçta, int FindOrders ( bool & long , bool & short ) işlevi belirli bir türde bir sipariş içerdiğinde ve karı sıfırın altındaysa, işlevime göre, GetGeneralSignal() işlevine yapılan başvuru bir için false geçmelidir. belirli bir bayrak, ancak aslında bayrakların değeri her zaman doğrudur :

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders(bool& long, bool& short)
{
   int t, total = OrdersTotal() - 1;
   double profitL,               // Профит лонговой позиции
          profitS;               // Профит шортовой позиции
   
   for (int i=total; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if (OrderSymbol() != Symbol()) continue;
              if (OrderMagicNumber() != i_magic) continue;
              {
                 if (OrderType() == OP_BUY)        // Найден ордер типа OP_BUY
                 {
                     if (profitL < OrderProfit())
                     {
                         profitL = OrderProfit();
                         pr("profitL =" + profitL);
                         if (profitL < 0)
                         long = false;
                     }
                 }

                 else if (OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 {
                     if (profitS < OrderProfit())
                     {
                         pr("profitS =" + profitS);
                         profitS = OrderProfit();
                         if (profitS < 0)
                         long = false;
                     }
                 }
                 t++;
              }
   }
   
   return (t);
}  

Baskıda görüyorum ama bayrak neden değişmiyor belli değil.

Bu arada, siparişlerin karlılığını yazdırdım:

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders( bool & long , bool & short )
{
   int t, total = OrdersTotal () - 1 ;
   double profitL,               // Профит лонговой позиции
          profitS;               // Профит шортовой позиции
   
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
           if (OrderSymbol() != Symbol ()) continue ;
               if (OrderMagicNumber() != i_magic) continue ;
              {
                 if (OrderType() == OP_BUY)         // Найден ордер типа OP_BUY
                 {
                     Print ( "if (OrderType() == OP_BUY)" );
                     profitL = OrderProfit();
                     pr( "profitL =" + profitL);
                     if (profitL < OrderProfit())
                         if (profitL < 0 )
                         long = false ;
                 }

                 else if (OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 {
                     Print ( "if (OrderType() == OP_SELL)" );
                     profitS = OrderProfit();
                     pr( "profitS =" + profitS);
                     if (profitS < OrderProfit())
                         if (profitS < 0 )
                         long = false ;
                 }
                 t++;
              }
   }
   
   return (t);
}

Ve baskıda, bayrakların anlamı şu şekilde gösteriliyor:

Onlar. Karlılık sıfırdan küçük olduğunda, ilgili bayrağın false 'den çevrilmesi gerektiği açıkça görülüyor, ancak bu olmuyor... Her şey basit görünüyor, ancak bir şey çalışmıyor.

 
hoz :


Numara. Aynı yerde, int GetGeneralSignal() işlevinde, net bir şekilde çalışan bir sinyal kaydedilir. Sinyal ilkel, sadece test için aldım. RSI üst limiti aştıysa - satın alın ve alt ise - satın. Ben kendim hindi kullanmıyorum, ancak bunu tamamen deney için kontrol etmeye karar verdim.

Böyle. Bayraklar olmadan her şey mükemmel çalışıyor. Bayraklarla öyle değil. Sonuçta, int FindOrders ( bool & long , bool & short ) işlevi belirli bir türde bir sipariş içerdiğinde ve karı sıfırın altındaysa, işlevime göre, GetGeneralSignal() işlevine yapılan başvuru bir için false geçmelidir. belirli bir bayrak, ancak aslında bayrakların değeri her zaman doğrudur :

Baskıda görüyorum ama bayrak neden değişmiyor belli değil.
Bak, her iki durumda da uzun=yanlış yazmışsın, peki sana nasıl açılacak?!
 
hoz :



Baskıda görüyorum ama bayrak neden değişmiyor belli değil.

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders( bool & long , bool & short )
{
   int t, total = OrdersTotal () - 1 ;
   double profitL,               // Профит лонговой позиции
          profitS;               // Профит шортовой позиции
   
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
           if (OrderSymbol() != Symbol ()) continue ;
               if (OrderMagicNumber() != i_magic) continue ;
              {
                 if ( OrderType() == OP_BUY )         // Найден ордер типа OP_BUY
                 {
                     Print ( "if (OrderType() == OP_BUY)" );
                     profitL = OrderProfit();
                     if (profitL < OrderProfit())
                         if (profitL < 0 )
                         l ong = false ;
                 }

                 else if (OrderType() == OP_SELL )       // Найден ордер типа OP_SELL
                 {
                     Print ( "if (OrderType() == OP_SELL)" );
                     profitS = OrderProfit();
                     if (profitS < OrderProfit())
                         if (profitS < 0 )
                         long = false ; /// ?????????????????????? 
                 }
                 t++;
              }
   }
   
   return (t);
}  
 

Bir yazım hatası düzeltildi.

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders( bool & long , bool & short )
{
   int t, total = OrdersTotal () - 1 ;
   double profitL,               // Профит лонговой позиции
          profitS;               // Профит шортовой позиции
   
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
           if (OrderSymbol() != Symbol ()) continue ;
               if (OrderMagicNumber() != i_magic) continue ;
              {
                 if (OrderType() == OP_BUY)         // Найден ордер типа OP_BUY
                 {
                     if (profitL < OrderProfit())
                     {
                         profitL = OrderProfit();
                         pr( "profitL =" + profitL);
                         if (profitL < 0 )
                         long = false ;
                     }
                 }

                 else if (OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 {
                     if (profitS < OrderProfit())
                     {
                         pr( "profitS =" + profitS);
                         profitS = OrderProfit();
                         if (profitS < 0 )
                         short = false ;
                     }
                 }
                 t++;
              }
   }
   
   return (t);
}

İşte ekran görüntüsü:

Grafikte, alımların eksi ile olduğu ve yine de bayrak = TRU olduğu görülebilir.

 
İyi akşamlar, lütfen bana Uyarı formunun koşul oluştuğunda ve koşul her karşılandığında değil de yalnızca bir kez görünmesini nasıl sağlayacağımı söyler misiniz?
 

Senin için üzüldüm! Şimdi size fonksiyonlar tarafından engellenen döngüler olmadan nasıl çalışacağını yazacağım! İşte kodunuz, ama onu neye değiştireceğim!

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
bool& long , bool & short )
double profitL,               // Профит лонговой позиции
       profitS;               // Профит шортовой позиции
 
// int start()
 
//.........................................


  
   if(ExistPositions() == false)
   {
      if(long == true)
      {
         OrderSend(.......OPEN_BUY........................)  
      }
      if(short == true)
      {
         OrderSend(.......OPEN_SELL.........................)
   }  }
   if(ExistPositions() == true)
   {
      if(profitL > 0 && long == true && short == false)
      {
         OrderSend(.......OPEN_BUY........................)  
      }
      if(profitS > 0 && short == true && long == false)
      {
         OrderSend(.......OPEN_SELL.........................)
   }  }
      


                     
Bu şemanın hiçbir sorunu yoktur ve anında çalışır! Gereksiz özelliklerden kaçının! ExistPositions() işlevini Dear Kim'in Faydalı İşlevleri'nde bulabilirsiniz!
 
borilunad :

Senin için üzüldüm! Şimdi size fonksiyonlar tarafından engellenen döngüler olmadan nasıl çalışacağını yazacağım! İşte kodunuz, ama onu neye değiştireceğim!

Bu şemanın hiçbir sorunu yoktur ve anında çalışır! Gereksiz özelliklerden kaçının! ExistPositions() işlevini Dear Kim'in Faydalı İşlevleri'nde bulabilirsiniz!


Boris, ExistPositions işlevi aynı döngüye sahip, yalnızca daha fazla ekstra kontrol var, bu nedenle yol boyunca yavaşlık olmayacak. Mantığınız bana açık ama önceki sürümün çalışmamasının nedeni açıklanmadı ki bu garip :)

Ayrıca şu bayrakları da kullanırsınız:

 if (profitL > 0 && long == true && short == false )

Ve bunların doğru bir şekilde iade edilmediğini gösterdim.

Yine, bu fonksiyonda kâr ve kâr değişkenleri varsa, bayraklara gerek yoktur.

İşte böyle oldu:

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
int FindOrders( double & profitL, double & profitS)
{
   int t, total = OrdersTotal () - 1 ;
   
   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
           if (OrderSymbol() != Symbol ()) continue ;
               if (OrderMagicNumber() != i_magic) continue ;
              {
                 if (OrderType() == OP_BUY)               // Найден ордер типа OP_BUY
                 {
                     if (profitL < OrderProfit())
                     {
                         profitL = OrderProfit();
                         pr( "profitL =" + profitL);       // Выводим профим через коммент на график
                     }
                 }
                 if (OrderType() == OP_SELL)       // Найден ордер типа OP_SELL
                 {
                     if (profitS < OrderProfit())
                     {
                         pr( "profitS =" + profitS);     // Выводим профим через коммент на график
                         profitS = OrderProfit();
                     }
                 }
                 t++;
              }
   }
   
   return (t);
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий торговый сигнал                                                      |
//+-------------------------------------------------------------------------------------+
int GetGeneralSignal()
{
   double profitL,               // Профит лонговой позиции
          profitS;               // Профит шортовой позиции
        
   if (FindOrders(profitL, profitS) > 30 )
       return (SIGNAL_NO);

   if (ExistPositions() == false )
   {
       if (GetRSI( 1 ) < i_RSIToUpLimit)
      {
         if (GetRSI( 0 ) > i_RSIToUpLimit)
         {
             return (SIGNAL_BUY);
         }
      }
       if (GetRSI( 1 ) > i_RSIToDnLimit)
       {
         if (GetRSI( 0 ) < i_RSIToDnLimit)
         {
             return (SIGNAL_SELL);
         }
      }
   }
   if(ExistPositions() == true)
   {
      if (GetRSI(1) < i_RSIToUpLimit)
         if (GetRSI(0) > i_RSIToUpLimit)
         {
            if(profitL > 0)
               return (SIGNAL_BUY);
         }
      if (GetRSI(1) > i_RSIToDnLimit)
      {
         if (GetRSI(0) < i_RSIToDnLimit)
            if(profitS > 0)
               return (SIGNAL_SELL);
      }
   }
            
   return (SIGNAL_NO);
}

Yine bir sinyalle açılmıyor ama bir şekilde.

 
Merhaba!
Tavsiye konusunda yardım edin, sanal bir iz yapıyorum ve böyle bir sorunla karşılaştım: nedense closelevel=profitpips-TrailingStop satırı çalışmıyor, yani. trol ve GlobalVariableSet ("tral",0) beklendiği gibi dahil edilmiştir, ancak değişken
closelevel'e kâr pipsleri değeri atanır (bu, puan cinsinden mevcut kârdır) ve kâr pipsleri değil - Takip eden tüm sonuçlarla birlikte TrailingStop o_o



 void Trailing()
   {
     if (! GlobalVariableCheck ( "tral" )&&profitpips>=TrailingStart)
     {
      closelevel=profitpips-TrailingStop;
       GlobalVariableSet ( "tral" , 0 );
      }
     if ( GlobalVariableCheck ( "tral" )&&profitpips>=closelevel+TrailingStop)closelevel=profitpips;
     if ( GlobalVariableCheck ( "tral" )&&profitpips<=closelevel)
     {
       Print ( "ВСЁ ОТЛИЧНО ЗАКРЫЛИСЬ ПО ТРАЛЛУ" );
       for ( int i= 0 ; i<NumberOfTry; i++) 
        {
         CloseAll();
         Lot=LOT;
        }
      }  
     return ;}

Anladım, çizgi
 if ( GlobalVariableCheck ( "tral" )&&profitpips>=closelevel+TrailingStop)closelevel=profitpips;  


olarak değiştirildi
 if ( GlobalVariableCheck ( "tral" )&&profitpips-TrailingStop>=closelevel+TrailingStop)closelevel=profitpips; 



şu anda kârda bir artışla cari seviye   modifiye edilmemiş...

her şey zaten anlaşıldı.



 
hoz :


Boris, ExistPositions işlevi aynı döngüye sahip, yalnızca daha fazla ekstra kontrol var, bu nedenle yol boyunca yavaşlık olmayacak. Mantığınız bana açık ama önceki sürümün çalışmamasının nedeni açıklanmadı ki bu garip :)

Ayrıca şu bayrakları da kullanırsınız:

Ve bunların doğru bir şekilde iade edilmediğini gösterdim.

Yine, bu fonksiyonda kâr ve kâr değişkenleri varsa, bayraklara gerek yoktur.

İşte böyle oldu:

Yine bir sinyalle açılmıyor ama bir şekilde.

Öyleyse kendin için kaz! Size bir kod fonksiyonun her kelimesini ve değişkenleri yönetmek için gereklidir. Sabit kodun geldiği yer burasıdır. İşlevler, onlarsız yapamayacağınız durumlarda kullanılmalıdır! Kim'de ihtiyacım olmayan her şeyi yorumladım ve her şey çok hızlı çalışıyor! Unutma, herkese programı birçok koşulda nasıl daha hızlı çalıştıracağımı sordum. Şimdi tüm kenelerde bir yıl boyunca 5 dakikada test yapılıyor! Tüm koşulları ve işlevleri taradım, gereksiz her şeyi attım.
Neden: