uzman danışman - çeşitli sorular - sayfa 33

 

MQL4:

MODE_LOTSTEP

24

Partileri değiştirmek için adım


Print ("Step for changing lots=", MarketInfo ( Symbol (), MODE_LOTSTEP ));

MQL5:

SYMBOL_VOLUME_STEP

Anlaşmanın yürütülmesi için minimum hacim değişikliği adımı

çift


Print ( " Step: " , SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP );

Bu nedenle, eğer 0,01 ise, lot boyutundaki en küçük yukarı veya aşağı adım hakkında sizi bilgilendirir, o zaman lotlarınız 0.01, 0.02, 0.03, 0.04 vb. kabul etmelidir.

0,1 olsaydı, lot büyüklüğündeki değişikliğiniz 0,1 sonraki 0,2 sonraki 0,3'ü karşılaması gerekirdi.

Bu yüzden anlamıyorum:

   if (lotsize>=(lotstep* 100 ))
     {
      lotstep=lotstep* 100 ;
       Print ( "lot step: " ,lotstep);
     }

Belki farklı bir parti adımı demek istiyorsun?

Normalde değeri değiştirmezsiniz çünkü her bir sembol için sabittir.

 
Max Enrik :
// lot plus
if (sparam==lotbuttonplus)
  {
   if (lotsize>=(lotstep* 100 ))
     {
      lotstep=lotstep* 100 ;
       Print ( "lot step: " ,lotstep);
     }

Sezgisel olarak adlandırılmış bir değişkenin değerini değiştirirseniz işler kafa karıştırıcı olabilir. Ben lotstep'in her zaman lotstep olduğunu öneririm, başka bir şey değil.

Böyle bir şeye ne dersin?

   double increment = (lotsize < lotstep* 100 ) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue* 10 );
   lotsize= fmin (lotmaxdivide,lotsize+(( ctrlfalse) ? increment * 10 : increment ));
Düzenleme: üzgünüm, az önce Marco'nun cevabını gördüm. Yeniden katılıyorum: çok adımlı adlandırma.
 

Marco vd Heijden :

Bu yüzden anlamıyorum:

   if (lotsize>=(lotstep* 100 ))
     {
      lotstep=lotstep* 100 ;
       Print ( "lot step: " ,lotstep);
     }

Belki farklı bir parti adımı demek istiyorsun?
Normalde değeri değiştirmezsiniz çünkü her bir sembol için sabittir.

Evet! Farklı lot adımını kastediyorum, yani lot büyüklüğü EURUSD için lot büyüklüğü 1.00'e ulaştığında. O zaman parti boyutunu 1.00 artırmam gerekiyor. Parti büyüklüğü 1.00'e ulaşmadan önce - parti büyüklüğü 0.01, 0.02 vb. (hangisini istiyorum) - ama parti büyüklüğü 1.00'e ulaştıktan sonra - parti büyüklüğü 1.00, 2.00, 3.00 vb.
Bu alt başlıkta yapmak istediğim şey bu.

Çok daha fazla teşekkürler.

 
honest_knave :

Sezgisel olarak adlandırılmış bir değişkenin değerini değiştirirseniz işler kafa karıştırıcı olabilir. Ben lotstep'in her zaman lotstep olduğunu öneririm, başka bir şey değil.
Böyle bir şeye ne dersin?

   double increment = (lotsize < lotstep* 100 ) ? lotstep : lotstep*100;
   lotmaxdivide=lotmax/lotmax *(lotvalue* 10 );
   lotsize= fmin (lotmaxdivide,lotsize+(( ctrlfalse) ? increment * 10 : increment ));
Düzenleme: üzgünüm, az önce Marco'nun cevabını gördüm. Yeniden katılıyorum: çok adımlı adlandırma.

( Ben sadece biraz değiştim - ... ? lotstep : lotstep*100 - ...? lotstep : lotstep*10 )

Evet! Orijinal kodumda işler karışıyor.
Büyük yardımınızdan sonra sorunumu çözüyorum. Çok teşekkürler.

Ayrıca lot büyüklüğünün böyle artmasını diliyorum.
Böylece parti büyüklüğü 0.99, 1.00, 1. 01 , 1. 11 gibi artar.
Ama buna 0.99, 1.00, 1.10, 1.20 vb. ihtiyacım var.

Şimdiden teşekkürler.

 

Bence 0.99, 1.00, 1. 01 , 1.02 . en iyi fikir olur.

Sanırım mevcut en küçük adıma bağlı kalın.

Bu ULTRA BÜYÜK adımları neden atmak istiyorsunuz?

Bunu denediniz mi?

Lütfen dene.
 
Marco vd Heijden :

Bence 0.99, 1.00, 1. 01 , 1.02 . en iyi fikir olur.
Sanırım mevcut en küçük adıma bağlı kalın.
Bu ULTRA BÜYÜK adımları neden atmak istiyorsunuz?
Bunu denediniz mi?

Lütfen dene.

Zaten denedim, lot büyüklüğüne 5.00 ulaşmam gerekiyorsa 40 kez lot artı düğmesine ( + ctrl ) tıklamam gerektiğini düşünüyorum.

 

Vay ve neden beş?

* yerine + ve - kullanabilirsiniz

lotsize=lotsize+ 0.1 ;
lotsize=lotsize- 0.1 ;

Ama robotumda onu tamamen yok olmaktan kurtaran bir satır var ve o da şu:

static input double lotsmax= 1 ; // Max Lots (please respect the setting)
 
Marco vd Heijden :

Ama robotumda onu tamamen yok olmaktan kurtaran bir satır var ve o da şu:

Bu kesinlikle doğru, tabii ki o ortama da saygı duyuyorum.

Ama bu sadece bir sorun - yani her an ayarlayabilirim.
Belki bu parti büyüklüğü hakkında biraz deneyime ihtiyacım var.

Bence bu alt konu şimdilik kapanabilir.

Teşekkürler @Marco vd Heijden ve @honest_knave

#Lot Adımı - Kapalı

 

#Lot Size Maks - Açık

@Marco vd Heijden - EA'larım için kodun bu bölümünü yazmak için ilham aldığım en son yorumunuz için çok daha fazla teşekkürler. (Diğer işlevleri yazmayı bıraktım - bunu diğerlerinden önce yazmaya çalışıyorum)

Bu yüzden, genellikle olduğu gibi parti büyüklüğü max için bir şey test etmeye çalışıyorum.
Parti boyutu maksimum lot boyutundan daha iyi olduğunda, yazdırma işlevi ticaret modu hakkında bana izin vermiyor.
Bu sorunu çözdükten sonra bu fonksiyonu Sat ve Al buton fonksiyonlarını koymam gerekiyor.

S: Yazdırma işlevini nasıl yapabilirim, ticaret modu hakkında da bana izin verir mi? (- parti büyüklüğü parti büyüklüğü maks ya da daha az olduğundan daha iyi )
S: Bu yöntem parti büyüklüğü max için faydalı mı?

Şimdiden teşekkürler.

void example()
  {
   string trademode;
   ENUM_ACCOUNT_TRADE_MODE accounttype=( ENUM_ACCOUNT_TRADE_MODE ) AccountInfoInteger ( ACCOUNT_TRADE_MODE );

   if (accounttype== ACCOUNT_TRADE_MODE_DEMO )
     {
       switch (accounttype)
        {
         case ACCOUNT_TRADE_MODE_DEMO :
             if ( lotsize > ( lotstep * lotsizemax ) ) return ;
            trademode= "demo" ;
             break ;
         case ACCOUNT_TRADE_MODE_CONTEST :
            trademode= "contest" ;
             break ;
         default :
            trademode= "live" ;
             break ;
        }
     }
   Print ( "Trade Mode: " ,trademode);
  }
 

Demo hesap mı yoksa canlı hesap mı olduğunu doğrulamak için hayır, yarışma nadiren kullanılır.

Lot max çok kolay olabilir.

//---
// calculate lotsize here
//---

// check if lotsize is not too high

if (lotsize>lotsize_max)
{
  lotsize=losize_max;
}