Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği) - sayfa 24

 
Artyom Trishkin :
Rusça? ispanyolca'da? İngilizcede? Ne üstüne?

doğal olarak terminalin desteklediği tüm dillerde

biçim önemli değil - yapıcının dili parametre olarak aldığı bir sınıf biçiminde bir SB olabilir

ya da GetTxtErrDescription_RU() ile biten dil kodlamasına sahip bir grup kullanıcı tanımlı işlev olabilir.

hatta GetLastError() gibi normal bir işlev

bir arzu olurdu


tamam hadi gidelim, her şeye sahibim ama rütbem evrensel esenlikle ilgilenmeme izin vermiyor, özel eğitimli kişilerin kullanılabilirlik ve kullanım kolaylığı ile ilgilenmesine izin ver

 

Konumlarınızın neden iki katına çıktığını tahmin ettim.))) CodeBase'e iki kitaplık yerleştirdiğiniz için)))


 

GetTickCount() yerine; Ben beğenmedim, kodun tamamını yavaşlatmıyor, Sleep'ten farklı olarak, ping yüksekse en az 500ms takabilirsiniz,

çoklu karakterimde, OrderSend'den sonra her çift için ayrı bir sayaç etkinleştirilir, mantığın geri kalanı çalışmaya devam eder

 void OnStart ()
  {
   MqlTradeRequest BuyRequest = { 0 };
   MqlTradeResult result = { 0 };
   BuyRequest.action = TRADE_ACTION_DEAL ;
   BuyRequest.type = ORDER_TYPE_BUY ;
   BuyRequest.symbol = _Symbol ;
   BuyRequest.volume = 0.1 ;
   BuyRequest.type_filling = GetFilling();
//---
   while ( 1 && ! IsStopped ())
     {
       static uint LastOnCalculate = GetTickCount ();
       if ( GetTickCount () - LastOnCalculate > 5 )
         //---
        {
         BuyRequest.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
         OrderSend (BuyRequest, result);
         LastOnCalculate = GetTickCount ();
         continue ;
        }
       if ( PositionGetTicket ( 0 ) > 0 && PositionsTotal () >= 10 )
        {
         Sleep ( 100 );
         Print ( PositionsTotal ());
         return ;
        }
     }
  }
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling( const uint Type = ORDER_FILLING_FOK )
  {
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = ( ENUM_SYMBOL_TRADE_EXECUTION ):: SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_EXEMODE );
   const int FillingMode = ( int ):: SymbolInfoInteger ( _Symbol , SYMBOL_FILLING_MODE );
   return ((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN ) || ((FillingMode & (Type + 1 )) != Type + 1 )) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE ) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT )) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC ) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK )) :
          ( ENUM_ORDER_TYPE_FILLING )Type);
  }
//+------------------------------------------------------------------+
 
Fast235 :

GetTickCount() yerine; Ben beğenmedim, kodun tamamını yavaşlatmıyor, Sleep'in aksine, ping yüksekse en az 500ms takabilirsiniz,

Aktif bir döngüdür ve işlemciyi yer. Peki terminalde böyle 50 Uzman Danışman varsa? Bunlardan 8 adet bir çift üzerinde, 8 siparişin tamamı saç tokasında gönderilecek.

 
traveller00 :

Aktif bir döngüdür ve işlemciyi yer. Peki terminalde böyle 50 Uzman Danışman varsa? Bunlardan 8 adet bir çift üzerinde, 8 siparişin tamamı saç tokasında gönderilecek.

yarım saniyeliğine etkinleştirilir ve emri gönderdikten sonra hepsi bu kadar, o zaman bunun için bir komut yok, o zaman zaten önce açık pozisyonlar için bir kontrol var

kodumu nasıl optimize ettim, daha hızlı çalışmaya başladı ve her biri 2 parça açmaya başladı) ilk başta Sleep yardımcı oldu ama her şeyi yavaşlattı, 7 karakterim var
 
fxsaber :

Henüz MT4 stilini kendim denemedim. Teorik olarak çalışması gerekir. Henüz görmenin bir yolu yok.

İşler. İki seçeneği (pozisyon beklentisi olan ve olmayan) karşılaştırmak ilginçti.


OrderSend sonrası pozisyon beklentisi ile.

 #include <MT4Orders.mqh>

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnStart ()
{
   while ( OrdersTotal () < 30 )
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );      
    
   Print ( OrdersTotal ());
}


Bir pozisyon beklemeden - sonuç hemen.

 #include <fxsaber\TradesID\ByPass.mqh>
#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void OnStart ()
{
  BYPASS ByPass;
  
  MT4ORDERS::OrderSend_MaxPause = 0 ; // Запрет на ожидание позиции после OrderSend
  
   while ( OrdersTotal () < 30 )
     if (ByPass.Is())
      ByPass += OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );      
    
   Print ( OrdersTotal ());
}


İkinci seçeneğin daha hızlı olduğundan emindim. Aynı yürütme süresi ortaya çıktı.


Beklerken, ByPass.Is() hiç beklemeden false döndürmedi - 740 kez. Genel olarak, koltuk değneği işe yarıyor gibi görünüyor.

 
Bu, sunulan tek çalışma çözümü gibi görünüyor.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği)

İgor Makanu , 2021.05.10 10:28

şu şekilde çalışıyor gibi görünüyor:

 #include <Trade\Trade.mqh>
void OnStart ()
{
   CTrade Trade;
   while ( PositionsTotal () < 30 )
   {
       if ( OrdersTotal () > 0 ) continue ;
       if (!Trade.Buy( 0.01 )) continue ;
       if ( OrdersTotal () == 0 && PositionsTotal () >= 30 ) return ;
   }
}

ama çok yavaş ve çözüm şöyle böyle

Hızı normal. 37 kez senkronizasyon eksikliği.

 
fxsaber :

Hızı normal. 37 kez senkronizasyon eksikliği.

şimdi fx'te kontrol ettim ... n - bu komut dosyası her biri 5 kez 10 sipariş hızlı bir şekilde açıldı ve en son hızlı olduğunda, demoda 10 sipariş açmanın 10 saniye sürdüğü ve kapanış emirlerinin de hızlı olmadığı zaman

11143290 siparişi için günlükten kazıdım:

LL 0 11:19:31.444 ticaret '20615687': sipariş #11143290 piyasada 0.1 / 0.1 EURUSD satın al 1580.643 ms'de yapıldı

PO 0 11:19:33.621 ticaret '20615687': anlaşma #1865643, 1.21460'tan 0.1 EURUSD satın alın yapıldı (#1143290 sırasına göre)

CL 0 11:19:33.622 ticaret '20615687': piyasa 0.1 EURUSD satın al

JF 0 11:19:33.679 ticaret '20615687': 0.1 EURUSD satın alınan piyasa kabul edildi

QO 0 11:19:33.679 ticaret '20615687': yürütme için yerleştirilmiş 0.1 EURUSD piyasa alımı

KM 0 11:22:41.224 ticaret '20615687': piyasa 0.1 EURUSD sat, kapat #11143290 0.1 EURUSD al 1.21460

doktor 0 11:22:41.280 ticaret '20615687': kabul edilen piyasa 0.1 EURUSD sat, kapat #11143290 0.1 EURUSD al 1.21460

KQ 0 11:22:41.282 ticaret '20615687': piyasa 0,1 EURUSD sat, kapat #11143290 0,1 EURUSD satın al 1.21460 yürütme için yerleştirildi

ÜZERİNDE 0 11:22:43.824 ticaret '20615687': piyasa 0.1 EURUSD sat, kapat #11143290 0.1 EURUSD al 1.21460

YAPMAK 2 11:22:43.880 ticaret '20615687': başarısız piyasa 0,1 EURUSD satışı, kapanış #11143290 0,1 EURUSD satın alma 1.21460 [Bu pozisyonu kapatmak için sipariş zaten mevcut]

JN 0 11:22:46.280 ticaret '20615687': piyasa 0.1 EURUSD sat, kapat #11143290 0.1 EURUSD al 1.21460

OL 2 11:22:46.336 ticaret '20615687': başarısız piyasa 0,1 EURUSD satışı, kapanış #11143290 0,1 EURUSD satın alma 1.21460 [Bu pozisyonu kapatmak için sipariş zaten mevcut]

 
Igor Makanu :

şimdi fx'te kontrol edildi ... n

Bu sunucuyu kontrol etmem gerekecek. Burada önerilen koltuk değneği , kimin için önemli görünüyor, kontrol etmek güzel olurdu.

Bir süre sonra bu konuya dönmek istemiyorum. Varsa, hataları hemen belirtmek daha iyidir.

 
fxsaber :

Bu sunucuyu kontrol etmem gerekecek. Burada önerilen koltuk değneği , kimin için önemli görünüyor, kontrol etmek güzel olurdu.

Bir süre sonra bu konuya dönmek istemiyorum. Varsa, hataları hemen belirtmek daha iyidir.

LAN'da bırakılan sunucu

Neden: