Hangi tasarım doğru? - sayfa 4

 
Martingeil :
Bunu böyle yap.

 if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber)

İşte bu yanlış anlama çizgisiyle. Benim düşünceme göre, burada hiç gerekli değil. Yoksa yanılıyor muyum?

 
valenok2003 :

İşte bu yanlış anlama çizgisiyle. Benim düşünceme göre, burada hiç gerekli değil. Yoksa yanılıyor muyum?

Bu özel sembolün büyüsünü kesmek gerekiyordu

arama yaparken, sihir içermeyen bir sembolle bir emrin başlangıcından itibaren arar, yoksa fonksiyon çalışmayı durdurur ......... böyle bir sembole sahip emirler bulursa, o zaman geçer aralarında sihir aramak ve ticaret akışı serbest ise sihire karşılık gelenleri kapatır.

 
valenok2003 :

İşte bu yanlış anlama çizgisiyle. Benim düşünceme göre, burada hiç gerekli değil. Yoksa yanılıyor muyum?

tüm siparişleri silmekten bahsediyorsak, o zaman normalleştirme hakkında bu satıra gerek yok, yerleşik komut dosyalarının onlardan bir örnek almanız gerektiği fikrini nereden aldınız?
 
Martingeil :

Bu özel sembolün büyüsünü kesmek gerekiyordu

arama yaparken önce sadece sihir içermeyen bir sembolle emir arar, yoksa fonksiyon çalışmayı durdurur, böyle bir sembole sahip emirler varsa onları inceler ve sihirle eşleşenleri bulur ve kapatır. ticaret akışı serbest ise onları.

Ve MagicNumber'ı önceden nasıl biliyoruz, çünkü onu OrderMagicNumber() kullanarak alıyoruz. Ve ayrıca, çizgi
OrderSymbol() == Symbol ()

çoğaltılmış.

Ayrıca bu çizgi

 Print ( "close ALL orders Type : order :  Bid  " +OrderType()+ " :  " +OrderOpenPrice()+ "  :  " +Bid);

Bence gereksiz, kapatmayla ilgili bilgiler zaten günlüğe kaydedildi.

 
Techno :
tüm siparişleri silmekten bahsediyorsak, o zaman normalleştirme hakkında bu satıra gerek yok, yerleşik komut dosyalarının onlardan bir örnek almanız gerektiği fikrini nereden aldınız?


Ne de olsa Marx.
 
Martingeil :

Bu özel sembolün büyüsünü kesmek gerekiyordu

arama yaparken, sihir içermeyen bir sembolle bir emrin başlangıcından itibaren arar, yoksa fonksiyon çalışmayı durdurur ......... böyle bir sembole sahip emirler bulursa, o zaman geçer aralarında sihir aramak ve ticaret akışı serbest ise sihire karşılık gelenleri kapatır.

yani açık, sadece tüm siparişleri kapatmaktan bahsediyorum, o yüzden hemen girmedim

Örneğinizi şu şekilde değiştirme özgürlüğünü aldım:

  for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--) 
  {
    OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol ()) 
    { 
      if (OrderMagicNumber() == MagicNumber)
      {
        while (!IsTradeAllowed()) Sleep ( 1000 );
        if (OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), 5 , CLR_NONE );
        if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), 5 , CLR_NONE );
      }
    }
  }

ve tüm siparişleri kapatmak için

  for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--) 
  {
    OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol ()) 
    { 
      while (!IsTradeAllowed()) Sleep ( 1000 );
      if (OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), 5 , CLR_NONE );
      if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), 5 , CLR_NONE );
    }
  }
 
valenok2003 :


Ne de olsa Marx.
evet, Engels bile) kişilik kültlerine gerek yok, bilginize dayanarak yazın)
 
valenok2003 :
eğer demek istiyorsan

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

Ya da belki başka bir şeyden bahsediyorsunuz?

 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 ;
      }        
    }
  }  
}

Bu durumda bu konuda.

C\C++ için "ortak standart":

 void Close_All()
{
  int Total = OrdersTotal ();
  for ( int i=Total- 1 ; i >= 0 ; i--)                                                        
  {                                                                                          
    if ( OrderSelect ( i ,SELECT_BY_POS,MODE_TRADES))
    {
      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 ;
      }        
    }
  }  
}

Fark işlem sayısındadır. Bu durumda güçlü bir etkisi yoksa, örneğin, test kullanıcısı için stillerdeki farklılık optimizasyon süresi üzerinde önemli bir etkiye sahip olacaktır. Gerçek - işin hızında, bazen kritiktir.

Bu yapı özellikle yavaş (sizin için görmedim ama nedense çoğunluk bunu tercih ediyor?):

 for ( int i= 0 ; i< OrdersTotal (); i++)

Burada, döngünün her geçişinde işlev çağrılır . Hesaplama maliyetleri açısından en "pahalı" işlem.

İyi şanlar.

PS Evet bu anlamda kodları düzelttiğinizi görüyorum.

 

Sonuç böyle bir komut dosyasıdır

 //+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for ( int trade = OrdersTotal ()- 1 ; trade >= 0 ; trade--) 
  {
    OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol ()) 
    { 
      while (!IsTradeAllowed()) Sleep ( 1000 );
      if (OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Bid, Digits ), 5 , CLR_NONE );
      if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble (Ask, Digits ), 5 , CLR_NONE );
    }
  }
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
Soru - Neden tüm siparişleri her zaman kapatmıyor? Örneğin art arda üç Satış açarım, sonra bir script ile kapatmaya çalışırım, bir veya iki veya hepsini kapatabilir. Sebebi ne?
 

Kahretsin, bu gerekli - tüm seçeneklerden yanlış olanlardan birini seçin. Sen, arkadaşım, kodlamaya kontrendikesin.

Ve alıntılar nedeniyle her şeyi kapatmıyor .