Hangi tasarım doğru? - sayfa 3

 
Techno :
PapaYozh , bu seçeneklerin ikisi de sadece kapanış için ama ya bir değişiklik olursa? Kapatma ve güncelleme için 2 farklı döngüdense tam işleme için 2 onay işareti almak daha iyi olsun


Bir şeyi kapatmanız ve bir şeyi değiştirmeniz gerekiyorsa, for (i=0; i<OrderTotals(); i++) yapısı daha da yanlıştır.

OrdersTotal()-1'den 0'a geçmemiz gerekiyor.

 for ( i=OrderTotals()- 1 ; i>= 0 ; i-- )
{ 




 

onlar. Böyle bir yapı doğru olur mu?

 void Close_All()
{
  int Total = OrdersTotal ();
  for ( int i=Total; i >= 1 ; i--)                                                        
  {                                                                                          
    if ( OrderSelect (i- 1 ,SELECT_BY_POS,MODE_TRADES)==true)
    {
      switch (OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Bid, Digits ), 5 ); break ;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Ask, Digits ), 5 ); break ;
        default     : break ;
      }        
    }
  }  
}
 

Ancak, hala normalleşmeyi anlamıyorum.

Sonuçta, fiyatı hesaplarsam bir şey var, o zaman terminal kapasitesine getirilmesi gerektiği açık.

Ancak burada kapanış, akıştan alınan mevcut fiyatta gerçekleşir ve elbette Rakamlardan daha uzun olamaz.

 
valenok2003 :

Ancak burada kapanış, akıştan alınan mevcut fiyatta gerçekleşir ve elbette Rakamlardan daha uzun olamaz.

Bu, normalleştirilmemiş alıntılara sahip bir test cihazı içindir.
 
valenok2003 :

Ancak, hala normalleşmeyi anlamıyorum.

Sonuçta, fiyatı hesaplarsam bir şey var, o zaman terminal kapasitesine getirilmesi gerektiği açık.

Ancak burada kapanış, akıştan alınan mevcut fiyatta gerçekleşir ve elbette Rakamlardan daha uzun olamaz.

şaka, bu olabilir. bazen Digits=4 Wid ile 1.32343545654'e eşit olabilir, bu olur. Sık değil ama oluyor
 
Techno :
şaka, bu olabilir. bazen Digits=4 Wid ile 1.32343545654'e eşit olabilir, bu olur. Sık değil ama oluyor


Yaşa ve öğren. Teşekkür ederim.
 
valenok2003 :

onlar. Böyle bir yapı doğru olur mu?


Pek değil: aracın "sembolünü" kontrol etmek yok. Birkaç enstrüman için emir açılırsa, o zaman bir enstrümanın emirlerini diğerinin fiyatlarında kapatma riskiyle karşı karşıya kalırsınız. Expert Advisor'ın atılacağı grafikte enstrümanın emirlerini kapatmanız gerekiyorsa, o zaman Expert Advisor'ın hangi grafikten olursa olsun tüm emirleri kapatmanız gerekirse, grafiğin "sembolünü" kullanmanız gerekir. Danışman atacak, ardından siparişin "sembolünü" sayacak ve ilgili "sembol"ün tekliflerini ve tekliflerini isteyecektir. Evet, kodda ekstra adımlar var.

İyi şanlar.

 
valenok2003 :

onlar. Böyle bir yapı doğru olur mu?

 void CloseThisSymbolAll() {
   for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--) {
       OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == Symbol ()) {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber) {
         while (!IsTradeAllowed()) Sleep ( 1000 );
             if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), slip, Blue );
             if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), slip, Red );
             Print ( "close ALL orders Type : order :  Bid  " +OrderType()+ " :  " +OrderOpenPrice()+ "  :  " +Bid);            
         }
      }
   }
}
Bunu böyle yap.
 
VladislavVG :


Evet, kodda ekstra adımlar var.

eğer demek istiyorsan
 int Total = OrdersTotal ();

o zaman burada kod şeffaflığı için ekstra bir değişken var.

Ya da belki başka bir şeyden bahsediyorsun?

 
Techno :
şaka, bu olabilir. bazen Digits=4 Vid ile 1.32343545654'e eşit olabilir bu olur. Sık değil ama oluyor

Ancak, örnek close.mq4 kapanış komut dosyasında (standart MT4 dağıtımında), normalleştirme yoktur.

   if ( OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if (cmd==OP_BUY || cmd==OP_SELL)
        {
         while (true)
           {
            if (cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price, 3 , CLR_NONE );
            if (result!=TRUE) { error= GetLastError (); Print ( "LastError = " ,error); }
            else error= 0 ;
            if (error== 135 ) RefreshRates();
            else break ;
           }
        }
     }
Neden: