Kontrol et - neyi yanlış yaptım?

 

kod yazarım

 int GetN()
{
   int n = 0 ;
   for ( int i = OrdersHistoryTotal() - 1 ; i >= 0 ; i--)
   {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol )
      {
         bool profit = OrderType() == OP_BUY ? OrderClosePrice() > OrderOpenPrice() : OrderClosePrice() < OrderOpenPrice();
         
         bool loss = OrderType() == OP_BUY ? OrderClosePrice() < OrderOpenPrice() : OrderClosePrice() > OrderOpenPrice();
         
         bool neutral = OrderClosePrice() == OrderOpenPrice();

            SumPosOrder = OrderLots();
            Tiket2 = OrderTicket();
           }


         if (loss)
           {
            n++;
            ObchMin = ObchMin + SumPosOrder; // Подсчет общего минуса
            Minus++;                         //Подсчет отрицательных сделок
            Sdelok++;                         //Подсчет количества сделок
           }

         if (n >= MartinSteps)
           {
            n = 0 ;
             break ;
           }

         if (profit)
           {
            ObchPlus = ObchPlus + (SumPosOrder * 0.8 ); // Расчет для Бинарных опционов поэтому умножаю на 0,8
           }

         if (profit && ObchPlus < ObchMin)
           {
            n++;
            Pobeda++;
            Sdelok++;
           }



         if (profit && ObchPlus > ObchMin)
           {
            ObchPlus = 0 ;
            ObchMin = 0 ;
            Pobeda++;
            Sdelok++;
            n = 0 ;
             break ;
           }
        }
     
   return n;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double SelectVolume( int n)
  {
   return
      n == 0 ? Volume1
      : n == 1 ? Volume2
      : n == 2 ? Volume3
      : n == 3 ? Volume4
      : n == 4 ? Volume5
      : n == 5 ? Volume6
      : n == 6 ? Volume7
      : n == 7 ? Volume8
      : n == 8 ? Volume9
      : n == 9 ? Volume10
      : Volume1;
  }
//+------------------------------------------------------------------+

Görev başlangıçta şuydu:
Son kapatılan siparişi bulun.
Artı kapalı veya eksi ile kontrol edin.
İşlem sayısını sayın
Artıları ve eksileri sayın.

Bahis miktarını hesaplayın.


İşlem pozitifse (ve toplam eksi = 0) o zaman 1 numaralı bahis
Anlaşma olumsuzsa, eksi sayarız ve 2 No'lu oran veririz.
Artı ama eksi > 0 ise, sonraki bahis.
Ama nedense bahis sayısını ve bahis miktarını doğru hesaplamıyor...

 

örneğin dize

 bool neutral = OrderClosePrice() == OrderOpenPrice();

belki de algoritmik koşulların çalışmasını aşağıdaki gibi oluşturmak gerekir:

   bool neutral=false;

   if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;

peki, aynı ruhta diğer iki koşul

 

Bu arada, tarihteki son ticaret her zaman sonuncusu değildir.

 
Nikita Chernyshov # :

Bu arada, tarihteki son ticaret her zaman sonuncusu değildir.

Evet, seçimi zamanla kaldırdım, ancak şu ana kadar hala çalışmıyor ...
Renat Akhtyamov # :

örneğin dize

belki de algoritmik koşulların çalışmasını aşağıdaki gibi oluşturmak gerekir:

   bool neutral=false;

   if(NormalizeDouble(OrderClosePrice(),_Digits) == NormalizeDouble(OrderOpenPrice(),_Digits)neutral=true;

peki, aynı ruhta diğer iki koşul

Bu bloğu daha önce diğer sistemlerde kullandım ve bu kısımda mükemmel çalıştı.
Ama yine de, elbette kontrol edip yeniden yazacağım. Sonuçları size bildireceğim.
 
Natalya Smirnova # :
Evet, zaman örneklemesini kaldırdım ama hala çalışmıyor ... Bu bloğu daha önce diğer sistemlerde kullandım ve bu kısımda mükemmel çalıştı.
Ama yine de, elbette, kontrol edip yeniden yazacağım. Sonuçları size bildireceğim.

Bu değişkenler bir yerde sıfıra mı ayarlanmış?

            ObchMin = ObchMin + SumPosOrder; // Подсчет общего минуса
            Minus++;                         //Подсчет отрицательных сделок
            Sdelok++;                         //Подсчет количества сделок
 
Renat Akhtyamov # :

Bu değişkenler bir yerde sıfıra mı ayarlanmış?

Evet, başlangıçta 0 değerine sahipler
ve tamamlanana kadar.
 
Renat Akhtyamov # :

Bu değişkenler bir yerde sıfıra mı ayarlanmış?

Belki tersinden gidin.
Şimdilik bu fonksiyondan istatistik toplamayı, diğerinde genel eksi ve istatistikleri kaldıracağım (ayrı bir fonksiyon üreteceğim)

Bloklar halinde yazıyorum.

İstatistik toplamak ve eksi ve artı saymak için blok (eksi ve artı global değişkenler)

 if ( OrderSelect ((OrdersHistoryTotal() - 1 ), SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol )
              {
               if (OrderTicket() != Tiket2)
                 {
                   bool profit1 = false ;
                   if (OrderClosePrice() > 0 )
                    {
                     profit1 = true ;
                    }
                   bool loss1 = false ;
                   if (OrderClosePrice() < 0 )
                    {
                     loss1 = true ;
                    }


                  SumPosOrder = OrderLots();
                  Tiket2 = OrderTicket();
                   Print (OrderCloseTime());
                 


               if (loss1)
                 {
                  ObchMin = ObchMin + SumPosOrder;
                  Minus++;
                  Sdelok++;
                 }



               if (profit1)
                 {
                  ObchPlus = ObchPlus + (SumPosOrder * 0.8 );
                 }

               if (profit1 && ObchPlus < ObchMin)
                 {

                  Pobeda++;
                  Sdelok++;
                 }




               if (profit1 && ObchPlus > ObchMin)
                 {
                  ObchPlus = 0 ;
                  ObchMin = 0 ;
                  Pobeda++;
                  Sdelok++;

                 }
}


Oranın hesaplanması (daha doğrusu örnekleme) için değişken n'nin Blok 2 seçimi

 int GetN()
  {
   int n = 0 ;
   for ( int i = OrdersHistoryTotal() - 1 ; i >= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) && OrderMagicNumber() == Magic && OrderSymbol() == _Symbol )
        {
         bool profit = false ;
         if (OrderClosePrice() > 0 )
            profit = true ;

         bool loss = false ;
         if (OrderClosePrice() < 0 )
            loss = true ;


        }


       if (loss)
        {
         n++;
        }

       if (n >= MartinSteps)
        {
         n = 0 ;
         break ;
        }

      

       if (profit && ObchPlus < ObchMin)
        {
         n++;
        }



       if (profit && ObchPlus > ObchMin)
        {
         n = 0 ;
         break ;
        }
     }

   Print (n);

   return n;
  }


double SelectVolume( int n)
  {
   return
      n == 0 ? Volume1
      : n == 1 ? Volume2
      : n == 2 ? Volume3
      : n == 3 ? Volume4
      : n == 4 ? Volume5
      : n == 5 ? Volume6
      : n == 6 ? Volume7
      : n == 7 ? Volume8
      : n == 8 ? Volume9
      : n == 9 ? Volume10
      : Volume1;
  }
//+------------------------------------------------------------------+


Bu muhtemelen doğru olurdu...

 

mantığı anlayana kadar

nasıl yani?

 bool profit = false ;
         if (OrderClosePrice() > 0 )
            profit = true ;

         bool loss = false ;
         if (OrderClosePrice() < 0 )
            loss = true ;

Bir emrin kapanış fiyatı nasıl sıfırdan az olabilir?

Kapanış fiyatı açılış fiyatından yüksekse AL emri pozitif bölgede olacaktır.

İşte satın almanın artı koşulu (komisyonlar ve takaslar hariç):

OrderClosePrice() > OrderOpenPrice()
eğer tersiyse, o zaman olumsuzdur.
 
Renat Akhtyamov kapanış fiyatı nasıl sıfırdan az olabilir?

Kapanış fiyatı açılış fiyatından yüksekse AL emri pozitif bölgede olacaktır.

İşte satın almanın artı koşulu (komisyonlar ve takaslar hariç):

eğer tersiyse, o zaman olumsuzdur.

İkili opsiyonlar için yazdığım için biraz farklı yaptım:

 if (OrderProfit() > 0 )


Yani muhtemelen doğru olurdu?

 
Natalya Smirnova # :

Belki tersinden gidin.
Şimdilik bu fonksiyondan istatistik toplamayı, bir diğerinde genel eksi ve istatistikleri kaldıracağım (ayrı bir fonksiyon üreteceğim)

Bloklar halinde yazıyorum.

İstatistik toplamak ve eksi ve artı saymak için blok (eksi ve artı global değişkenler)


Oranın hesaplanması (daha doğrusu örnekleme) için değişken n'nin Blok 2 seçimi


Bu muhtemelen doğru olurdu...

Algoritma boyunca size zaten tavsiye verildi, karışmak istemiyorum ve kodunuza ve aynı tavsiyeye bakmadım bile ... Ve bu

 double SelectVolume( int n)
  {
   return
      n == 0 ? Volume1
      : n == 1 ? Volume2
      : n == 2 ? Volume3
      : n == 3 ? Volume4
      : n == 4 ? Volume5
      : n == 5 ? Volume6
      : n == 6 ? Volume7
      : n == 7 ? Volume8
      : n == 8 ? Volume9
      : n == 9 ? Volume10
      : Volume1;
  }

gözüme çarptı. Bu bağlamda soru şudur: switch ifadesini uygulamak daha kolay ve daha okunaklı değil mi?

 double SelectVolume( int n)
  {
   double Volume = 0.0 ;
     switch (n)
    {
     case 1   :  Volume = Volume2;     break ;
     case 2   :  Volume = Volume3;     break ;
     case 3   :  Volume = Volume4;     break ;
     case 4   :  Volume = Volume5;     break ;
     case 5   :  Volume = Volume6;     break ;
     case 6   :  Volume = Volume7;     break ;
     case 7   :  Volume = Volume8;     break ;
     case 8   :  Volume = Volume9;     break ;
     case 9   :  Volume = Volume10;     break ;
     default :  Volume = Volume1;     break ;
    }
   return (Volume);
  }
Bence okuması ve anlaması daha kolay. Belki biraz daha hızlı çalışır.
 
Alexey Viktorov # :

Algoritma boyunca size zaten tavsiye verildi, karışmak istemiyorum ve kodunuza ve aynı tavsiyeye bakmadım bile ... Ve bu

gözüme çarptı. Bu bağlamda soru şudur: switch ifadesini uygulamak daha kolay ve daha okunaklı değil mi?

Bence okuması ve anlaması daha kolay. Belki biraz daha hızlı çalışır.
Çok deneyimli olmadığım için teklifiniz benim için tamamen yeni.
Başlangıçta bulduğum gibi yaptım, işe yaradı, bu yüzden geliştirmeyi düşünmedim.
Ne derler bilirsiniz - işe yarıyor - dokunmayın.

Ama şimdi kesinlikle bu yöntemi uygulamaya çalışacağım. Çünkü öğrenmen ve büyümen gerekiyor.

Şimdi n değişkenimle ilgileneceğim. O düşünülmek istemiyor.
her zaman n = 0 (şimdilik)
Neden: