Hatalar, hatalar, sorular - sayfa 1861

 

başka bir soru - normal mi, bayrakların olmaması? 1585 inşa

alpari


fxopen



FxOpen Alpari MQ
COPY_TICKS_INFO
Teklif Ver ve/veya Sor
93016 83916 79292
COPY_TICKS_TRADE
Son ve Hacim
271061 0 102924
COPY_TICKS_ALL
tüm tikler
364077 426568 182216

her yerde ise COPY_TICKS_ALL = COPY_TICKS_INFO + COPY_TICKS_TRADE

alpariye eşittir nedir?

 
kaus_bonus :

alpari

fxopen

Paletleri yok.
 
fxsaber :
Paletleri yok.


bu anlaşılabilir, ancak COPY_TICKS_ALL elde etmek için ne eklenir?

çünkü COPY_TICKS_TRADE=0 var

ve tarihte eksik bayraklı keneler bilinmiyor COPY_TICKS_TRADE ?

 
kaus_bonus :


bu anlaşılabilir, ancak COPY_TICKS_ALL elde etmek için ne eklenir?

çünkü COPY_TICKS_TRADE=0 var

ve tarihte eksik bayraklı keneler bilinmiyor COPY_TICKS_TRADE ?

Bence bunlar brokerlerin çarpık elleri.
 

HistoryDealGet* ve HistoryOrderGet* işlevleri, performans açısından çok garip yazılmış.

Örneğin, 100.000 ayrı kayıtta HistorySelect yaptığımda. Daha sonra HistoryDealGet işlevi, ilk argümanı tarihsel tablodaki kayıt numarasını değil, bileti gerektirir. Masa bilete göre değil zamana göre sıralanır. Bu nedenle, yürütülürken, HistoryDealGet işlevinin yaptığı ilk şey, her seferinde tablodan geçmek ve uygun bir Bilet aramaktır.


Neden bu kadar kaynak israfı? İlk biletin ve son biletin farklı hızlarda uygulanacağı ortaya çıktı. Ve son anlaşmanın tüm özelliklerini elde etmek için, HistoryDealGet işlevleri her seferinde tüm tablo boyunca çalışacaktır.


Neden doğru yapmıyorsun?

 long HistoryDealGetInteger ( const int index, const ENUM_ORDER_PROPERTY_INTEGER   property_id ); // номер сделки, а не тикет


Ve bir HFT robotu nasıl test edilir, eğer mevcut pozisyonun komisyonunun boyutunu bulmak için, her seferinde HistorySelect aracılığıyla ve hiçbir durumda HistorySelectByPosition aracılığıyla fren geçmişine gitmeniz gerekiyorsa? Bekleyen bir siparişin kaymasının performans çöplüğüne dönüştüğünü görün!

 

Test cihazındaki ACCOUNT_PROFIT saçmalık gösteriyor.

Tam orada bir pozisyon açan ve kapatan bir danışman başlatıyoruz

 #include <MT4Orders.mqh>

#define PRINT(A) Print ( #A + " = " + ( string )(A));

void OnTick ()
{  
   static bool FirstRun = true ;

   if (FirstRun && OrderSelect ( OrderSend ( _Symbol , OP_BUY , 1 , 0 , 0 , 0 , 0 ), SELECT_BY_TICKET ))
  {
    PRINT( AccountInfoDouble ( ACCOUNT_PROFIT ))
    
     if ( OrderClose ( OrderTicket (), OrderLots (), 0 , 0 ) && OrderSelect ( OrdersHistoryTotal () - 1 , SELECT_BY_POS , MODE_HISTORY ))
       OrderPrint ();
    
    FirstRun = false ;          
  }
}

Sonuç

 2017.04 . 19 23 : 24 : 50.317 RTS- 6.17 ,M1 (MetaQuotes-Demo): generating based on real ticks
2017.04 . 19 23 : 24 : 50.317 RTS- 6.17 ,M1: testing of Experts\fxsaber\Test2.ex5 from 2017.04 . 06 00 : 00 to 2017.04 . 08 00 : 00 started
2017.04 . 19 23 : 24 : 50.419 RTS- 6.17 : real ticks begin from 2017.04 . 06 00 : 00 : 00
2017.04 . 19 23 : 24 : 50.419 2017.04 . 06 09 : 45 : 01    deal # 2 buy 1.00 RTS- 6.17 at 114250 done (based on order # 2 )
2017.04 . 19 23 : 24 : 50.419 2017.04 . 06 09 : 45 : 01    deal performed [ # 2 buy 1.00 RTS- 6.17 at 114250 ]
2017.04 . 19 23 : 24 : 50.419 2017.04 . 06 09 : 45 : 01    order performed buy 1.00 at 114250 [ # 2 buy 1.00 RTS- 6.17 at 114250 ]
2017.04 . 19 23 : 24 : 50.421 2017.04 . 06 09 : 45 : 01    AccountInfoDouble ( ACCOUNT_PROFIT ) = 0.0
2017.04 . 19 23 : 24 : 50.421 2017.04 . 06 09 : 45 : 01    exchange sell 1.00 RTS- 6.17 at 114200 , close # 2 ( 114200 / 114250 )
2017.04 . 19 23 : 24 : 50.421 2017.04 . 06 09 : 45 : 01    deal # 3 sell 1.00 RTS- 6.17 at 114200 done (based on order # 3 )
2017.04 . 19 23 : 24 : 50.421 2017.04 . 06 09 : 45 : 01    deal performed [ # 3 sell 1.00 RTS- 6.17 at 114200 ]
2017.04 . 19 23 : 24 : 50.421 2017.04 . 06 09 : 45 : 01    order performed sell 1.00 at 114200 [ # 3 sell 1.00 RTS- 6.17 at 114200 ]
2017.04 . 19 23 : 24 : 50.421 2017.04 . 06 09 : 45 : 01    # 3 2017.04 . 06 09 : 45 : 01 buy 1.00 RTS- 6.17 114250 0 0 2017.04 . 06 09 : 45 : 01 114200 0.00 0.00 - 56.44 0
2017.04 . 19 23 : 24 : 50.629 RTS- 6.17 ,M1: 582089 ticks, 1573 bars generated. Environment synchronized in 0 : 00 : 00.063 . Test passed in 0 : 00 : 00.421 (including ticks preprocessing 0 : 00 : 00.078 ).

ACCOUNT_PROFIT sıfır gösteriyor ama aslında -56.44. Sonuç olarak, eşitlik, dezavantaj vb. yanlış değerlendirilir.

PositionGetDouble( POSITION_PROFIT ) - benzer.

 
fxsaber :

Ve bir HFT robotu nasıl test edilir, eğer mevcut pozisyonun komisyonunun boyutunu bulmak için, her seferinde HistorySelect aracılığıyla ve hiçbir durumda HistorySelectByPosition aracılığıyla fren geçmişine gitmeniz gerekiyorsa? Bekleyen bir siparişin kaymasının performans çöplüğüne dönüştüğünü görün!

HistorySelect, istenen zaman aralığında ikili arama yoluyla çalışıyor mu, çalışmıyor mu? Onlar. O(N) veya O(log(N))?
 
fxsaber :
HistorySelect, istenen zaman aralığında ikili arama yoluyla çalışıyor mu, çalışmıyor mu? Onlar. O(N) veya O(log(N))?
Numara. Bu durumda, ikili arama geçerli değildir.
 
Slawa :
Numara. Bu durumda, ikili arama geçerli değildir.
Böylece dahili olarak her iki geçmiş de (Siparişler ve Anlaşmalar) zamana göre sıralanır. Biz tamamen optimize edilmemiş HistorySelectByPosition değil, HistorySelect hakkında konuşuyoruz.
 
fxsaber :
Böylece dahili olarak her iki geçmiş de (Siparişler ve Anlaşmalar) zamana göre sıralanır.

Üzgünüm, heyecanlandım.

Evet, zamana göre sıralanmış. Başlangıç girişi ikili arama ile aranır.

Neden: