MT5 ve iş başında hız - sayfa 61

 
fxsaber :

Forum üyelerinin desteği olmadan bu MQ duvarının yıkılamayacağını hissediyorum. Kod kısa, profesyoneller hızlı hareket etmeli. Orada kusur yok. Pozisyonlar aracılığıyla fiyatların Piyasa İzleme'den çok daha hızlı elde edildiği açıkça gösterilmektedir. MQ bariz olanı nasıl görmüyor - anlamıyorum.

1. Testiniz, duruma bağlı olarak yinelemelerin yüzdesinin mikro kısmını gerçekten hesaba katar.

 if (Interval ##A > 100 )

Aslında, yalnızca işlemci görevlerle aşırı yüklendiğinde ve bu görevin yürütülmesini uzak rafa ertelediğinde anormallikleri sayarsınız, çünkü. yinelemelerin %99'undan fazlası 1 mikrosaniyeden daha kısa sürede gerçekleştirilir.

Ve koşulu> 0 olarak ayarlasanız bile, yine de nesnellik yoktur.

2. Bu tür hızlı işlemlerin zamanının ölçümü, bir yinelemenin değil, yalnızca tam bir döngünün zamanı olarak yapılmalıdır.

3. Ama örneğinizdeki döngü 10 saniye ile sınırlı olduğu için (Neden! Tikler için 0.1 saniye yeterli bence. Sonuçta bir saniyede 3 tıklama gelmesi ve üç tıklamanın da işlenmesi oldukça olasıdır. 10 saniye boyunca ve paralel olarak), sonra zamanlamaya gerek yoktur. Ve belirli bir zamanda kaç yinelemenin gerçekleştirileceğini hesaplamak daha kolaydır. Daha fazla, daha fazla performans.

Kodunuzu "biraz" değiştirdim. Benim versiyonumun gerçeği daha çok yansıttığını düşünüyorum.

Hesaplama, iki seçeneği karıştırmamak için sırayla yapılır. SYMBOL_BID için çift keneler, GetBid() için tek keneler.

Toplamlar ve bunların türetilmesi, her ihtimale karşı derleyiciyi optimizasyona karşı kandırma girişimi olarak eklendi.
Çıktı kümülatiftir.

 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )
#define TimeLoop 125    // 15.625*8  

bool GetPosition( const int Type = OP_BUY)
  {
   bool Res = false ;
   for ( int i = PositionsTotal () - 1 ; (i >= 0 ) && !Res; i--)
      Res = PositionGetTicket (i) && ( PositionGetInteger ( POSITION_TYPE ) == Type) &&
            ( PositionGetString ( POSITION_SYMBOL ) == _Symbol );
   return (Res);
  }

// Альтернативный способ получения Bid-цены текущего символа.
// Запускать только на демо-счетах.
double GetBid()
  {
   static const TICKET_TYPE Ticket = GetPosition() ? PositionGetInteger ( POSITION_TICKET ) : OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );
   return ( PositionSelectByTicket (Ticket) ? PositionGetDouble ( POSITION_PRICE_CURRENT ) : 0 );
  }

#define TOSTRING(A) ", " #A + " = " + ( string )(A)


long N1= 0 ;
long N2= 0 ;
long n= 0 ;
double sum1= 0 ;
double sum2= 0 ;

const bool Init = EventSetTimer ( 10 ) && GetBid(); // Будем выводить статистику каждый 10 секунд.

//+------------------------------------------------------------------+

void OnTick ()
  {
//  return;
   const uint StartTime = GetTickCount ();
   if (n% 2 == 0 )
       while (! IsStopped () && ( GetTickCount () - StartTime < TimeLoop))
        {
         sum1+= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
         N1++;
        }
   else
       while (! IsStopped () && ( GetTickCount () - StartTime < TimeLoop))
        {
         sum2+=GetBid();
         N2++;
        }
   if (n% 2 == 0 && n> 1 )
       if (N1>N2) Print ( _Symbol + ": SYMBOL_BID быстрее GetBid() в " + DoubleToString ( double (N1)/N2, 2 ) + " раза. Среднее время одной итерации: SYMBOL_BID - " + DoubleToString ((TimeLoop* 1000000.0 *n/ 2 )/N1, 2 ) + " ns, GetBid() - " + DoubleToString ((TimeLoop* 1000000.0 *n/ 2 )/N2, 2 ) + " ns" + TOSTRING(sum1) + TOSTRING(sum2));
       else        Print ( _Symbol + ": GetBid() быстрее SYMBOL_BID в " + DoubleToString ( double (N2)/N1, 2 ) + " раза. Среднее время одной итерации: SYMBOL_BID - " + DoubleToString ((TimeLoop* 1000000.0 *n/ 2 )/N1, 2 ) + " ns, GetBid() - " + DoubleToString ((TimeLoop* 1000000.0 *n/ 2 )/N2, 2 ) + " ns" + TOSTRING(sum1) + TOSTRING(sum2));
      n++;
  }
//+------------------------------------------------------------------+

benim sonucum:

 2020.10 . 26 19 : 26 : 46.193 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.97 раза. Среднее время одной итерации: SYMBOL_BID - 45.80 ns, GetBid() - 135.80 ns, sum1 = 106706334.7283292 , sum2 = 35987491.50911281
2020.10 . 26 19 : 26 : 46.193 FxSaberBidSpeed (EURUSD,M1)     EURUSD: SYMBOL_BID быстрее GetBid() в 2.90 раза. Среднее время одной итерации: SYMBOL_BID - 45.10 ns, GetBid() - 130.82 ns, sum1 = 34042649.2788716 ,  sum2 = 11735304.45101236
2020.10 . 26 19 : 26 : 47.085 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.95 раза. Среднее время одной итерации: SYMBOL_BID - 45.57 ns, GetBid() - 134.55 ns, sum1 = 110131593.3516681 , sum2 = 37303001.98488424
2020.10 . 26 19 : 26 : 52.397 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.99 раза. Среднее время одной итерации: SYMBOL_BID - 45.48 ns, GetBid() - 135.90 ns, sum1 = 113269505.1945728 , sum2 = 37903458.6724181
2020.10 . 26 19 : 26 : 59.412 FxSaberBidSpeed (EURUSD,M1)     EURUSD: SYMBOL_BID быстрее GetBid() в 2.85 раза. Среднее время одной итерации: SYMBOL_BID - 45.16 ns, GetBid() - 128.57 ns, sum1 = 36611618.7279973 ,  sum2 = 12858907.51985167
2020.10 . 26 19 : 27 : 00.131 FxSaberBidSpeed (BTCUSD,M1)     BTCUSD: SYMBOL_BID быстрее GetBid() в 2.78 раза. Среднее время одной итерации: SYMBOL_BID - 47.10 ns, GetBid() - 130.88 ns, sum1 = 305215291120.0239 , sum2 = 109832697267.1495
2020.10 . 26 19 : 27 : 03.303 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.96 раза. Среднее время одной итерации: SYMBOL_BID - 45.44 ns, GetBid() - 134.61 ns, sum1 = 116279675.0471961 , sum2 = 39248002.75579567
2020.10 . 26 19 : 27 : 06.318 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 3.01 раза. Среднее время одной итерации: SYMBOL_BID - 45.17 ns, GetBid() - 135.96 ns, sum1 = 119877506.6663743 , sum2 = 39829996.08171722
2020.10 . 26 19 : 27 : 06.709 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 3.01 раза. Среднее время одной итерации: SYMBOL_BID - 44.92 ns, GetBid() - 135.42 ns, sum1 = 123505976.1123297 , sum2 = 40965170.16304104
2020.10 . 26 19 : 27 : 07.803 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.99 раза. Среднее время одной итерации: SYMBOL_BID - 44.84 ns, GetBid() - 134.00 ns, sum1 = 126664503.6443297 , sum2 = 42385980.37108831
Görüldüğü gibi performans farkı standart versiyondan üç kat daha fazla.
 
Nikolai Semko :


Görüldüğü gibi performans farkı standart versiyondan üç kat daha fazla.

fxsaber'ın orijinal sürümü GetBid'in avantajını mı gösteriyor yoksa daha güçlü/daha az yüklü bir bilgisayar mı?

 
Andrey Khatimlianskii :

fxsaber'ın orijinal sürümü GetBid'in avantajını mı gösteriyor yoksa daha güçlü/daha az yüklü bir bilgisayar mı?

Onun versiyonu ayrıca GetBid'in tam CPU yükünde avantajını gösterdi. Ama aynı zamanda, benim versiyonum aynı yükle standart fonksiyonun üç kat avantajını gösteriyor.
Bunun nedeni, sürümümün Teklif fiyatını elde etmek için yapılan tüm yinelemelerin ortalama süresini hesaba katması ve bu, anormal bir takılmaya sahip yalnızca küçük bir kısım olmasıdır.
İşlemcinin hangi nedenle onun için zor bir "dakikada" olduğunu kim bilebilir, standart fonksiyona tam olarak puan verir (gecikme 100 µ'den fazla olduğunda). Ama yine de, normal işlev için ortalama süre üç kat daha azdır.

Örneğin, if (Interval##A > 100) ile aşağıdaki resme sahibim:

(Aralık##A > 0) ise, Teklif fiyatını elde etmek için standart ve alternatif seçenekler arasındaki anormal gecikmelerin rastgele dağılımını gösteren, zaten tamamen farklıdır.

aynı CPU yükündeki testim şunları gösterirken:

 2020.10 . 26 22 : 16 : 10.569 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.79 раза. Среднее время одной итерации: SYMBOL_BID - 57.95 ns, GetBid() - 161.43 ns, sum1 = 108105265.450882 , sum2 = 38804020.20301527
2020.10 . 26 22 : 16 : 12.146 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.79 раза. Среднее время одной итерации: SYMBOL_BID - 57.81 ns, GetBid() - 161.06 ns, sum1 = 111212159.8857315 , sum2 = 39917412.88663763
2020.10 . 26 22 : 16 : 13.741 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.79 раза. Среднее время одной итерации: SYMBOL_BID - 57.37 ns, GetBid() - 159.91 ns, sum1 = 114942034.0034028 , sum2 = 41233865.03452455
2020.10 . 26 22 : 16 : 14.740 FxSaberBidSpeed (EURUSD,M1)     EURUSD: SYMBOL_BID быстрее GetBid() в 3.18 раза. Среднее время одной итерации: SYMBOL_BID - 52.88 ns, GetBid() - 167.92 ns, sum1 = 75470423.51597476 , sum2 = 23764764.64380601
2020.10 . 26 22 : 16 : 15.756 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.78 раза. Среднее время одной итерации: SYMBOL_BID - 57.30 ns, GetBid() - 159.06 ns, sum1 = 117956798.0483066 , sum2 = 42491447.24894404
2020.10 . 26 22 : 16 : 17.646 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.77 раза. Среднее время одной итерации: SYMBOL_BID - 57.19 ns, GetBid() - 158.36 ns, sum1 = 121056970.4066543 , sum2 = 43721243.0341278
2020.10 . 26 22 : 16 : 20.146 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.76 раза. Среднее время одной итерации: SYMBOL_BID - 57.14 ns, GetBid() - 157.85 ns, sum1 = 124053724.3725583 , sum2 = 44907061.11418578
2020.10 . 26 22 : 16 : 21.553 FxSaberBidSpeed (EURUSD,M1)     EURUSD: SYMBOL_BID быстрее GetBid() в 3.15 раза. Среднее время одной итерации: SYMBOL_BID - 52.80 ns, GetBid() - 166.11 ns, sum1 = 78375839.87008552 , sum2 = 24913626.42960918
2020.10 . 26 22 : 16 : 24.865 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.77 раза. Среднее время одной итерации: SYMBOL_BID - 56.94 ns, GetBid() - 157.50 ns, sum1 = 127392085.5933389 , sum2 = 46051851.71182434
2020.10 . 26 22 : 16 : 27.678 FxSaberBidSpeed (USDCAD,M1)     USDCAD: SYMBOL_BID быстрее GetBid() в 2.77 раза. Среднее время одной итерации: SYMBOL_BID - 57.13 ns, GetBid() - 158.30 ns, sum1 = 129851046.9417646 , sum2 = 46862113.16739535

Bu nedenle fxsaber test versiyonunun objektif olmaktan uzak olduğunu düşünüyorum.

İşlemci aracılarla değil, bu komut dosyasıyla yüklendi. Daha verimli çalıştı.

Dosyalar:
LSD.mq5  6 kb
 

hesaplamalara dahil edilen yinelemelerin yüzdesini görsel olarak göstermek için fxsaber testini biraz değiştirdikten sonra:

 2020.10 . 26 22 : 45 : 03.679 FxSaberBidSpeed (USDCAD,M1)     Alert : , TimeBid1-TimeBid2 = 2142416 mcs., TimeBid1 = 2858669 , TimeBid2 = 716253 ,  Всего итераций - 31456223 , из них принято во внимание, NBid1 = 3015 , NBid2 = 1714
2020.10 . 26 22 : 45 : 05.739 FxSaberBidSpeed (BTCUSD,M1)     Alert : , TimeBid1-TimeBid2 = 1521696 mcs., TimeBid1 = 2282285 , TimeBid2 = 760589 ,  Всего итераций - 31417549 , из них принято во внимание, NBid1 = 1794 , NBid2 = 1418
2020.10 . 26 22 : 45 : 06.006 FxSaberBidSpeed (USDJPY,M1)     Alert : , TimeBid1-TimeBid2 = 2241890 mcs., TimeBid1 = 3204507 , TimeBid2 = 962617 ,  Всего итераций - 54138004 , из них принято во внимание, NBid1 = 4401 , NBid2 = 2083
2020.10 . 26 22 : 45 : 09.099 FxSaberBidSpeed (EURUSD,M1)     Alert : , TimeBid1-TimeBid2 = 1000828 mcs., TimeBid1 = 1496646 , TimeBid2 = 495818 ,  Всего итераций - 10037824 , из них принято во внимание, NBid1 = 2429 , NBid2 = 1711
2020.10 . 26 22 : 45 : 14.803 FxSaberBidSpeed (USDCAD,M1)     Alert : , TimeBid1-TimeBid2 = 2676273 mcs., TimeBid1 = 3916168 , TimeBid2 = 1239895 , Всего итераций - 41606744 , из них принято во внимание, NBid1 = 4935 , NBid2 = 3790
2020.10 . 26 22 : 45 : 15.745 FxSaberBidSpeed (BTCUSD,M1)     Alert : , TimeBid1-TimeBid2 = 1521696 mcs., TimeBid1 = 2282285 , TimeBid2 = 760589 ,  Всего итераций - 31417549 , из них принято во внимание, NBid1 = 1794 , NBid2 = 1418
2020.10 . 26 22 : 45 : 16.115 FxSaberBidSpeed (USDJPY,M1)     Alert : , TimeBid1-TimeBid2 = 2653810 mcs., TimeBid1 = 4195095 , TimeBid2 = 1541285 , Всего итераций - 64310228 , из них принято во внимание, NBid1 = 6486 , NBid2 = 3879
2020.10 . 26 22 : 45 : 19.834 FxSaberBidSpeed (EURUSD,M1)     Alert : , TimeBid1-TimeBid2 = 1949809 mcs., TimeBid1 = 3091755 , TimeBid2 = 1141946 , Всего итераций - 19435170 , из них принято во внимание, NBid1 = 4724 , NBid2 = 3547

onlar. yaklaşık %0.01

yine de olurdu.
SymbolInfoDouble(_Symbol, SYMBOL_BID ) öğesinin ortalama yürütme süresi yaklaşık 50 nanosaniye ise, yalnızca yürütme süresi 100.000 nanosaniyeden fazla olanlar sayılır.

Dosyalar:
 
Nikolai Semko :

hesaplamalara dahil edilen yinelemelerin yüzdesini görsel olarak göstermek için fxsaber testini biraz değiştirdikten sonra:

onlar. yaklaşık %0.01

yine de olurdu.
SymbolInfoDouble(_Symbol, SYMBOL_BID ) öğesinin ortalama yürütme süresi yaklaşık 50 nanosaniye ise, yalnızca yürütme süresi 100.000 nanosaniyeden fazla olanlar sayılır.

Koşul 100 μs'den fazla değil, 3 μs'den fazla yapılabilir. Sonuç görünüşe göre aynıydı. Buradaki fikir, segmental bir çalışmanın ve farklı yürütme koşullarında, farklı segmentlerde ve farklı alanlarda tam tersi bir fark olabileceğiydi. Yürütme öncelikleri genellikle bir şeye bağlı olarak yapılır. Hafif bir yükle, bazı öncelikler, ağır bir yük ile diğerleri, kritik olanlarla, bilgisayarın donmasına ve çökmesine izin vermeyenler ve performans arka planda kaybolur.

Genel olarak, demirin %70'inden fazlasını yüklerken ticaret yapmak doğru değildir. Neredeyse kritik bir infaz. Savaş danışmanlarına demir yüklemesi% 60'tan fazla olmamalıdır.

 
Bir süre bilgisayar başında olmayacağım, o yüzden kısa keseceğim.

Algoritmik ticarette, düzenli olarak fren yapıldığında hastanedeki ortalama sıcaklık kimseyi rahatsız etmez. Fiyatları milisaniye cinsinden almak - düzenli olarak. Ve bu savaş koşullarında.

Fiyatlar, ticaret için önemli anlarda gecikme patlamaları olmadan elde edilebilirse, böyle bir fırsat için savaşacağım.

Kod, böyle bir koltuk değneğinin var olduğunu kanıtladı. Frene çarpmak istemiyorsanız koltuk değneği kullanın.

Burada, biz de bir bardakla çalışırken, alınan fiyatların alaka düzeyini karşılaştırma koduna henüz kimse bakmadı. Ve hafifçe söylemek gerekirse, ciddi sorular var.

Gerçek şu ki, normal işlev, bir koltuk değneğinden daha sık feci bir şekilde gecikiyor. Ve ortalama sürenin sıfıra yakın olmasına aldırmayın. Ticaret sırasında sorun yaratan gecikmelerdir.

HFT istiyorsanız, şimdilik yavaş milisaniye seviyesini bile unutun.
 
HFT brokerleriniz var mı?)
 
secret :
HFT brokerleriniz var mı?)
Evet.
 
Igor Makanu :

Piyasa saatinde bir sembol olduğunda ve onlarca sembol olduğunda SymbolInfoTick'i test etmeyi deneyin, ancak bir enstrüman talep edin - örneğiniz gibi

sunucudan sıkıştırılmış trafiğin gelme olasılığı yüksektir ve veriler paketten çıkarıldığında bu periyodik SymbolInfoTick frenleri görünür

onlar. çok sayıda karakter olduğunda, test süresinde daha sık veya derin düşüşler olacaktır.

Son sürümlerde, bir kene akışı almanın teorik olarak bile bir etkisi yoktur. Pratikte, SymbolInfoTick zaten önbellekle çalışıyor , ancak bireysel vatandaşlar kara kedi aramaya devam ediyor.

%80 CPU yükünde test etmenin mantığını göremiyorum

Ve testte %80 bile yok. 4 çekirdek üzerinde 6 ajan var, yani. %100 garantilidir.

Tek soru, sisteminin görev zamanlayıcısının bu durumla nasıl başa çıktığıdır. Aynı zamanda, suçlanacak olanın terminalin uygulanması olduğu yönünde açıklamalar yapılıyor.

Onlar. bilgisayar ölçüsüzce yüklendiğinde, kelimenin tam anlamıyla her şey yavaşladığında yapay olarak bir durum yaratılır ve ardından "ah, bak, neden terminalin bazen orada geciktiği" tarzında ifadeler yapılır.

Gözlerimizi kapatalım, bu koşullarda bile "yaklaşık %0,01" - ayrıntıların canı cehenneme! "Hastanedeki ortalama sıcaklık kimseyi rahatsız etmiyor", "gecikmeler ticaret sırasında sorun yaratıyor" ve "HFT istiyoruz" demeniz yeterli.

Ayrıca, elbette, HFT'nin eski bir ofis masaüstünde veya ölü bir sanal makinede 20 uzmanın içinde olmasını istiyoruz.

Uygulamasında PS PositionSelectByTicket(), erişim senkronizasyonu ile koşulsuz olarak paylaşılan bir kaynağa erişime sahiptir. Ve her aramada pozisyonu seçmezseniz, eski fiyatı okuyorsunuz. SymbolInfoDouble aracılığıyla bir "anlık görüntü" yapmak daha kolaydı.

Ордерa, позиции и сделки в MetaTrader 5
Ордерa, позиции и сделки в MetaTrader 5
  • www.mql5.com
Конечной целью трейдера является извлечение прибыли посредством торговых операций на финансовых рынках. В этой статье дается описание терминов и процессов торговой платформы MetaTarder 5, знание которых необходимо для правильного понимания работы торговых функций языка MQL5. Ордера — это принятые торговым сервером запросы на совершение торговых...
 
Gerçek zamanlı çekirdek bir şekilde yardımcı olabilir mi?
Neden: