Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 408

 
khorosh :
Kodun doğruluğunu değerlendirmek için yazarın tam olarak ne almak istediğini bilmeniz gerekir. Bilgileriniz yeterli değil. Ne elde etmek istediğiniz tam olarak net değil. Eğer şebekeyi kapattıktan sonra, fiyatın bu son emir yönünde belirli bir puan geçmesini bekleyerek ters bir emir açarak zararı telafi etmek istiyorsanız, o zaman tazminat süreci hem bu emrin lotuna hem de fiyatın uygun bir yönde geçeceği mesafede. Bu, partiyi hesaplamak için, kaybı telafi etmek için fiyatın geçmesi gereken mesafeyi de ayarlamak gerektiği anlamına gelir. Belki de başka bir şey demek istedin.


Evet, daha kesin olmalıydım. Bu işlevin ne yapması gerektiğini iki kez tam olarak belirttim ama kimse cevap vermedi. Bir kez daha, bu işlevin ne yapması gerekiyor. Bak, diyelim ki elimde bir siparişler listesi var. Aynı adımla açılıp açılmadıkları önemli değildir. Bazı emirler daha önce açıldı, bazıları daha sonra, yani her pozisyon farklı bir lotla farklı sayıda puan geçti. Belirli koşullar altında şebeke kapanır VE TP PUANLARI İÇİN BU ŞEBEKEDEN KAYBI KAPATMAK İÇİN GEREKLİ PARTİ HESAPLAMAM GEREKİR. İki ayna fonksiyonu yazmamak için fonksiyona otype parametresini ekledim.

Ancak bir yerde hata var. Lütfen düzeltmeme yardım et.

 double FindRightLot ( int otype) // функция поиска лота, необходимого для выхода из просадки после 
                               //закрытия сетки ордеров
{
   double Lot= 0 ; double TotalLot= 0 ;
   for ( int i = OrdersTotal ()- 1 ; i> 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
    {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType () == otype)
       {
         if (otype == OP_BUY )
         {
           Lot = NormalizeDouble ((( OrderOpenPrice ()- Bid )* Point )* OrderLots ()/TP, 2 ); 
           if (Lot> 0 )
           {
              TotalLot= TotalLot+Lot;
           }
         }
           
       
         else if (otype == OP_SELL )
         {
           Lot = NormalizeDouble ((( Ask - OrderOpenPrice ())* Point )* OrderLots ()/TP, 2 );
           if (Lot> 0 )
           {
            TotalLot= TotalLot+Lot;
           }
           
         }
       }
     }
   }
   return (TotalLot);
   
 }
 
BeerGod :

Sıfırdan başlayarak kapanması için bir şekilde doğru şekilde uygulamak mümkün müdür? Mümkünse, bir kod satırı lütfen.
Tüm listeyi (siparişleri) gerekli yönde yineleyin ve Bilet değerlerini bir diziye girin ve ardından bu dizi üzerinde yineleyerek siparişleri silin.
 
BeerGod :

Sıfırdan başlayarak kapanması için bir şekilde doğru şekilde uygulamak mümkün müdür? Mümkünse, bir kod satırı lütfen.


aceleyle:

 //+------------------------------------------------------------------+
//|                 Закрыть все ордера                               |
//+------------------------------------------------------------------+


double ClossAllOrders ()

{
   for ( int i= 0 ; i< OrdersTotal (); )
  {
     if ( ! OrderSelect (i, SELECT_BY_POS ) )
      break;
    
     int type   = OrderType ();

     bool result = false ;
    
     switch (type)
    {
       //Close opened long positions
       case OP_BUY        : result = OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_BID ), Slippage, Lime );
                           break ;
      
       //Close opened short positions
       case OP_SELL       : result = OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK ), Slippage, Lime );
                           break ;

       //Close pending orders
       case OP_BUYLIMIT   :
       case OP_BUYSTOP    :
       case OP_SELLLIMIT :
       case OP_SELLSTOP   : result = OrderDelete ( OrderTicket () );
    }
    
     if (result == false )
    {
       Print ( "Order " , OrderTicket () , " failed to close. Error:" , GetLastError() );
      i++;
       Sleep ( 500 );
    }  
  }
}

// End
 
Trader7777 :

Evet, daha kesin olmalıydım. Bu işlevin ne yapması gerektiğini iki kez tam olarak belirttim ama kimse cevap vermedi. Bir kez daha, bu işlevin ne yapması gerekiyor. Bak, diyelim ki elimde bir siparişler listesi var. Aynı adımla açılıp açılmadıkları önemli değildir. Bazı emirler daha önce açıldı, bazıları daha sonra, yani her pozisyon farklı bir lotla farklı sayıda puan geçti. Belirli koşullar altında şebeke kapanır VE TP PUANLARI İÇİN BU ŞEBEKEDEN KAYBI KAPATMAK İÇİN GEREKLİ PARTİ HESAPLAMAM GEREKİR. İki ayna fonksiyonu yazmamak için fonksiyona otype parametresini ekledim.

Ancak bir yerde hata var. Lütfen düzeltmeme yardım et.



diğer tarafa gidecektim. İlk önce, şebekeyi kapatmanın kaybını hesaplardım. Peki, o zaman her şey basit. Zarar = Bir sonraki siparişten elde edilen kâr. Siparişten elde edilen karı lot ve TR cinsinden ifade edin ve denklemden lotu bulun.
 
Contender :


aceleyle:


Çok teşekkür ederim, her şey doğru çalışıyor, cevap veren herkese teşekkürler!


 
khorosh :
diğer tarafa gidecektim. İlk önce, şebekeyi kapatmanın kaybını hesaplardım. Peki, o zaman her şey basit. Zarar = Bir sonraki siparişten elde edilen kâr. Siparişten elde edilen karı lot ve TP cinsinden ifade edin ve denklemden lotu bulun.


şebekeyi para veya puan olarak kapatmaktan kaynaklanan kayıp?
 
Trader7777 :

ızgarayı para veya puan olarak kapatmaktan kaynaklanan kayıp?
Mevduat para biriminde .
 
Ancak her bir çiftin farklı bir puan fiyatı olduğu gerçeği nasıl dikkate alınır?
 
Trader7777 :
Ancak her bir çiftin farklı bir puan fiyatı olduğu gerçeği nasıl dikkate alınır?
Ve neden buna ihtiyacın var?
 
Trader7777 :
Ancak her bir çiftin farklı bir puan fiyatı olduğu gerçeği nasıl dikkate alınır?

Burada nasıl uygulandığını görebilirsiniz


https://www.mql5.com/ru/code/7275

https://www.mql5.com/ru/forum/113937/page2

https://docs.mql4.com/en/constants/marketinfo