Pazar Derinliği ne olmalı? - sayfa 12

 
Camın serbest bırakılmasındaki gecikme, yeni bir motor tipi yapma ihtiyacı nedeniyle ortaya çıktı. Glass - bağımsız bir motor olarak çalışan bağımsız bir uygulama olarak, özel bir API sağlamalıdır, aksi takdirde kapalı bir program olarak değeri çok daha az olacaktır. Daha önce yaptığım motorlar tamamen kullanıcı komutlarına bağlıydı ve kendi işlevleri yoktu. Yeni tip bir motor, hem bağımsız hem de dışarıdan kontrol altında çalışmalıdır. Şimdi bu sorunu çözüyorum.
 

Bugün ileriye doğru atılan bir başka önemli adımı işaret ediyor. Artık motor, parametrelerinin değerlerini kendisine bağlı kullanıcı uygulamasıyla senkronize ederek bağımsız bir uygulama olarak çalışabilir. Uygulama daha önce olduğu gibi bağlandı ancak artık motorun işlevselliği tarafından belirlenen değerleri talep edebiliyor. Dolayısıyla bu, programlar arasında yeni bir etkileşim düzeyine geçiştir. Motor, bağımsız bir program olarak, işlevselliğini biriktirebilir ve sağlanan API'yi uygulamalara genişletebilir.

Depth of Market , bağımsız bir uygulama haline geldi (yarın veya yarından sonraki gün bitireceğim) ve bir gösterge olarak çalışıyor. Bağlantıyı kullanarak, kullanıcılar bu sipariş defterinin değerlerini alabilir ve bunları değiştirilmiş bir biçimde sipariş defterine döndürerek yeniden tanımlayabilir. Örneğin: DOM alanlarından birindeki fiyat özel bir kodla analiz edildi ve bazı önemli göstergelerin seviyesi olduğu ortaya çıktı. Kullanıcı, dize işaretçisini bu alana gönderir ve o fiyatın yanında görünür. Bu, hem motorların hem de kullanıcı programlarının geliştirilmesi için yeni ilginç fırsatlar açar.

not. Daha önce yalnızca uygulamaya gönderilen GUI motorlarının olayları artık motorun dahili işlevselliğine de gidiyor ve olayların paralel işlenmesi aynı anda iki uçta - motorda (benim koduma göre) ve kullanıcıda gerçekleştirilir. . uygulama (kullanıcı koduna göre). Düğmeye basın - hem motorun işlevselliği hem de bağlı uygulamanın işlevselliği çalışacaktır.
 
Camdaki böyle bir çip, şimdi piyasada kapatırsanız, kar gibi yeterli değildir, yani. camın doldurulmasını dikkate alarak - küçük olanlardan biraz daha fazla olan pozisyonlar için geçerlidir (örneğin, 100-150 lot).
 
Kısayol tuşları olacak mı?
 
Andrey Gladyshev :
Kısayol tuşları olacak mı?
Mutlaka.
 
Aleksey Vyazmikin :
Camdaki böyle bir çip, şimdi piyasada kapatırsanız, kar gibi yeterli değildir, yani. camın doldurulmasını dikkate alarak - küçük olanlardan biraz daha fazla olan pozisyonlar için geçerlidir (örneğin, 100-150 lot).
Bardağın doldurulması için muhasebe. Bunu geciktirmemek için temel sürüm çıktıktan sonra düşüneceğim.
 
Pazar Derinliği hazır olacak. API bağlantı belgeleri büyük ölçüde ertelendi. Belgelerinizi biçimlendirme dilinizde yazmak son derece zaman alıcıdır. Ve cam belgelerinin de yapılması gerekiyor. Ve camın kendisi. Ve paralel olarak, kodu, yapıcıyı optimize edin, hataları düzeltin, özellikler ekleyin. Bu yüzden bu kadar uzun. Ama sonra her şey daha hızlı ve daha hızlı olacak.
 
Program hangi dilde yazılmış?
Gelen verilerin gerçek işlem hızı nedir?
Veriler fiyat seviyeleri arasında nasıl dağıtılır?
for döngüsünün her seviye için kendi veri değişkeni var mı?
Camın teşhir şeklini Batı terminallerine benzer şekilde seçmeleri doğru.
Sipariş defterine eklemenizi, ilgili OCO siparişlerini üç seviyeye kadar yönetmenizi öneririm.
Genel olarak, herhangi bir işlevsel batı camını alabilir ve içlerinde ne uygulandığını görebilirsiniz.
Veya QScalp scalping sürücüsünün nasıl uygulandığını görün.
 
Roman :
Program hangi dilde yazılmış?
Gelen verilerin gerçek işlem hızı nedir?
Veriler fiyat seviyeleri arasında nasıl dağıtılır?
for döngüsünün her seviye için kendi veri değişkeni var mı?
Camın teşhir şeklini Batı terminallerine benzer şekilde seçmeleri doğru.
Sipariş defterine eklemenizi, ilgili OCO siparişlerini üç seviyeye kadar yönetmenizi öneririm.

1. Program iki dilde yazılmıştır. Temel MQL5 dili ve bunun üzerine benim biçimlendirme dilim.

2. Gönderildiği gibi dağıtılır. Yani, doğru hücrelerde. Kelimelerle açıklamak zor. Kodu daha sonra yayınlayacağım. Tabii ki, verileri doğru hücrelere almak için orada terlemem gerekti, ancak bu sorun çözüldü.

3. Evet, sorulan, mantıklı ve önemli olan her şeyi ekleyeceğim.
 

Sipariş defterimin hücreleri arasında veri dağıtmak için kullanılan kod:

 void On_DOM_Event()
{
 int t = 0 ;
 //----------------------------
 MqlTick last_tick;
 SymbolInfoTick ( Symbol (),last_tick);
 //----------------------------
 MarketBookGet ( NULL ,priceArray); 
 //----------------------------
 double p = 0 ;
 long    ask_size = 0 , bid_size = 0 ;
 int     s = ArraySize (priceArray);
 //----------------------------
 if (s > 0 )
   {
     //-------------------------   ---
     for ( int i1 = 0 ; i1 < 100 ; i1++)prices[i1]  = NULL ;
     for ( int i1 = 0 ; i1 < 100 ; i1++)ask_vol[i1] = NULL ;
     for ( int i1 = 0 ; i1 < 100 ; i1++)bid_vol[i1] = NULL ; 
     //----------------------------
     int Closest_to_ask = 0 ;
     //----------------------------
     for ( int a1 = 0 ; a1 < s; a1++)
      {
       if (
              priceArray[a1].price == last_tick.ask
          || (priceArray[a1].price < last_tick.ask && (((a1 + 1 < s) && priceArray[a1 + 1 ].price >= last_tick.bid) || (a1 + 1 == s)))
         )
         {
          Closest_to_ask = a1;
           break ;
         } 
      } 
     //----------------------------
     for ( int a2 = Closest_to_ask; a2 >= 0 ; a2--)
      { //Alert("t ",t,"  a2  ",a2);
       prices[ 49 -t]  =  Normalize_Double(priceArray[a2].price, _Digits , _Point );
       ask_size     +=  priceArray[a2].volume;
       ask_vol[ 49 -t] =  ( string )priceArray[a2].volume;
       t++;
      }
     //--------------------------------  
    t = 0 ;
     //Alert("_Digits   ",_Digits);
     //--------------------------------  
     for ( int a3 = Closest_to_ask + 1 ; a3 < s; a3++)
      { 
       prices[ 50 +t]  =   Normalize_Double(priceArray[a3].price, _Digits , _Point );
       bid_size      +=  priceArray[a3].volume;
       bid_vol[ 50 +t] =   ( string )priceArray[a3].volume;
       t++;
      }         
 //------------------------------------------------       
 //------------------------------------------------ 
 E_DOM_1_Price(prices[ 40 ]);    E_DOM_1_Ask_size(ask_vol[ 40 ]);
 E_DOM_2_Price(prices[ 41 ]);    E_DOM_2_Ask_size(ask_vol[ 41 ]); 
 E_DOM_3_Price(prices[ 42 ]);    E_DOM_3_Ask_size(ask_vol[ 42 ]); 
 E_DOM_4_Price(prices[ 43 ]);    E_DOM_4_Ask_size(ask_vol[ 43 ]); 
 E_DOM_5_Price(prices[ 44 ]);    E_DOM_5_Ask_size(ask_vol[ 44 ]);
 E_DOM_6_Price(prices[ 45 ]);    E_DOM_6_Ask_size(ask_vol[ 45 ]);
 E_DOM_7_Price(prices[ 46 ]);    E_DOM_7_Ask_size(ask_vol[ 46 ]);
 E_DOM_8_Price(prices[ 47 ]);    E_DOM_8_Ask_size(ask_vol[ 47 ]);  
 E_DOM_9_Price(prices[ 48 ]);    E_DOM_9_Ask_size(ask_vol[ 48 ]); 
 E_DOM_10_Price(prices[ 49 ]);   E_DOM_10_Ask_size(ask_vol[ 49 ]);
 //-------------------------------------------------
 E_DOM_11_Price(prices[ 50 ]);  E_DOM_11_Bid_size(bid_vol[ 50 ]);
 E_DOM_12_Price(prices[ 51 ]);  E_DOM_12_Bid_size(bid_vol[ 51 ]);
 E_DOM_13_Price(prices[ 52 ]);  E_DOM_13_Bid_size(bid_vol[ 52 ]); 
 E_DOM_14_Price(prices[ 53 ]);  E_DOM_14_Bid_size(bid_vol[ 53 ]); 
 E_DOM_15_Price(prices[ 54 ]);  E_DOM_15_Bid_size(bid_vol[ 54 ]); 
 E_DOM_16_Price(prices[ 55 ]);  E_DOM_16_Bid_size(bid_vol[ 55 ]); 
 E_DOM_17_Price(prices[ 56 ]);  E_DOM_17_Bid_size(bid_vol[ 56 ]); 
 E_DOM_18_Price(prices[ 57 ]);  E_DOM_18_Bid_size(bid_vol[ 57 ]);    
 E_DOM_19_Price(prices[ 58 ]);  E_DOM_19_Bid_size(bid_vol[ 58 ]); 
 E_DOM_20_Price(prices[ 59 ]);  E_DOM_20_Bid_size(bid_vol[ 59 ]);
 //------------------------------------------------- 
 }
 RMSG( 1 );
}


Gelen verileri kaydetmek için 100 hücrelik bir dizi yaptım. Gelen verileri merkezinden (49 nolu hücre) talep ve teklife doğru paketliyorum, ön olarak talep ve teklife en yakın fiyatı hesaplıyorum.