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

 

( Bu yorumu yazmaya çalışmadan önce sanırım çözüm bulmak için çok araştırdım evet benzer konuları buldum ama bu soruna çözüm bulamadım )

Bana Zararı Durdur'u pip olarak gösteren Satış Emri için aşağıdaki kodu kullanıyorum, Zarar Durdur pozitife dönene kadar bana doğru değeri gösteriyor.
Bu yüzden, bu sorunu çözmek için nasıl bir şeyler deneyebileceğime dair hiçbir fikrim yok.

Herhangi bir iyi yorum, lütfen daha iyi olur.
( not: Şu an için Trailing Stop kullanmıyorum. Ayrıca aşağıdaki kod sadece Bilgi Güncellemeleri için, OrderSend() veya benzeri şeyler için değil. )

if ( OrderType ()== OP_SELL || ( OrderType ()== OP_SELLLIMIT || OrderType ()== OP_SELLSTOP ))
  {
   riskinpips=change_to_pips( OrderStopLoss ()- OrderOpenPrice ());
  }
Print ( "stop loss in pips" , DoubleToString (riskinpips, 2 ));

Şimdiden teşekkürler.

Pozitif Karda Zarar Durdurulduğunda

(not: sorunumu açıklamak için fotoğraf düzenleme programı tarafından yapılan ekran görüntüsü etiketleri)
 

Size sonucu veren en yüksek değer eksi en düşük değerdir, böylece hangisinin en yüksek olduğunu kontrol edebilirsiniz.

if ( OrderStopLoss ()> OrderOpenPrice ())
{
   // orderstoploss - orderopenprice
}

else if ( OrderOpenPrice ()> OrderStopLoss ())
{
   // orderopenprice - orderstoploss
}
 
Marco vd Heijden :

Size sonucu veren en yüksek değer eksi en düşük değerdir, böylece hangisinin en yüksek olduğunu kontrol edebilirsiniz.

if ( OrderStopLoss ()> OrderOpenPrice ())
{
   // orderstoploss - orderopenprice
}

else if ( OrderOpenPrice ()> OrderStopLoss ())
{
   // orderopenprice - orderstoploss
}

Bunu hiç umursamadığım için kendi kendime gülüyorum. Bunun bana yardımcı olabileceğini düşünüyorum. Yakında deneyeceğim.

Çok teşekkürler Bay Marco

 

#Kar Para Birimi Hesapla - Kapalı

Şimdiye kadar mükemmel çalışıyor.
Çok teşekkürler @Marco vd Heijden ve @whroeder1

 

#Zaman - Açık

EA'm için Zaman / Saat hakkında araştırma yapmaya başladığımdan beri. Yazarların bunun için göstergede start() JUST kullandığını görüyorum.
EA'mda OnTimer() ve OnTick() kullanıyorum, start() kullanmak istemiyorum.
Bu yüzden, Zaman ve Saat işlevi için hangi özel işlevin daha iyi olacağından emin olmam/öğrenmem gerekiyor?

10 saat sonra bu konu hakkında araştırmaya devam edeceğim.
(not: Mql5.com Codebase sayfasından zaten birkaç Zaman ve Saat göstergesi buldum - ancak kopyalayıp yapıştırmayı sevmiyorum)

Herhangi bir iyi yorum, forum paylaşımı ve bağlantılar ve başka bir şey benim için daha iyi olurdu.

Şimdiden teşekkürler.

 

Başlatma işlevi, yalnızca komut dosyalarında OnStart ile değiştirilir. Expert Advisors ve göstergelerde sırasıyla OnTick ve OnCalculate olarak yeniden adlandırılmalıdır. Bir mql5 program işlemi sırasında yürütülecek kod şu üç işlevde bulunmalıdır:

Bakınız: https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden :

Başlatma işlevi, yalnızca komut dosyalarında OnStart ile değiştirilir. Expert Advisors ve göstergelerde sırasıyla OnTick ve OnCalculate olarak yeniden adlandırılmalıdır. Bir mql5 program işlemi sırasında yürütülecek kod şu üç işlevde bulunmalıdır:

Çok daha fazla teşekkürler @Marco benim için bu kadar bilgilendirici. " MQL4'ten MQL5'e geçiş" i zaten okudum.
 
Max Enrik :

#Zaman - Açık

EA için Zaman / Saat hakkında araştırma yapmaya başladığımdan beri. Yazarların bunun için göstergede start() JUST kullandığını görüyorum.
EA'mda OnTimer() ve OnTick() kullanıyorum, start() kullanmak istemiyorum.
Bu yüzden, Zaman ve Saat işlevi için hangi özel işlevin daha iyi olacağından emin olmam/öğrenmem gerekiyor?

10 saat sonra bu konu hakkında araştırmaya devam edeceğim.
(not: Mql5.com Codebase sayfasından zaten birkaç Zaman ve Saat göstergesi buldum - ancak kopyalayıp yapıştırmayı sevmiyorum)

Herhangi bir iyi yorum, forum paylaşımı ve bağlantılar ve başka bir şey benim için daha iyi olurdu.

Şimdiden teşekkürler.

OnTimer()'ı kullanın.

TimeLocal() kullanmak daha iyi bir görünüm sağlar, ancak aracı saat dilimine eşitlenmez.

TimeCurrent() kullanımı aracınızla eşitlenir, ancak kenelerin ne zaman geldiğine bağlı olarak saniyeler sonra "atlayabilir". Bu örnek sorunu vurgulayacaktır:

#property strict

int OnInit ()
  {
   EventSetTimer ( 1 );
   return ( INIT_SUCCEEDED );
  }

void OnTimer ()
  {
   Comment ( StringFormat ( "%s - Local\n%s - Broker" , TimeToString ( TimeLocal (), TIME_SECONDS ), TimeToString ( TimeCurrent (), TIME_SECONDS )));
  }
 

#Zaman - Kapalı

honest_knave :

OnTimer()'ı kullanın.
TimeLocal() kullanmak daha iyi bir görünüm sağlar, ancak komisyoncu saat dilimine eşitlenmez.
TimeCurrent() kullanımı aracınızla eşitlenir, ancak kenelerin ne zaman geldiğine bağlı olarak saniyeler sonra "atlayabilir". Bu örnek sorunu vurgulayacaktır:

#property strict

int OnInit ()
  {
   EventSetTimer ( 1 );
   return ( INIT_SUCCEEDED );
  }

void OnTimer ()
  {
   Comment ( StringFormat ( "%s - Local\n%s - Broker" , TimeToString ( TimeLocal (), TIME_SECONDS ), TimeToString ( TimeCurrent (), TIME_SECONDS )));
  }
Tamamen faydalı bir yorum . Çok teşekkürler dostum.
 

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

uzman danışman - çeşitli sorular

dürüst_knave , 2016.11.30 01:28

IMHO, tüm lot hesaplamalarınızı OnChartEvent() ve _lotCalc() arasında bölmek yerine bir arada tutarsanız daha iyi olur. Min / maks / adımı kontrol eden ve artırma / eksiltmeyi yapan bir fonksiyon.

void OnChartEvent ( const int       id     , // Event ID
                   const long    & lparam , // Parameter of type long event
                   const double & dparam , // Parameter of type double event
                   const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
     //-------Process Button---------------------------------------------------------|
     if ( sparam == _btnLotMinus )
    {
         ObjectSetInteger ( 0 , sparam , OBJPROP_STATE , false );
         _lotSize = fmax (_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
         printf ( " | Lot: %.2f  " , _lotSize );
         return ;
    }   //---if Close
     //                          ...
}

void _lotCalc()
{
     //---
    _lotMin  = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN   );
    _lotMax  = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX   );
    _lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );

     //---
}

#Lot Adımı - Yeniden Aç

@honest_knave - Parti Büyüklüğü ve Parti Adımı konusundaki en büyük yardımınız için teşekkürler.

Bu yüzden, kodun bu bölümünü " Lot Size >= ( Lot Step * 100 ) " o Lot Step " Lot Step * 100 " arttığında iyileştirmem gerekiyor.

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

   lotmaxdivide=lotmax/lotmax *(lotvalue* 10 );
   lotsize= fmin (lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep* 10 : lotstep));

// global variable
   infoupdate();

   printf ( "Lot: %.2f " ,lotsize);
   ObjectSetInteger ( 0 ,sparam, OBJPROP_STATE , false );
   return ;
  }

Şimdiden teşekkürler.

Neden: