Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 173

 
fxsaber :

Yukarıda güncellendi.

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

Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2020.04.09 13:13

Görünüşe göre hiç tanışmamışlar. Belgelere bakın. Sipariş başına iki cilt vardır.

Bunlar canlı limitlerdir. İlk sayı orijinal hacim, ikincisi doldurulmuş hacimdir. Eşit olur olmaz veya ortadan kaldırılırsa tarihe geçecektir.


Ve bu iki parça halinde yürütülen bir emir değil mi? Her nasılsa, tamamlanmayan ciltler garip bir şekilde çakıştı.

 
Alexey Viktorov :

Ve bu iki parça halinde yürütülen bir emir değil mi? Her nasılsa, tamamlanmayan ciltler garip bir şekilde çakıştı.

Tesadüf. Hatta farklı büyüleri var.

 
fxsaber :

Sipariş modunda, canlı olduğunda sipariş olamaz. Öldüğünde - başta söylediği gibi, ilk performansın zamanı gelecek.


Tarihte bulundu.

 
fxsaber :

CloseBy'de çökerken, büyüler kaybolmuş gibi görünüyor. Kontrol etmek gerekiyor.

Aşağıdaki ilk kod bu nedenle çalışmayacak gibi görünüyor.

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

MQL5'te Geçmiş Kar?

fxsaber , 2017.08.26 19:16

  1. MQL5
     double Profit( void )
    {
     double Res = 0 ;
    
     if ( HistorySelect ( 0 , INT_MAX ))
       for ( int i = HistoryDealsTotal () - 1 ; i >= 0 ; i--)
       {
         const ulong Ticket = HistoryDealGetTicket (i);
         
         if (( HistoryDealGetInteger (Ticket, DEAL_MAGIC ) == MagicNumber) && ( HistoryDealGetString (Ticket, DEAL_SYMBOL ) == Symbol ()))
           Res += HistoryDealGetDouble (Ticket, DEAL_PROFIT );
       }
         
       return (Res);
    }


  2. MQL5 + MQL4
     #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
    
    double Profit( void )
    {
     double Res = 0 ;
    
     for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && ( OrderMagicNumber () == MagicNumber) && ( OrderSymbol () == Symbol ()))
         Res += OrderProfit ();
         
       return (Res);
    }

Sihirle kâr hesaplamak bir sorun gibi görünüyor.

 
Sipariş fiyatları normalleştirildi, fırsatlar değil. Komut dosyası bu tür işlemleri bulur.
 void OnStart ()
{
   if ( HistorySelect ( 0 , INT_MAX ))
     for ( int i = HistoryDealsTotal () - 1 ; i >= 0 ; i--) // Перебираем все сделки
    {
       const ulong Ticket = HistoryDealGetTicket (i); // Тикет сделки
       const double Price = HistoryDealGetDouble (Ticket, DEAL_PRICE ); // Цена сделки
      
       if ( NormalizeDouble (Price, 5 ) != Price) // Если цена сделки не нормализована,      
         Print (Ticket);                         // печатаем тикет сделки.
    }
}
 

MT5 tarafından gerçek zamanlı olarak otomatik olarak yerleştirilen pozisyon açma/kapama okları, TradeTransaction olaylarını temel alır.


Bu olayların (yaklaşık bir düzine pozisyon açma ve kapama) kısa süreli bir bağlantı kesilmesi nedeniyle Terminal'e nasıl ulaşmadığını gördüm - sadece oldu, bilgisayarın başına oturdum ve kendi gözlerimle izledim. Sonuç olarak, karşılık gelen oklar yoktur.


Ve bazen burada söyledikleri gibi, savaş danışmanlarında OnTradeTransaction'a güvenemezsiniz. OrderSendAsync ile çalışmak için güvenilir bir genel mekanizma olmaması üzücü.

 
fxsaber :

OrderSendAsync ile çalışmak için güvenilir bir genel mekanizma olmaması üzücü.

ve hizmetler ticaret işlemlerine erişebilir mi? - evet ise, her 10 ms'de bir izleyebilir ve grafiğe bir olay gönderebilirsiniz

Yardıma baktım, belki servisleri eklemişlerdir diye düşündüm ama geçen sene böyleydi bence:

•Hizmet, göstergelerin, danışmanların ve komut dosyalarının aksine, çalışması için bir çizelgeye bağlanmasını gerektirmeyen bir programdır. Komut dosyaları gibi, hizmetler de start olayı dışında herhangi bir olayı işlemez. Hizmeti başlatmak için kodunun OnStart işleyici işlevini içermesi gerekir. Hizmetler, Başlat dışında herhangi bir olayı kabul etmez, ancak EventChartCustom kullanarak grafiklere özel olaylar gönderebilirler.

UPD: bir komut dosyası hizmeti çizdi

 struct SOrderInfo
{
   int positionstotal;
   int orderstotal;
   int historyorderstotal;
   bool operator ==( const SOrderInfo &v){ return (positionstotal==v.positionstotal && orderstotal==v.orderstotal && historyorderstotal==v.historyorderstotal);}
};
//+------------------------------------------------------------------+
int OnStart ()
{
   SOrderInfo CurrState = UpdateOrdersInfo();
   SOrderInfo LastState = CurrState;
   while (! IsStopped ())
   {
       Sleep ( 10 );
      CurrState = UpdateOrdersInfo();
       if (CurrState == LastState) continue ;
      LastState = CurrState;
       Print ( "Orders changed!" );
   }
   return ( 0 );
}
//+------------------------------------------------------------------+
SOrderInfo UpdateOrdersInfo()
{
   SOrderInfo result;
   result.positionstotal     = PositionsTotal ();
   result.orderstotal        = OrdersTotal ();
   result.historyorderstotal = HistoryOrdersTotal ();
   return (result);
}
//+------------------------------------------------------------------+

Ellerimle birkaç sipariş açtım, kapattım, bence sorunsuz çalışıyor

 
Igor Makanu :

ve hizmetler ticaret işlemlerine erişebilir mi? - evet ise, her 10 ms'de bir izleyebilir ve grafiğe bir olay gönderebilirsiniz

Bunun sovtenik'teki aynı numaralandırmadan farkı yok. Sadece sayıyı karşılaştırmak yeterli değil, içi değişebilir.

 
Andrey Khatimlianskii :

Bunun sovtenik'teki aynı numaralandırmadan farkı yok. Sadece sayıyı karşılaştırmak yetmez, içi değişebilir.

Uyarılar gibi hizmetler çok iyi. Grafik gerekmez, Terminal ile otomatik olarak başlatılır. Yalnızca hesaplar arasında geçiş yapma durumlarını çözmek gerekir.

ZY Service bir savaş danışmanı olabilir. GUI olmadan, çok uygun değil.
 
Andrey Khatimlianskii :

Bunun sovtenik'teki aynı numaralandırmadan farkı yok. Sadece sayıyı karşılaştırmak yeterli değil, içi değişebilir.

farklı

sözde kontrol ve yönetim görevleri vardır

EA - yönetim, servis - kontrol

kontrol gereksiz olmamalıdır - sistemin tüm kaynaklarını alın, kontrol yerine kararsız bir sistem alın

olayların kritikliğini belirlemek gereklidir, IMHO, kapanış ve açılış emirleri kontrol gerektiren kritik olaylardır ve TP ve SL'nin değiştirilmesi daha önce olduğu gibi yapılabilir (birkaç başarısız girişim - vazgeçtik, tekrar edeceğiz). sonraki tik)

ve önerdiğiniz gibi - mümkün olduğu kadar her şeyi kontrol etmek için - SQLite'deki siparişlerin durumunu tekrarlayabilirsiniz, o zaman bu veritabanını hizmet ve EA ile senkronize etme görevi görünecektir .... tüm bunlar gereksiz


Planın daha basit olması gerektiğini düşünüyorum - bunun gibi bir şey: EA'daki terminalden OnTradeTransaction olayını aldık ve EA'da ek kontrol için hizmetten OnChartEvent olayını oluşturduk