Hatalar, hatalar, sorular - sayfa 4

 
Interesting :

MarketInfo(Symbol(),MODE_MARGININIT) = SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)

O halde MODE_MARGINREQUIRED'e ne karşılık gelir? Veya başka türlü, satın almak için 1 lot açmak için gereken serbest marj miktarını nasıl öğrenebilirim?

Mql5'in yaratıcılarından Hareketli Ortalama.mq5 EA'da lotlar aşağıdaki gibi hesaplanır

 input double MaximumRisk        = 0.02 ;     // Maximum Risk in percentage
input double DecreaseFactor     = 3 ;       // Descrease factor
input int     MovingPeriod       = 12 ;       // Moving Average period
input int     MovingShift        = 6 ;       // Moving Average shift
//---
int    ExtHandle= 0 ;
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double TradeSizeOptimized( void )
  {
//--- select lot size
   double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_FREEMARGIN )*MaximumRisk/ 1000.0 , 2 );

MaximumRisk neden bu kadar küçük (%0,02) ve lot hesaplanırken 1000'e bölünüyor? Bu 1000 neyi temsil ediyor? Belki 1000 = %100 ile çarpılan 1 lot satın almak için gerekli ücretsiz fon (%0,02'yi 0,0002'lik bir kesire dönüştürmek için)? Yani, 1 lot alımı için ücretsiz fon 10$'a eşittir (10$x100%=1000). Doğru yönde mi düşünüyorsun?

Ve bir soru daha. Maksimum açık emir sayısında bir sınır var mı?

 
gpwr :

O halde MODE_MARGINREQUIRED'e ne karşılık gelir? Veya başka türlü, satın almak için 1 lot açmak için gereken ücretsiz fon miktarını nasıl öğrenebilirim?

Ve bir soru daha. Maksimum açık emir sayısında bir sınır var mı?


Bu soruyu sordum.


İşte geliştiricilerin yanıtı:

Raşid Umarov :

bakmak

SYMBOL_TRADE_CONTRACT_SIZE

Ticaret sözleşmesi boyutu

çift

ve

SYMBOL_CURRENCY_MARGIN

Teminatın hesaplandığı para birimi

sicim


Anladığım kadarıyla hesaplamak zorunda kalacaksın

 

gpwr :

Mql5'in yaratıcılarından Hareketli Ortalama.mq5 EA'da lotlar aşağıdaki gibi hesaplanır

MaximumRisk neden bu kadar küçük (%0,02) ve lot hesaplanırken 1000'e bölünüyor? Bu 1000 neyi temsil ediyor? Belki 1000 = %100 ile çarpılan 1 lot satın almak için gerekli ücretsiz fon (%0,02'yi 0,0002'lik bir kesire dönüştürmek için)? Yani, 1 lot alımı için ücretsiz fon 10$'a eşittir (10$x100%=1000). Doğru yönde mi düşünüyorsun?

Ve bir soru daha. Maksimum açık emir sayısında bir sınır var mı?


 AccountInfoDouble ( ACCOUNT_FREEMARGIN )*MaximumRisk

Bu satır riski , serbest marjın %2'si olarak hesaplar. eğer doğru anladıysam. Bu miktarın neden tam olarak 1000'e bölündüğü geliştiricilere kalmış.


Ama eğer doğru anladıysam, o zaman 20.000$'lık bir depozitoyla (ücretsiz fonlar), danışman açılış için bu miktarın (400$) %2'sinden fazlasını almamanızı tavsiye ediyor.

Bu miktarı 1000'e bölerek mantıksal olarak çok fazla 0,4 elde ederiz...

 

gpwr :

Maksimum açık emir sayısında bir sınır var mı?

Bu soruyu da sordu. Geliştiricilerin hala üzerinde düşündükleri bir teklif var (bu arada onlar için - uygulama 15802).
 
Interesting :

Bu satır, riski serbest marjın %2'si olarak hesaplar. eğer doğru anladıysam. Bu miktarın neden tam olarak 1000'e bölündüğü geliştiricilere kalmış.

Ama eğer doğru anladıysam, o zaman 20.000$'lık bir depozitoyla (ücretsiz fonlar), danışman açılış için bu miktarın (400$) %2'sinden fazlasını almamanızı tavsiye ediyor.

Bu miktarı 1000'e bölerek mantıksal olarak çok fazla 0,4 elde ederiz...

Şimdi anladım. Hareketli Ortalama .mq5 kodunda yazım hatası var. Yerine

 input double MaximumRisk        = 0.02 ;     // Maximum Risk in percentage

İhtiyaç

 input double MaximumRisk        = 0.02 ;     // Maximum Risk as a fraction of a free margin

O zaman lotları hesaplamada 1000'e bölme anlaşılabilir: 100.000$(lot boyutu)/100(kaldıraç) = 1000. Her ne kadar mql5 geliştiricileri böyle bir EA örneği oluşturmak istemezlerse de. değiştirmek gerekiyor

 double lot= NormalizeDouble ( AccountInfoDouble ( ACCOUNT_FREEMARGIN )*MaximumRisk / 1000 .0 , 2 );

Üzerinde

 double LotSize    = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
int     Leverage   = AccountInfoInteger ( ACCOUNT_LEVERAGE );
double FreeMargin = AccountInfoDouble ( ACCOUNT_FREEMARGIN );  
double LotRqdMgn  =LotSize/Leverage;
double lot        = NormalizeDouble (FreeMargin*MaximumRisk/ LotRqdMgn , 2 );

Ve hatta daha iyi

 double Step       = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
double LotSize    = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
int     Leverage   = AccountInfoInteger ( ACCOUNT_LEVERAGE );
double FreeMargin = AccountInfoDouble ( ACCOUNT_FREEMARGIN );  
double LotRqdMgn  =LotSize/Leverage;
double lot        = NormalizeDouble ( MathFloor (FreeMargin*MaximumRisk/LotRqdMgn/Step)*Step, 2 );

MODE_MARGINREQUIRED'in eskimiş olması üzücü olsa da. Belki geliştiriciler, hesaplama sayısını azaltmak için bu parametreyi geri yükleyecektir.

 
Interesting :
dize :
Kısa adlar her zaman yalnızca gösterge alt penceresinde görüntülenmek için kullanılmıştır.
Yani orada görünmüyor ya da bu bir bug ya da ben bir şey anlamadım...
Bulundu ve hata düzeltildi, 16051 kapatılabilir.
 

Hata raporlarımı doğru yerde yayınlıyor muyum bilmiyorum. Değilse, lütfen beni düzeltin.

Expert Advisor'ı test ederken, test cihazının marjı doğru belirleyip belirlemediğini görmek için kasıtlı olarak böyle bir durum yarattım. Yani, 100 dolar depolayın. EURUSD ticareti yapıyoruz. Minimum parti büyüklüğü 0.1'dir. EA, lotları hesaplamak için bu koda sahiptir

 double volMin     = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
double LotSize    = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
long    Leverage   = AccountInfoInteger ( ACCOUNT_LEVERAGE );
double FreeMargin = AccountInfoDouble ( ACCOUNT_FREEMARGIN );  
double LotRqdMgn  =LotSize/Leverage;
double vol= NormalizeDouble ( MathFloor (FreeMargin*MaxRisk/LotRqdMgn/Step)*Step, 2 );
if (vol<volMin) vol=volMin;
if (vol*LotRqdMgn>FreeMargin) vol= 0.0 ;
Print (LotRqdMgn, " " ,FreeMargin);
return (vol);

Test cihazı aşağıdaki hataları veriyor

2010.06.08 22:28:57 Çekirdek 1 yeterli para yok [anında 1.1924'ten 0.10 EURUSD satın alın]
2010.06.08 22:28:57 Core 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.24, NewFreeMargin: -19.24
2010.06.08 22:28:57 Çekirdek 1 1000 100
2010.06.08 22:28:57 Çekirdek 1 yeterli para yok [anında 1.19180'den 0.10 EURUSD satın al]
2010.06.08 22:28:57 Core 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.18, NewFreeMargin: -19.18
2010.06.08 22:28:57 Çekirdek 1 1000 100
2010.06.08 22:28:57 Çekirdek 1 yeterli para yok [anında 1.19362'den 0.10 EURUSD satın alın]
2010.06.08 22:28:57 Core 1 PrevBalance: 100.00, PrevEquity 100.00, PrevMargin: 0.00, NewMargin: 119.36, NewFreeMargin: -19.36
2010.06.08 22:28:57 Çekirdek 1 1000 100

Bu mesajlara bakılırsa, 1 lot, LotRqdMgn satın almak için gereken serbest marj 1000'dir ve bu doğru görünüyor. Serbest Marj FreeMargin=100. 0,1 lotu 1000 ile çarparız ve 100 elde ederiz. Yani 1. lotu açmak için yeterli para vardır. Ancak testçi, yeterli fon olmadığını bildiriyor. Hata nerede?

 
gpwr :

Bu mesajlara bakılırsa, 1 lot, LotRqdMgn satın almak için gereken serbest marj 1000'dir ve bu doğru görünüyor. Serbest Marj FreeMargin=100. 0.1 lotu 1000 ile çarparız ve 100 elde ederiz. Yani 1. lotu açmak için yeterli para var. Ancak testçi, yeterli fon olmadığını bildiriyor. Hata nerede?

Hata, hesaplamalarınızda marj para birimini unutmuş olmanızdır. Bakiye = 100 USD ve Marj Gereksinimleri = 100 EUR (119 USD).

Bu nedenle, işlemi gerçekleştiremezsiniz - bu doğru.

 
Renat :

Hata, hesaplamalarınızda marj para birimini unutmuş olmanızdır. Bakiye = 100 USD ve Marj Gereksinimleri = 100 EUR (119 USD).

Bu nedenle, işlemi gerçekleştiremezsiniz - bu doğru.

Renat'a teşekkürler. Hatamı anladım. LotRqdMgn hesaplama formülü değiştirildi ve artık her şey doğru çalışıyor.

 

Kütüphanecilikte yeni bir kelime ya da yakınlardaki harikalar...


Kütüphaneyi kullanan bir danışman oluşturdum, kontrol ettim, her şey çalışıyor. Expert Advisor, bu kitaplık ve birkaç MQL5 ve MQH dosyası içeren bir arşiv oluşturdum. Arşivi testler için müşteriye verdim.


Ve hepsi bir şey olmayacaktı, ama başka bir terminalde testler yapmaya karar verdim. Bu yüzden bu arşivi açtım ve hemen şimdi (10 kez) çizelgeye bir uzman eklemek istedim...


Ve terminal günlüğünde şu iki satır yazılır:

2010.06.10 09:54:51 Experts Expert MechanicalTrading-Infinity-2010 (EURUSD,Günlük) kaldırıldı
2010.06.10 09:54:51 Uzmanlar MechanicalTrading-Infinity-2010 (EURUSD,Günlük) yüklemesi başarısız oldu


Neyin ve nasıl çalıştığını (ya da daha doğrusu işe yaramadığını) anlamaya başladım ve kendim için harika bir gerçeği keşfettim - Terminal, derlenmiş kitaplığı dizinde (* .ex5 biçiminde) görüyor, ancak aynı zamanda inatla “ıslatıyor”, anladığınız gibi pek iyi değil...

Bu davranışın olası nedenlerini sıraladıktan sonra, terminal orijinal dosyayı (*.mq5 biçiminde) kitaplığın bulunduğu dizine yerleştirmeye karar verdi. dosyayı, derlemeden bile yerleştirdi. Tabloya bir Uzman Danışman eklemeye çalıştım - işte ve işte, her şey işe yaradı.


Oyun ilerledikçe aklıma bir takım sorular geldi:

1. Kitaplık yalnızca .ex5 olarak sunuluyorsa EA neden çalışmıyor?

2. Terminal neden bu dosyayı dizinden kaldırıyor?

3. Terminal günlüğünde neden yukarıdakilerin tümü hakkında net bir yorum yok?

4. Belgeler neden böyle bir davranışın olasılığından bahsetmiyor?


ve son olarak beşinci ve son soru - tüm bunlarla nasıl başa çıkılır ve neyi yanlış yapıyorum (belki terminalde bir EX5 dosyası eksiktir ve başlık veya kitaplığın kendisi gibi bir şey arıyordur)?


not

Bu arada, aynı çöp EA'nın kendisine de oluyor, *.ex5 dosyası kalıcı olarak siliniyor... :(