Hatalar, hatalar, sorular - sayfa 2137

 

Kâr okurken hata (veya zaten bir şey anlamadım).

Danışman içinde bir işlev vardır:

 bool Fn_profit_summ( double &profit_summ, bool is_buy, ulong magic, bool prnt= false ){
   profit_summ = 0 ;
   string str=(is_buy? "B" : "S" )+ " -> " ; 
   //-----------------------------             
   int total = PositionsTotal ();          
   for ( int i=total- 1 ; i>= 0 ; i--){
       const ulong tic= PositionGetTicket (i); if (tic<= 0 )     return ( false ); //--- asinchr
       if (! PositionSelectByTicket (tic)                   )   return ( false ); //--- asinchr 
       bool is_buy_ = ( PositionGetInteger ( POSITION_TYPE   )== POSITION_TYPE_BUY ); 
       if ( is_buy_                             !=  is_buy)   continue ; 
       if ( PositionGetInteger ( POSITION_MAGIC ) !=  magic )   continue ;
       if ( PositionGetSymbol ( POSITION_SYMBOL ) != _Symbol )   continue ;
      profit_summ += PositionGetDouble ( POSITION_PROFIT )+ PositionGetDouble ( POSITION_SWAP );
       str+= IntegerToString (tic)+ " - " + DoubleToString (( PositionGetDouble ( POSITION_PROFIT )+ PositionGetDouble ( POSITION_SWAP )), 2 )+ "/" ;
      }
   //-----------------------------
   if ( prnt) Print (str+ " --> " + DoubleToString (profit_summ, 2 ));
   return ( true );}

Günlükte görüyorum:

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

Her şey iyi olurdu, ama bu bir satın alma emrinin karı, bir satış emri değil

Bilet tam olarak satış emirleri (273, günlükte olduğu gibi)


İşlevde, senkronizasyonu kontrol ettim ve tür doğru kabul edildi, ancak kâr gerçekten aynı değil. Eğer böyleyse, o zaman bu genellikle bir kıyamettir - müşteri yalnızca belirtilen kar / zarara ulaştığında satış ve alım pozisyonlarını ayrı ayrı kapatır ve satışı sürekli olarak kapatır. kar satın alır. Ayrıca, depo yanlışlıkla boşaltılabilir

(eğer yeniden düzenlediysem ve zaten bana öyle geliyorsa - düzeltin lütfen. Umarım böyledir ve böyle kritik bir hata yoktur)

 
Galina Bobro :

Kâr okunurken hata oluştu (veya zaten bir şey anlamadım).

Danışman içinde bir işlev vardır:

Günlükte görüyorum:

Her şey iyi olurdu, ama bu bir satın alma emrinin karı, bir satış emri değil

Bilet tam olarak satış emirleri (273, günlükte olduğu gibi)


İşlevde, senkronizasyonu kontrol ettim ve tür doğru kabul edildi, ancak kâr gerçekten aynı değil. Eğer böyleyse, o zaman bu genellikle bir kıyamettir - müşteri yalnızca belirtilen kar / zarara ulaştıktan sonra satış ve alım pozisyonlarını ayrı ayrı kapatır ve satışı sürekli kapatır çünkü. kar satın alır. Ayrıca, depo yanlışlıkla boşaltılabilir

(eğer yeniden düzenlediysem ve zaten bana öyle geliyorsa - düzeltin lütfen. Umarım böyledir ve böyle kritik bir hata yoktur)

 string str=( ! is_buy? "B" : "S" )+ " -> " ;
 
Kirill Belousov :
Bu ne için? Neden "eğer S çıktısını satın alırsanız" ihtiyacım var?
 

Genellikle özel sembollerle çalışırım. Örneğin, bunun üzerinde hata ayıklamanız gerekir. Bunu yapmak için adını buraya girmeniz gerekir.


Ancak özel sembollerin adları (yalnızca özel olanlar değil) uzun/karmaşık olabilir, bu da onları klavyeden yazarken zordur. Sembolün adını herhangi bir yerde arabelleğe kopyalamak için bir mekanizma yoktur. Bu nedenle, bu menüye "Sembol adını kopyala" öğesini eklemeyi öneriyorum.


PS Tester Görüntüleyicisine milisaniye ekleyin, lütfen!

 
fxsaber :

PS Tester Görüntüleyicisine milisaniye ekleyin, lütfen!

ekleyelim

 

Çalışma hatası

 struct A {
template < typename T>
         void Print (   T t ) { :: Print ( 2 ); }
        ~A() { Print ( 1 ); }
};
void OnStart () { A a; }

Sonuç : 1

Beklenen: 2

 
A100 :

Beklenen: void A::Print<int>(int):1

Büyük olasılıkla, normal Baskı'nın kurnazlığı ile bağlantılıdır. Aynı şekilde iCustom'u da aşırı yükleyeceksiniz. Bence sonuç aynı olacak.

Print, Comment , Alert, iCustom, ... için ad alanı - görünüşe göre özel bir şey.

 
fxsaber :

Büyük olasılıkla, normal Baskı'nın kurnazlığı ile bağlantılıdır.

Bağlı değil

 void Print2( int )           { Print ( 1 ); }
struct A {
template < typename T>
         void Print2(   T t ) { Print ( 2 ); }
        ~A() { Print2( 1 ); }
};
void OnStart () { A a; }

sonuç aynı

 

Özel semboller için SymbolInfoTick, Geçmiş'te işaretler olsa bile boş bir onay işareti döndürür (CustomTicksAdd yapılmadığında).

Terminal tarafında, herhangi bir CustomTicksReplace'den sonra, Geçmişin son işaretinin (veya yalnızca zamanının) SymbolInfoTick tarafından yapılmasını öneririm.


Geliştiricilerden, bu eylemi askıya almanın mantıklı olduğu - Terminal mi yoksa kullanıcı mı?

Bunu Terminalde görüyorum çünkü. bu, Kullanıcıyı kodunda nadiren algılanabilen hatalardan kurtaracaktır (yakalanan bir hata).

Şimdi, örneğin, bir sembolün son zamanı bu şekilde bulunmalıdır.

   ulong GetOriginalLastTime( void ) const
  {
     MqlTick Tick[ 1 ] = { 0 };

    :: SymbolInfoTick ( this .Symb, Tick[ 0 ]);
    
     if (!Tick[ 0 ].time_msc)
      :: CopyTicks ( this .Symb, Tick, COPY_TICKS_ALL , 0 , 1 );

     return (Tick[ 0 ].time_msc);
  }
 
A100 :

Bağlı değil

sonuç aynı

Evet, böcek. Onunla hiç karşılaşmadım, tk. Bunu her zaman yöntemlere eklerim.