Hatalar, hatalar, sorular - sayfa 1989

 

Test cihazının performansı büyük ölçüde ticaret sunucusuna bağlıdır.


Test cihazı ayarları:

USD ağı, yalnızca Core1 dahil .


danışman

 #include <TesterBenchmark.mqh> // https://www.mql5.com/ru/code/18804

input int Interval = 60 ;
input int AmountLastDeals = 5 ;
input double Lots = 1 ;

double CorrectLot( const double Lot )
{
   static const double StepVol = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
   static const double MaxVol = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
   static const double MinVol = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );

   const double Vol = StepVol * ( int )(Lot / StepVol + 0.5 );

   return ((Vol < MinVol) ? MinVol : ((Vol > MaxVol) ? MaxVol : Vol));
}
  
void OnTick ()
{  
   if (! PositionGetTicket ( 0 ))
  {
     if ( HistorySelect ( 0 , TimeCurrent ()))
    {
       const int Total = HistoryDealsTotal () - 1 ;

       double SumProfit = 0 ;
       double SumLots = 0 ;

       for ( int i = Total, Count = 0 ; (i >= 0 ) && (Count < AmountLastDeals); i--)
      {
         const ulong Ticket = HistoryDealGetTicket (i);

         if (( ENUM_DEAL_ENTRY ) HistoryDealGetInteger (Ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT )
        {
          SumProfit += HistoryDealGetDouble (Ticket, DEAL_PROFIT ) * (AmountLastDeals - Count);
          SumLots += HistoryDealGetDouble (Ticket, DEAL_VOLUME ) * (AmountLastDeals - Count);

          Count++;
        }
      }

      SumLots /= (AmountLastDeals * ( 1 + AmountLastDeals)) >> 1 ;

       MqlTradeRequest Request = { 0 };

      Request.action = TRADE_ACTION_DEAL ;

      Request.symbol = _Symbol ;
      Request.type = ((Total >= 0 ) && (( ENUM_DEAL_TYPE ) HistoryDealGetInteger ( HistoryDealGetTicket (Total), DEAL_TYPE ) == DEAL_TYPE_SELL )) ?
                     ORDER_TYPE_SELL : ORDER_TYPE_BUY ;;

      Request.volume = (SumProfit >= 0 ) ? Lots : CorrectLot(SumLots);
      Request.price = SymbolInfoDouble (Request.symbol, (Request.type == ORDER_TYPE_BUY ) ? SYMBOL_ASK : SYMBOL_BID );

//      MqlTradeCheckResult CheckResult;
//      if (OrderCheck(Request, CheckResult))
      {
         MqlTradeResult Result;

         const bool AntiWarning = OrderSend (Request, Result);
      }
    }
  }
   else if ( TimeCurrent () - PositionGetInteger ( POSITION_TIME ) >= Interval)
  {
     MqlTradeRequest Request = { 0 };
     MqlTradeResult Result;

    Request.action = TRADE_ACTION_DEAL ;
    Request.position = PositionGetInteger ( POSITION_TICKET );

    Request.symbol = PositionGetString ( POSITION_SYMBOL );
    Request.type = ( ENUM_ORDER_TYPE )( 1 - PositionGetInteger ( POSITION_TYPE ));

    Request.volume = PositionGetDouble ( POSITION_VOLUME );
    Request.price = PositionGetDouble ( POSITION_PRICE_CURRENT );

     const bool AntiWarning = OrderSend (Request, Result);
  }
}


FIBOGroup-MT5 Sunucusunda Sonuç

------
OnTesterInit
i = 0 Pass = 0 OnTester = 7.994 s.: Count = 15925124 , 1992134.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 1 Pass = 1 OnTester = 7.831 s.: Count = 15925124 , 2033600.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 2 Pass = 2 OnTester = 7.811 s.: Count = 15925124 , 2038807.3 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 3 Pass = 3 OnTester = 7.825 s.: Count = 15925124 , 2035159.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 4 Pass = 4 OnTester = 7.831 s.: Count = 15925124 , 2033600.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 5 Pass = 5 OnTester = 7.832 s.: Count = 15925124 , 2033340.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
iMin = 2 Results[iMin] = 7.811 s.
iMax = 0 Results[iMax] = 7.994 s.
Amount = 6 Mean = 7.854 s. - 90.11 %
OnTesterDeinit
------
Interval = 52.296 s., Count = 0 , 0.0 unit/sec


MetaQuotes-Demo'da Sonuç

 OnTesterInit
i = 0 Pass = 0 OnTester = 1.497 s.: Count = 2456073 , 1640663.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 1 Pass = 1 OnTester = 1.494 s.: Count = 2456073 , 1643957.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 2 Pass = 2 OnTester = 1.496 s.: Count = 2456073 , 1641760.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 3 Pass = 3 OnTester = 1.493 s.: Count = 2456073 , 1645058.9 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 4 Pass = 4 OnTester = 1.499 s.: Count = 2456073 , 1638474.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
i = 5 Pass = 5 OnTester = 1.498 s.: Count = 2456073 , 1639568.1 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent- 127.0 . 0.1 - 3000 build = 1653
iMin = 3 Results[iMin] = 1.493 s.
iMax = 4 Results[iMax] = 1.499 s.
Amount = 6 Mean = 1.496 s. - 49.11 %
OnTesterDeinit
------
Interval = 18.279 s., Count = 0 , 0.0 unit/sec


FIBOGroup-MT5 Server üzerindeki toplam tick sayısı 15925124 ve test cihazının performansı 2038807.3 birim/sn'dir. MetaQuotes- Demo'da tik sayısı 2456073 ve test cihazının performansı 1645058.9 birim/sn'dir. Onlar. ikinci sunucuda, test cihazının performansı %20 düştü. Ancak testçi, ticaret sunucusuna bağlı olmamalıdır!

Sorunsuz çoğaltılmıştır.

 
Alexey Kozitsyn :
Yardımcı olmadı :) Tamam, neden tahmin et, SD'den bir cevap alman gerekiyor. Yine de, bu tür koltuk değnekleri kabul edilemez!

Garip. Yayınlamadan önce 10 dakika dürttüm ve bu nedenle periyodik olarak hala grafik periyodunu değiştirmeye ve gösterge parametresinde doğruyu yanlışa çevirmeye devam ediyorum. Ben bir problem görmüyorum. Tabi bunlar koltuk değneği o yüzden bunun geçici bir çözüm olduğunu söyledim.

 
Alexey Kozitsyn :
Yardımcı olmadı :) Tamam, neden tahmin et, SD'den bir cevap alman gerekiyor. Yine de, bu tür koltuk değnekleri kabul edilemez!

Sorunsuz çalışır. Tabii ki, önce çıktı arabelleklerini ve ancak bundan sonra renk arabelleğini tanımlamak mantıklıdır, ki bu şimdi yapılır.

[Silindi]  
Vitaly Muzichenko :

Sorunsuz çalışır. Elbette, önce çıktı arabelleklerini ve ancak bundan sonra şimdi yapılan renk arabelleğini tanımlamak mantıklıdır.


Vitaly, önce sorunun özünü anla lütfen. Ayar etkinleştirildiğinde, her şey yolunda gider. Ayar kapatıldığında sorun başlar.
[Silindi]  
Alexey Viktorov :
Sürümünüz daha kararlı ve hatta neredeyse her zaman doğru çalışır (TF'yi değiştirmezseniz). Ve eğer değiştirir ve geri dönerseniz ... tekrar teneke başlar.
 
fxsaber :
(string)NormalizeDouble(0.99872, 5) çok uzun bir sonuçtur.

Hata yok, ondalık gösterimdeki bazı sayılar çift olarak tam olarak gösterilemez

Aşağıdaki kod normal bir sonuç üretir
DoubleToString (0.99872, 5)

 
Evgeny Chernyshev :

Hata yok, ondalık gösterimdeki bazı sayılar çift olarak tam olarak gösterilemez

Aşağıdaki kod normal bir sonuç üretir
DoubleToString(0.99872, 5)

Anladım teşekkürler!

 
Alexey Kozitsyn :
Vitaly, önce sorunun özünü anla lütfen. Ayar etkinleştirildiğinde, her şey yolunda gider. Ayar kapatıldığında sorun başlar.

Alexey, üzgünüm, başka bir düzeltmeyi kaçırdım

    //if(inpUseArrows) // Если отображать нужно
   //  {
      SetPlotParametersArrow( 0 , 0 ,bufArrowUp, false , "test up" , EMPTY , clrLime , 233 , 10 );
      SetPlotParametersArrow( 1 , 1 ,bufArrowDn, false , "test dn" , EMPTY , clrRed , 234 ,- 10 );
   //  }

O yazıda da kırmızı bir işaretle düzelttim.

[Silindi]  
Alexey Viktorov :

Alexey, üzgünüm, başka bir düzeltmeyi kaçırdım

O yazıda da kırmızı bir işaretle düzelttim.

Bütün mesele bu! Az önce kapattığınız ve tüm grafikler için tüm dizilerin kullanıldığı ortaya çıktı. seri. Ancak asıl mesele, kullanıcıya gerekirse grafiğin bir kısmını devre dışı bırakma fırsatı vermektir. seri. Ve gerekirse - açın!

 
Alexey Kozitsyn :

Bütün mesele bu! Az önce kapattığınız ve tüm grafikler için tüm dizilerin kullanıldığı ortaya çıktı. seri. Ancak asıl mesele, kullanıcıya gerekirse grafiğin bir kısmını devre dışı bırakma fırsatı vermektir. seri. Ve gerekirse - açın!

Eh, TF'leri değiştirirken değişmeyen, kodun en başında grafik serilerinin sayısı belirlenir.

Korkarım mql5'te yenilmez.

Veri penceresinde grafik serilerinin görüntülenmesini dışlamak için bir numara daha olsa da, şunları yapmanız gerekir:

 PlotIndexSetString (plotIndex, PLOT_LABEL , NULL);

mql4'te çalışır. Mql5'teki gibi kontrol etmek gerekiyor, henüz kontrol etmedim.

Hayır... mql5'te çalışmıyor. İşe yarıyor

       PlotIndexSetInteger ( 0 , PLOT_SHOW_DATA , true );
       PlotIndexSetInteger ( 1 , PLOT_SHOW_DATA , true );
   if (!inpUseArrows) // Если отображать не нужно
     {
       PlotIndexSetInteger ( 0 , PLOT_SHOW_DATA , false );
       PlotIndexSetInteger ( 1 , PLOT_SHOW_DATA , false );
     }