Kütüphaneler: MT4Orders Hızlı Rapor - sayfa 4

 
Forester #:

MQ test cihazının silinen limit emirlerini gecikmeli olarak arşive aktardığı ortaya çıktı:

Lütfen çoğaltma için veri sağlayın.
 
Forester #:

Highchart'a geçtim. Daha iyi olduğu ortaya çıktı: google.charts 700.000 anlaşmada donarken, highchart bunları özel frenler olmadan görüntüledi ve tek tek anlaşmaları yakınlaştırabildi.

Mevcut uygulamada highcharts 'ın çevrimiçi olması gerektiği doğru mu?
 
fxsaber #:
Lütfen çoğaltma için veri sağlayın.
 // farkı - sanal test cihazını #define VIRTUAL_TESTER yerine SelectByIndex() ile bağlayın
 
 #include <MT4Orders.mqh>

#define  REPORT_TESTER             // Test cihazı raporları otomatik olarak kaydedecektir
//#define  REPORT_BROWSER            // Tarayıcı başlatma ile rapor oluşturma - DLL izni gerektirir.
#include <MT4Orders_QuickReport.mqh>//

input int inAmount = 10;
input int inOffset = 5;
input int inRange = 0;

bool OrdersBuy[];
bool OrdersSell[];
bool OrdersBuyStop[];
bool OrdersSellStop[];

void OnInit()
{
  ArrayResize(OrdersBuy, inAmount + 1);
  ArrayResize(OrdersSell, inAmount + 1);
  ArrayResize(OrdersBuyStop, inAmount + 1);
  ArrayResize(OrdersSellStop, inAmount + 1);
}

void OnTick()
{

   strategy ();

}

double OnTester() { 
QuickReport("report_0", true, 0);
   return(AccountInfoDouble(ACCOUNT_BALANCE)); 
}

void OnDeinit(const int  reason ){
   Print("OnDeinit main");

}


int TimeHour     ( datetime time ){return((int)((time / 3600) % 24));}//gün içinde geçerli saat. Saat içinde 3600 saniye

void strategy (){
  string Symb = _Symbol;
  MqlTick Tick;
  
  if (SymbolInfoTick(Symb, Tick))
  {    
    double sl, tp, point = SymbolInfoDouble(Symb, SYMBOL_POINT);
    const double Offset = inOffset * point;

    ArrayInitialize(OrdersBuy, false);
    ArrayInitialize(OrdersSell, false);
    ArrayInitialize(OrdersBuyStop, false);
    ArrayInitialize(OrdersSellStop, false);

    for (uint i = OrdersTotal(); (bool)i--;)
      if (OrderSelect(i, SELECT_BY_POS))         
      {
        ulong Magic = OrderMagicNumber();
        if(Magic > 0 && Magic < 100 ){
           switch (OrderType())
           {
             case OP_BUY:
               OrderModify(OrderTicket(), OrderOpenPrice(), 0, Tick.bid + Magic * Offset, 0);
               OrdersBuy[Magic] = true;
               
               break;
             case OP_SELL:
               OrderModify(OrderTicket(), OrderOpenPrice(), 0, Tick.ask - Magic * Offset, 0);
               OrdersSell[Magic] = true;
               
               break;
             case OP_BUYLIMIT:
               OrderModify(OrderTicket(), Tick.ask - Magic * Offset, 0, 0, 0);
               OrdersBuy[Magic] = true;
               
               break;
             case OP_SELLLIMIT:          
               OrderModify(OrderTicket(), Tick.bid + Magic * Offset, 0, 0, 0);
               OrdersSell[Magic] = true;
               
               break;
           }
         }
         
        if(Magic > 100 && Magic < 200 ){
           Magic = Magic - 100;
           switch (OrderType())
           { 
             case OP_BUY:
               OrderModify(OrderTicket(), OrderOpenPrice(), 0, Tick.bid + Magic * Offset, 0);
               OrdersBuyStop[Magic] = true;
               
               break;
             case OP_SELL:
               OrderModify(OrderTicket(), OrderOpenPrice(), 0, Tick.ask - Magic * Offset, 0);
               OrdersSellStop[Magic] = true;
               
               break;
             case OP_BUYSTOP:
               OrderModify(OrderTicket(), Tick.ask + Magic * Offset, 0, 0, 0);
               OrdersBuyStop[Magic] = true;
               
               break;
             case OP_SELLSTOP:          
               OrderModify(OrderTicket(), Tick.bid - Magic * Offset, 0, 0, 0);
               OrdersSellStop[Magic] = true;
               
               break;
           }
           
         }
         if(Magic == 1001 ){//tam kapanış için kontrol edin
           OrderClose(OrderTicket(), OrderLots(), (OrderType()==OP_BUY ? Tick.bid : Tick.ask), 0 ) ;//tam kapanışı kontrol edin - çalışıyor
         }
         
         //farklı tiklerde kısmi kapanışı kontrol et
         if(Magic == 1002 ){
           double Lots = OrderLots();
           if(Lots==10){//birincil lot - %25 kapat
               double LotsDel1=NormalizeDouble(Lots/4, 2);// orijinal lotun %25'ini kapatın
               OrderClose(OrderTicket(), LotsDel1, (OrderType()==OP_BUY ? Tick.bid : Tick.ask), 0 ) ;//kısmi kapatmayı kontrol edin
           }else{ // bir sonraki adımda bakiyeyi kapatır
              OrderClose(OrderTicket(), Lots, (OrderType()==OP_BUY ? Tick.bid : Tick.ask), 0 ) ;//tam kapanış için kontrol edin
           }
         }
            
         //aynı tik üzerinde OrderClose()'un kısmi kapanışını kontrol edin. Sanal test cihazında çalışmıyor - 1/2 lot ile birçok siparişi itiyor. 
         //Çünkü ilk OrderSend'den sonra yeni bir bilet oluşturulacak ve ikinci OrderSend'de eski bilet bulunamayacak, sonuç olarak 3. bilet oluşturulacaktır.
         if(Magic == 1003 ){
           double Lots = OrderLots();
           double LotsDel1=NormalizeDouble(Lots/3, 2);// orijinal lotun %33'ünü kapatın
           OrderClose(OrderTicket(), LotsDel1,                         (OrderType()==OP_BUY ? Tick.bid : Tick.ask), 0 ) ;//kısmi kapatmayı kontrol edin
           OrderClose(OrderTicket(), NormalizeDouble(Lots-LotsDel1,2), (OrderType()==OP_BUY ? Tick.bid : Tick.ask), 0 ) ;//aynı tik üzerinde bakiyenin tam kapanışını kontrol edin - burada bir hata var
         }
         
         if(Magic == 1004 ){
           //OrderCloseBy(); //check it out
         }
         if(Magic == 1005 ){
            OrderDelete(OrderTicket());
         }

      }
     
    if(TimeHour(TimeCurrent())<23 && TimeHour(TimeCurrent())>0 ){return;} // 0'dan 1'e ve 23'ten 0'a işlemleri gerçekleştirin
 
    for (int i = 1; i <= inAmount; i++)
    {
      if (!OrdersBuy[i])
        OrderSend(Symb, OP_BUYLIMIT, 10, Tick.ask - i * Offset, 0, 0, 0, NULL, i);

      if (!OrdersSell[i])
        OrderSend(Symb, OP_SELLLIMIT, 10, Tick.bid + i * Offset, 0, 0, 0, NULL, i);
      // 
      if (!OrdersBuyStop[i])
        OrderSend(Symb, OP_BUYSTOP, 10, Tick.ask + i * Offset, 0, 0, 0, NULL, i+100);

      if (!OrdersSellStop[i])
        OrderSend(Symb, OP_SELLSTOP, 10, Tick.bid - i * Offset, 0, 0, 0, NULL, i+100);
      
    }  
//TP=SL=açık fiyat ile limit emirlerini kontrol edin.
    OrderSend(Symb, OP_BUYLIMIT, 11,  Tick.ask -  Offset, 0,Tick.ask -  Offset, Tick.ask -  Offset, NULL, 1100);
    OrderSend(Symb, OP_SELLLIMIT, 11, Tick.bid +  Offset, 0,Tick.bid +  Offset, Tick.bid +  Offset, NULL, 1100);

//limit emirlerin kapanışını kontrol et OrderDelete()
    OrderSend(Symb, OP_BUYLIMIT, 12,  Tick.ask -  Offset, 0,Tick.ask -  Offset, Tick.ask -  Offset, NULL, 1005);
    OrderSend(Symb, OP_SELLLIMIT, 12, Tick.bid +  Offset, 0,Tick.bid +  Offset, Tick.bid +  Offset, NULL, 1005);
      

// TP/SL = Ofset ile ortak emirler TP/SL tarafından tetiklenen değiştirilmeyecek
    sl=Tick.bid-Offset; tp=Tick.ask+Offset;
    OrderSend(Symb, OP_BUY,  0.01, Tick.ask, 0, sl, tp,  NULL, 1000);//
    sl=Tick.ask+Offset; tp=Tick.bid-Offset;
    OrderSend(Symb, OP_SELL, 0.1, Tick.bid, 0, sl, tp,  NULL, 1000);//

//проверка ТП/СЛ на границе спреда. В виртуальном тестере - ок. У тестера MQ бывают сбои на 1-х сделках теста https://www.mql5.com/ru/forum/455977/page36#comment_51246904&nbsp;&nbsp; и   https://www.mql5.com/ru/forum/455977/page36#comment_51248196
    OrderSend(Symb, OP_BUY,  10, Tick.ask, 0, Tick.bid, Tick.bid,  NULL, 1000);//TP/SL yayılma sınırında 
    OrderSend(Symb, OP_SELL, 10, Tick.bid, 0, Tick.ask, Tick.ask,  NULL, 1000);//TP/SL yayılma sınırında 
  
//check if OrderClose() tamamen kapatıldı
    OrderSend(Symb, OP_BUY,  10, Tick.ask, 0, 0, 0,  NULL, 1001);
    OrderSend(Symb, OP_SELL, 10, Tick.bid, 0, 0, 0,  NULL, 1001);


    //check partial closure OrderClose() 
    sl=Tick.bid-Offset; tp=Tick.ask+Offset;
    OrderSend(Symb, OP_BUY,  10, Tick.ask, 0, 0, 0,  NULL, 1002);
    sl=Tick.ask+Offset; tp=Tick.bid-Offset;
    OrderSend(Symb, OP_SELL, 10, Tick.bid, 0, 0, 0,  NULL, 1002);// 

  }
}

Sunucu: MetaQuotes-Demo Hedge

İkinci sayfadaki 99 numaralı biletle ilgilenin.

 

Этот отчет показал Firefox. Chrome зависает, ему нужны файлы поменьше.

Bir dosyaya 5,4 milyondan fazla satır yüklenebilir, ancak Firefox tarayıcısı daha fazlasını işleyemez.

Bu raporu yüklerken, tarayıcı yaklaşık 6GB bellek kullandı (yaklaşık 1 dakika işledi), sonra serbest bıraktı, ardından rapor sayfada görüntülendi: (Rapor 80-100k satırdan 5-6GB kullanıyor)

Diğer tarayıcılarda nasıl olduğunu merak ediyorum.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum

Böcekler, böcekler, sorular

fxsaber, 2023.10.18 15:00

Büyük html tablolarını açarken en hızlı tarayıcıların değerlendirmesi - steutments. 35K satırlı bir tablo için özet sonuç.

Tarayıcı UzunlukZaman (sn)
MyPal 24
Basilisk 35
PaleMoon 50
K-Meleon 52
Toryum 55

Benim kesin tercihim MyPal.

 
fxsaber #:
Mevcut uygulamanın highcharts 'ın çalışması için çevrimiçi olmanızı gerektirdiğini anlamakta haklı mıyım?

Evet. Veya JS dosyaları daha önce indirilmişse, önbellekten alınır.
1 ay boyunca saklandı: 8 Ocak'ta indirildi, 8 Şubat'ta silindi


Kodlarını dosyaya hızlı bir şekilde eklemek istedim, ancak binlerce tırnak işareti var, otomatik olarak \"" olarak değiştirildi. Ama bir hata çıkıyor. Hızlı çalışmadı.
 
Forester #:

Kodlarını dosyaya hızlı bir şekilde eklemek istedim, ancak binlerce tırnak işareti var, otomatik olarak \"" olarak değiştirdim. Ama bir hata çıktı. Çabucak yapamadım.

Hızlı versiyon.

Scripts: Balance Graph HTML - How to generate various variants of the Balance Graph.
Scripts: Balance Graph HTML - How to generate various variants of the Balance Graph.
  • 2019.04.09
  • www.mql5.com
But has no possibility of further modification. For example, if you need to get graphs of profits, commissions, turnover, etc. Where can i generate various variants of the graph. I pasted your html code into my library
 

QuickReport en üstte, Report en altta. İkincisi, yalnızca tetiklenen seviyeler için renk vurgulaması yapar. Bu nedenle SL veya TP'nin tetiklendiğine dair bir anlayış var. Bunu QuickReport'a eklerdim.

 
fxsaber #:

QuickReport en üstte, Report en altta. İkincisi, yalnızca tetiklenen seviyeler için renk vurgulaması yapar. Bu nedenle SL veya TP'nin tetiklendiğine dair bir anlayış var. Ben olsam QuickReport'a eklerdim.

Her ikisi de aynı fiyata ayarlandığı için hem TP hem de SL vurgulanacaktır. Durum nadirdir (yalnızca aşırı durum testi için), ancak doğruluk için içinde bile algılamak ve vurgulamak için kod ekledim.

Forester #:
Kodlarını dosyaya hızlı bir şekilde eklemek istedim, ancak binlerce tırnak işareti var, otomatik olarak \"" olarak değiştirdim. Ama bir hata çıkıyor. Hızlı çalışmadı.

Kodu dosyaya ekleme fikrimi değiştirdim çünkü bir lisans gerektiriyor. Daha fazlasını buradan okuyun https://shop.highcharts.com/
google.charts'ı varsayılan olarak ayarladım, eğer birisi Highcharts 'a ihtiyaç duyuyorsa ve onu kullanma hakkına sahipse, onu ekleyebilir:

// Varsayılan olarak MT4Orders_QuickReport ücretsiz google.charts kullanır, ancak haklarınız varsa highcharts kullanabilirsiniz.
// #define USE_highcharts // Tüm Highcharts ürünlerini ücretsiz olarak indirebilir ve deneyebilirsiniz. Projeniz/ürününüz piyasaya sürülmeye hazır olduğunda, ticari bir lisans satın alın. https://shop.highcharts.com/
 
Forester #:

Her ikisi de aynı fiyata ayarlandığı için hem TP hem de SL vurgulandı. Durum nadirdir (yalnızca aşırı durumların testi için), ancak doğruluk için içinde bile algılama ve vurgulama için kod ekledim.

MQ Tester'dan başka bir farkı ortaya çıkaran ilginç bir durum.


Bu Sanal.


Ve bu da MQ-Tester.

Virtual SL'deki her iki pozisyonu da kapatmıştır, MQ SL'deki her iki pozisyonu da kapatmıştır, MQ SL'deki her iki pozisyonu da kapatmıştır, MQ SL'deki her iki pozisyonu da kapatmıştır. Virtual, özel olarak öngörülen SL kapatma önceliğine sahipti. MQ - bilinmiyor.

 
fxsaber #:

MQ Tester'dan başka bir farkı ortaya çıkaran ilginç bir durum.

Bu sanal.

Ve bu da MQ-Tester.

Virtual her iki pozisyonu da SL, MQ ile - farklı bir şekilde kapattı. SL kapatma önceliği Virtual için özel olarak belirlenmiştir. MQ - bilinmiyor.

Evet, bunu ben de fark ettim. Belki de MQ, ilk önce neyin işe yarayacağına, alım-satım yönüne bağlıdır.