Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 20

 
fxsaber :

kırılmayacak. TimeCurrent algoritması çok dolaylı olarak etkilenir. Bar zamanı vb. alabilirsin.

Pazar gününün (barların tarihinde) son tarihini hesaplamak için herhangi bir yöntemi kullanmanız yeterlidir - böylece Pazar'dan önce ve sonra barlar olur. Yani bunun için en azından TimeLocal alabilirsin.

00:00 civarında (24 saat oturumlar) teklifler varsa sonuç her zaman GMT+3 veya GMT+3+N olacaktır - burada N, oturumdan gece yarısına veya gece yarısından açılışa kadar geçen saat sayısıdır. Bunun tırnak zaman dilimiyle ne ilgisi var?

 
Ivan Titov :

00:00 civarında (24 saat oturumlar) teklifler varsa sonuç her zaman GMT+3 veya GMT+3+N olacaktır - burada N, oturumdan gece yarısına veya gece yarısından açılışa kadar geçen saat sayısıdır. Bunun tırnak zaman dilimiyle ne ilgisi var?

Bu konuyu hiç hatırlamıyorum, bu yüzden soruyu cevaplayamıyorum. Herhangi bir tutarsızlık varsa, bunu göstererek başlamak daha iyidir.

 
fxsaber :

Bu konuyu hiç hatırlamıyorum, bu yüzden soruyu cevaplayamıyorum. Herhangi bir tutarsızlık varsa, bunu göstererek başlamak daha iyidir.

BCS terminalindeki bu koddan (sembol ED-9.19), TimeServerGMT() işlevi, TimeCurrent()'in 2019.08.12 11:48:55'e eşit olduğu anda 2019.08.11 22:48:55 saatini döndürür.

 
Ivan Titov :

BCS terminalindeki bu koddan (sembol ED-9.19), TimeServerGMT() işlevi, TimeCurrent()'in 2019.08.12 11:48:55'e eşit olduğu anda 2019.08.11 22:48:55 saatini döndürür.

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

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

fxsaber , 2018.03.29 14:32

 // Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю

Koddaki bu yoruma dikkat etmediniz.

 
fxsaber :

Koddaki bu yoruma dikkat etmediniz.

Forex dışı semboller için geçmiş mevcutsa, işe yaramayacağını mı söylemek istiyorsunuz?

Ayrıca, test cihazında Alpari-Demo EURUSD,H1'de forex için bir örnek:

2019.02.19 14:00:00 için 2019.02.19 11:00:00 döndürür

2019.06.19 14:00:00 için - 2019.06.19 11:00:00 döndürür

Kışın GMT + 2, yazın GMT + 3 (EET) olmasına rağmen.

 
Ivan Titov :

Forex dışı semboller için geçmiş mevcutsa, işe yaramayacağını mı söylemek istiyorsunuz?

Hatırlamıyorum. Ama muhtemelen sadece yazıldığı gibi değildi.


GMT ofsetinin ne için olduğunu anlamak önemlidir. Belki de bu değerle ilgili vizyonum çok dar, ancak yararlılığını tek bir şeyde görüyorum - farklı fiyat BP'lerini birbiriyle senkronize etme yeteneği.

Başka bir sebep görmüyorum. Dolayısıyla bu işlevler, örneğin farklı brokerlerde (farklı GMT-offsetleri ile) EURUSD'yi senkronize edebilmelidir. Olmazsa, ancak o zaman bir hatadır.

 
fxsaber :

GMT ofsetinin ne için olduğunu anlamak önemlidir. Belki de bu değerle ilgili vizyonum çok dar, ancak yararlılığını tek bir şeyde görüyorum - farklı fiyat BP'lerini birbiriyle senkronize etme yeteneği.

Başka bir sebep görmüyorum. Dolayısıyla bu işlevler, örneğin farklı brokerlerde (farklı GMT-offsetleri ile) EURUSD'yi senkronize edebilmelidir. Olmazsa, ancak o zaman bir hatadır.

Veya bazı haberlerle BP'yi fiyatlandırın. O zaman hile işe yaramayacak mı?

 
Andrey Khatimlianskii :

Veya bazı haberlerle BP'yi fiyatlandırın. O zaman hile işe yaramayacak mı?

İlk olarak, farklı kaynaklardaki iki forex sembolü senkronize edilir. Bundan sonra, birinin diğerine göre yer değiştirmesi netleşir. Bu verilere dayanarak, karakterlerin geri kalanı senkronize edilir

bu kaynaklar.

Takvimle senkronizasyonu kontrol etmek iyi olur. Kış ve yaz aylarında haber alın. Ve eşleşip eşleşmediğine bakın.

 
 

Kar hesaplama.

 // Вычисляет профитность на истории не пересекающихся закрытых позиций.
bool GetSumGain( const double Risk, double &SumGain, double &MaxDD, double &RF, const string Symb, const int Magic = - 1 )
{
   bool Res = true ;
   const double Leverage = Risk * 100 ;  
      
  SumGain = 1 ;
  MaxDD = 0 ;
  RF = 1 ;

   double MaxGain = SumGain;
   double DDGain = SumGain;
    
   for ( int i = OrdersHistoryTotal() - 1 ; (i >= 0 ) && (Res = (SumGain > 0 )); i--)
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) &&
        (OrderSymbol() == Symb) && ((Magic == - 1 ) || (OrderMagicNumber() == Magic)))        
    {
      SumGain *= 1 - Leverage * ((OrderType() << 1 ) - 1 ) * ( 1 - OrderOpenPrice() / OrderClosePrice());
      
       if (SumGain > MaxGain)
        MaxGain = SumGain;
       else if ( 1 - SumGain / MaxGain > MaxDD)
      {
        MaxDD = 1 - SumGain / MaxGain;
        
        DDGain = SumGain;
      }
    }
    
  RF = SumGain / DDGain;
      
   return (Res);
}


Başvuru

 #property strict
#property show_inputs

input int MagicNumber = 1 ; // Для какого мэджика вычислить профитность?

#define D(A) DoubleToString (A, 2 )

void OnStart ()
{
   for ( int i = 1 ; i <= 20 ; i++)
  {
     double SumGain, MaxDD, RF;    
     const double Risk = i * 0.1 ;
    
     if ( GetSumGain(Risk, SumGain, MaxDD, RF, _Symbol , MagicNumber) )   
       Print (( string )MagicNumber + ": при риске " + D(Risk) +
                                   " увеличение было бы в " + D(SumGain) + " раза" +
                                   " с максимальной относительной просадкой по балансу " + D(MaxDD) + 
                                   ", фактор восстановления = " + D(RF));   
  }
       
}


Sonuç

 1 : при риске 0.30 увеличение было бы в 2.16 раза с максимальной относительной просадкой по балансу 0.19 , фактор восстановления = 2.01
1 : при риске 0.20 увеличение было бы в 1.68 раза с максимальной относительной просадкой по балансу 0.13 , фактор восстановления = 1.60
1 : при риске 0.10 увеличение было бы в 1.30 раза с максимальной относительной просадкой по балансу 0.07 , фактор восстановления = 1.27