Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 133

 
Aliaksandr Kryvanos :

Hey!

Birisi bana MT4 için MT5'ten MaxLotCheck()'i değiştirmenin bir analogunu söyleyebilir mi, teşekkürler

Hiçbir işlevin kendisi yoktur. Kendin yazman gerekiyor. Tüm kontrollerle, 10-20 satırlarına sığmalıdır.

 
Ihor Herasko :

Hiçbir işlevin kendisi yoktur. Kendin yazman gerekiyor. Tüm kontrollerle, 10-20 satırlarına sığmalıdır.

Tamam, peki ya formülün kendisi?

 
Aliaksandr Kryvanos :

Tamam, peki ya formülün kendisi?

Gelelim kaynağına:

 //+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         price           - price of the opening position,         |
//|         percent         - percent of available margin [1-100%].   |
//+------------------------------------------------------------------+
double CAccountInfo::MaxLotCheck( const string symbol, const ENUM_ORDER_TYPE trade_operation,
                                 const double price, const double percent) const
  {
   double margin= 0.0 ;
//--- checks
   if (symbol== "" || price<= 0.0 || percent< 1 || percent> 100 )
     {
       Print ( "CAccountInfo::MaxLotCheck invalid parameters" );
       return ( 0.0 );
     }
//--- calculate margin requirements for 1 lot
   if (! OrderCalcMargin (trade_operation,symbol, 1.0 ,price,margin) || margin< 0.0 )
     {
       Print ( "CAccountInfo::MaxLotCheck margin calculation failed" );
       return ( 0.0 );
     }
//---
   if (margin== 0.0 ) // for pending orders
       return ( SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX ));
//--- calculate maximum volume
   double volume= NormalizeDouble (FreeMargin()*percent/ 100.0 /margin, 2 );
//--- normalize and check limits
   double stepvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_STEP );
   if (stepvol> 0.0 )
      volume=stepvol* MathFloor (volume/stepvol);
//---
   double minvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MIN );
   if (volume<minvol)
      volume= 0.0 ;
//---
   double maxvol= SymbolInfoDouble (symbol, SYMBOL_VOLUME_MAX );
   if (volume>maxvol)
      volume=maxvol;
//--- return volume
   return (volume);
  }
Burada ENUM_ORDER_TYPE ve OrderCalcMargin'i değiştirmeniz gerekiyor.
 
Yomayo) kaynak ..., teşekkürler
 

Hala belli değil...

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

ve

double margin;

OrderCalcMargin( ORDER_TYPE_BUY ,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


1 lot açmak için farklı marj numaraları döndür

 
Aliaksandr Kryvanos :

Hala belli değil...

margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED)

ve

double margin;

OrderCalcMargin( ORDER_TYPE_BUY ,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),margin);


1 lot açmak için farklı marj numaraları döndür

Farklı terminallerde açıkça karşılaştırın)) Yukarıda - MT4, aşağıda - MT5. Bu, sunucuların farklı olduğu, ticaret koşullarının farklı olduğu anlamına gelir. En basit - farklı omuzlar.

Gerçekte ne elde ettiniz, hangi değerler?

 

Evet, doğru, omuz farklı, bir 1/300'de, ikinci 1/2000'de

Teşekkür ederim

 

Merhaba!

Danışmanım bir giriş noktası için çok aşamalı bir arama kullanıyor, bunun için başlangıç anından itibaren önce sinyaller için geçmişi kontrol ediyor, sonra gerçek zamanlı olarak çalışıyor. Yani strateji test cihazında her şey geçmişle düzgün çalışıyor ve onu gerçek zamanlı olarak çalıştırdığımda geçmişi doğru bir şekilde taraymıyor ve sinyalleri atlıyor, sorun ne olabilir?

Belki de bariz bir cevap vardır, çünkü kod parçacığı burada yayınlamak için oldukça büyüktür, bu yüzden şimdilik kodu göndermiyorum.

 
ArturR :

Merhaba!

Danışmanım bir giriş noktası için çok aşamalı bir arama kullanıyor, bunun için başlangıç anından itibaren önce sinyaller için geçmişi kontrol ediyor, sonra gerçek zamanlı olarak çalışıyor. Yani strateji test cihazında her şey geçmişle düzgün çalışıyor ve onu gerçek zamanlı olarak çalıştırdığımda geçmişi doğru bir şekilde taraymıyor ve sinyalleri atlıyor, sorun ne olabilir?

Belki de bariz bir cevap vardır, çünkü kod parçacığı burada yayınlamak için oldukça büyüktür, bu yüzden şimdilik kodu göndermiyorum.

Biraz hata ayıklama yapın. Komut dosyasına tarama geçmişini vurgulayın. Alert() işlevini kullanarak ayrıntılı bilgileri görüntüleyin: her şeyden önce, geçmişteki çubukların sayısı , başlangıç ve bitiş tarihleri, ... ardından tarama işlemi. Belki hepsini bir dosyaya yazmak daha uygundur.
 
STARIJ :
Biraz hata ayıklama yapın. Komut dosyasına tarama geçmişini vurgulayın. Alert() işlevini kullanarak ayrıntılı bilgileri görüntüleyin: her şeyden önce, geçmişteki çubukların sayısı , başlangıç ve bitiş tarihleri, ... ardından tarama işlemi. Belki hepsini bir dosyaya yazmak daha uygun olur.

Tavsiye için teşekkürler, nasıl yapıldığını okuyacağım.

Bir soru daha var, gerçek zamanlı olarak hata ayıklamaya başladığımda, metatrader4 bunu her zaman İsviçre frangı ile başlatıyor, ihtiyacım olan çiftte başlaması için ne ayar yapacağını bilen var mı?

Her şeyi anladım, görünüşe göre test cihazında dikkate alınmayan diğer zaman dilimlerinin göstergelerinin değerlerindeydi. Ayrıca doğru çifti nasıl yapacağımı da buldum. Hepinize katılımınız için teşekkür ederim)