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

 
fxsaber :
MQL5'ten farklı olarak, MQL4'te statik diziler boyut değiştirebilir.
Her zaman değil

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

MetaTrader 5 platformunun yeni sürümü build 1595: fiyat geçmişine erişim

fxsaber , 2017.05.01 16:36

 #property strict

template < typename T>
struct ARRAY
{
  T Simple[ 100 ];
};

void OnStart ()
{
   int ArraySimple[ 100 ];
  ARRAY< int > Array;

   Print ( ArrayResize (Array.Simple, 10 )); // MQL4: -1
   Print ( ArrayResize (ArraySimple, 10 ));   // MQL4: 10
  
   Print ( ArraySize (ArraySimple));         // MQL4: 10
   Print ( ArraySize (Array.Simple));       // MQL4: 100
}
 

MT4'te Trailing Stop'ta her zaman bir hata olmuştur. Güçlü bir yukarı-aşağı fiyat hareketi sırasında gözlemlerseniz,
sonra SL'nin yukarı ve aşağı hareketini fark edebilirsiniz. Burada küçük bir hareket yakaladım, defalarca oluyor
2017.05.22 10:53:38.563 '9898616': takip eden durak #1465775202 -> 1.29765
2017.05.22 10:53:38.483 '9898616': takip eden durak #1465775202 -> 1.29764
2017.05.22 10:53:33.236 '9898616': takip eden durak #1465775202 -> 1.29763
2017.05.22 10:53:33.130 '9898616': takip eden durak #1465775202 -> 1.29764
2017.05.22 10:53:32.813 '9898616': takip eden durak #1465775202 -> 1.29762
SL = 2 olduğunda (basitlik için, son rakam), bir sonraki tıklamada fiyat yükseldi ve terminal, SL'yi 4'e yükseltmek için bir emir verdi.
Bir sonraki tıklamada, fiyat düştü, SL hala 2'deydi. Termina, SL'yi 3'e YÜKSELTMEK için bir emir yayınladı.
Sunucu, uzun boyunlu bir zürafa gibi, birinci sırayı işledi, SL'yi 4'e yükseltti. İkinci sırayı işledikten sonra, LOWERED SL'yi 3'e yükseltti.
Terminalin, sunucudaki yükü artıran gereksiz anlamsız siparişler verdiği ortaya çıktı.
Ayrıca, SL'nin ters hareketi nedeniyle tüccar için ekstra kayıp riski vardır.
Bu aynı zamanda bir Uzman Danışman veya bir komut dosyası tarafından takip edilen yazılım için de geçerlidir . SL'yi 3,5 puanlık adımlarla hareket ettirerek kısmen düzeltildi.

Ne yapalım. Son OrderModify siparişinde verilen SL değerini hatırlayın.
Ve bu değerden üretilecek bir sonraki siparişin hesaplanması.
Şu şekilde olurdu: sunucuya iki sipariş daha az, SL yalnızca ileriye doğru hareket eder ve bilgisayarın işlemcisindeki yükü azaltır
2017.05.22 10:53:38.563 '9898616': takip eden durak #1465775202 -> 1.29765
2017.05.22 10:53:33.130 '9898616': takip eden durak #1465775202 -> 1.29764
2017.05.22 10:53:32.813 '9898616': takip eden durak #1465775202 -> 1.29762

 

Emirleri değiştirirken, genellikle önceki TP/SL'yi yeni değişen değerle karşılaştırmak gerekir. Çünkü eski değeri değiştirme girişimi olursa, 1 numaralı hatayı alırız.

Örneğin USDJPY için eski SL'yi (100.03) ve yeni SL'yi (100.02) karşılaştırmamız gerektiğini varsayalım (Rakamlar = 2). Yardım diyor ki :

İkinci yöntem, iki gerçek sayının normalleştirilmiş farkının sıfır ile karşılaştırılmasını içerir. Normalleştirilmiş sayıların farkını sıfırla karşılaştırmak işe yaramaz, çünkü normalleştirilmiş sayılarla herhangi bir matematiksel işlem sonucunda sonuç normalleştirilmez.

Onlar. şöyle karşılaştırın:

 if ( NormalizeDouble ( 100. 03 - 100. 02 , Digits ) != 0 ) // можно модифицировать

Ancak bazen komisyoncu normalize edilmemiş fiyatlar verebilir. Ve örneğin, 100.02 değil, 100.025 fiyatını aldık. Yukarıdaki şemaya göre karşılaştırarak, 0.01'lik bir fark elde ederiz, yani. değiştirilebilir. Ancak değişiklik için Rakamlara normalleştirilmiş 100.025'i geçerek, aslında 100.03'ü geçeceğiz ve buna göre 1 numaralı hatayı alacağız.

Genel olarak, deneyimle, şimdiye kadar, modifikasyonlar için aynı Rakamlarla , normalleştirilmiş sayıların farkını sıfırla (referans önermez) karşılaştırmanın daha iyi olduğu sonucuna vardım.

Kontrol edilecek komut dosyası:

 void OnStart ()
{
   double a = 0.02 ;
   double b = 0.015 ;
  
   Print ( " norm1 dif=" , ND(a - b));             // результат = 0.01
   Print ( " norm2 dif=" , ND(a) - ND(b));         // результат = 0.0
}

double ND( double d) { return NormalizeDouble (d, 2 );}
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL4
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Вещественные типы (double, float) - Типы данных - Основы языка - Справочник MQL4
 
if(MathAbs(a-b)>=Point)
 
Yurij Kozhevnikov :
Evet yapabilirsin. Bu, yardımda verilen ilk karşılaştırma yöntemidir. Ben sadece, belgelerin önerdiği ikinci yöntemi kullanarak kendimin içine düştüğüm gerçek sayıların normalleştirilmesiyle tuzağa dikkat çektim.
 
Bu konuyla ilgili olmayan yorumlar " Sipariş yineleme döngüsünün organizasyonu " bölümüne taşındı.
 

MT4'teki OrderProfit()'in aksine OrderCommission() sente yuvarlanmamış verileri depolar.


ZY In OrderPrint () komisyon yuvarlanır (GUI'de olduğu gibi).

 
fxsaber :

MT4'teki OrderProfit()'ten farklı olarak OrderCommission(), sente yuvarlanmamış verileri depolar.


ZY In OrderPrint () komisyonu yuvarlanır (GUI'de olduğu gibi).

Buna göre doğru OrderProfit()+OrderCommission()+OrderSwap() değerini almak için ne yapılmalı?

 
Artyom Trishkin :

Buna göre doğru OrderProfit()+OrderCommission()+OrderSwap() değerini almak için ne yapılmalı?

Hiç bir şey! Bu en doğru anlamdır. Böyle bir komisyon sayesinde, GUI'de toplam komisyonun GUI'nin gösterdiği bu sayıların toplamından bir kuruş farklı olduğunu görebilirsiniz.

 
fxsaber :

Hiç bir şey! Bu en doğru anlamdır. Böyle bir komisyon sayesinde, GUI'de toplam komisyonun GUI'nin gösterdiği bu sayıların toplamından bir kuruş farklı olduğunu görebilirsiniz.

Sonra hiç anlamadım. "OrderCommission(), sente yuvarlanmamış verileri depolar" ile ne demek istiyorsunuz? Nerede yuvarlanıyorlar? Ve nasıl yuvarlanırlar?