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

 
Николай Цепелев :

Merhaba. Parti hesaplamasını Uzman Danışmanıma şu şekilde yazdım:

lot=NormalizeDouble(AccountBalance()*risk/(SL*MarketInfo(Symbol(),MODE_TICKVALUE))2));

Amaç, hesap para birimi ve çifti ne olursa olsun, verilen riskler için doğru lot büyüklüğünü elde etmek ve zararı durdurmaktır. risk Durdurma kaybı tetiklendiğinde kayıpların yüzdesi olarak ayarlanır. Kaybı Durdur SL puan cinsinden (burada bir nokta, çiftin fiyatındaki olası minimum değişikliktir). Bu danışmanı gerçek bir hesapta çalıştıracağım. Ancak şüpheler var. Daha deneyimli programcılardan biri size hangi hataların oluşabileceğini söylerse çok minnettar olacağım.
İlk strateji test cihazı . Sonra bir demo hesabı. Ve ancak o zaman gerçek. Formülü test etmek için bir komut dosyası yazın. Ya da sadece kağıda güvenin. Bakiye aldı=100, risk=0,1 SL=100, Kene=0,00001 Parti=100*0,1 / (100*0,00001) = 10 / 0,001 = Bakiyeden 10000 lot fazla mı? Belki omuz dikkate alır?
 
STARIJ :
İlk strateji test cihazı . Sonra bir demo hesabı. Ve ancak o zaman gerçek. Formülü test etmek için bir komut dosyası yazın. Ya da sadece kağıda güvenin. Bakiye aldı=100, risk=0,1 SL=100, Kene=0,00001 Parti=100*0,1 / (100*0,00001) = 10 / 0,001 = Bakiyeden 10000 lot fazla mı? Belki omuz dikkate alır?

MarketInfo(Symbol(),MODE_TICKVALUE)) minimum onay boyutunu döndürmez. Yardım diyor ki:

Mevduat para biriminde enstrümanın fiyatındaki minimum değişikliğin miktarı.


Ancak gerçekte, sözleşmenin 1 lotunun mevduat para biriminde enstrümanın fiyatındaki minimum değişikliğin maliyeti ortaya çıkıyor.


Verdiğiniz örnekte MarketInfo(Symbol(),MODE_TICKVALUE)) 1 değerini döndürür. Ve sonra her şey doğru. Gerçek dolar ve ruble hesaplarında bir komut dosyası ile kontrol ettim, her şey çalışıyor. İşte test ettiğim komut dosyası:

  #property telif hakkı "Telif hakkı 2016, MetaQuotes Software Corp."

#özellik bağlantısı "https://www.mql5.com"

#özellik sürümü "1.00"

#mülkiyet katı

#özellik show_inputs

dış çift risk=0.10;

dış int sl=1000;

//+------------------------------------------- --------------------+

//| Komut dosyası programı başlatma işlevi |

//+------------------------------------------- --------------------+

OnStart() geçersiz

{

Alert(NormalizeDouble(AccountBalance()*risk/(sl*MarketInfo(Symbol(),MODE_TICKVALUE))),2));

}

//+------------------------------------------- --------------------+

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Библиотеки: Black or White Text Black or White Text...
 

Haklısın. Komut dosyası denetimi - daha hızlı ve daha güvenilir

 //+------------------------------------------------------------------+ 
//| Расчет лота                                                      | 
//+------------------------------------------------------------------+ 
#property strict
#property show_inputs
extern double risk= 0.10 ;
extern int     sl  = 100 ;
void OnStart () 
{ 
   Alert ( MarketInfo ( Symbol (), MODE_TICKVALUE ), "   " , NormalizeDouble ( AccountBalance ()*risk/(sl* MarketInfo ( Symbol (), MODE_TICKVALUE )), 2 ));
}
 
Николай Цепелев :
Senaryonuz ekranda 19 cm yüksekliğini kaplıyor, benim 8,1 cm bunun yarısı kadar. Ve renk farklı
 

Ayrıca NormaliseDouble işlevindeki doğruluğu izin verilen minimum partiye bağlı hale getirmeniz gerekir. Aksi takdirde OrderSend fonksiyonuna örneğin 0.11 lotu geçilirse ve enstrüman sadece 0.1'in katları olan lotlarda işlem görürse hata oluşur.

 

merhaba! Neden tüm açık anlaşmaların hemen silinmediğini anlayamıyorum, yani danışman bazılarını siliyor ve geri kalanında orderdelete 4108 hatası veriyor, piyasa emri birkaç kez silinemiyor ve ancak o zaman siliyor. silme döngüsünün başlamasından önce zaten açık olmalarına rağmen.

   int start()                                     
  {
  
   while (! IsStopped ())     
      {               

Refreshrates();

  
   if (cont== true && NormalizeDouble ( AccountProfit (), 2 )>= 0 )
    {
     for (i= 1 ; i<= OrdersTotal (); i++)       
        { RefreshRates (); 
         if ( OrderSelect (i- 1 , SELECT_BY_POS )== true
           {                                    
               while ( OrderType ()== OP_BUYLIMIT ) 
              {
               res= false ;
               res= OrderDelete ( OrderTicket ());
               if (res== true )
               break ;
               }
               while ( OrderType ()== OP_BUY )
              {
               res= false ;
               res= OrderClose ( OrderTicket (), OrderLots (), MarketInfo (Symb, MODE_BID ),Slippage);  
               if (res== true )
               break ;
              }
               while ( OrderType ()== OP_SELLLIMIT ) 
              {
               res= false ;
               res= OrderDelete ( OrderTicket ());
               if (res== true )
               break ;
              }
               while ( OrderType ()== OP_SELL )
              {
               res= false ;     
               res= OrderClose ( OrderTicket (), OrderLots (), MarketInfo (Symb, MODE_ASK ),Slippage);
               if (res== true )
               break ;
              }     
           }  
         }
}
}  
 
Yevgen Butov :

merhaba! Neden tüm açık anlaşmaların hemen silinmediğini anlayamıyorum, yani danışman bazılarını siliyor ve geri kalanında orderdelete 4108 hatası veriyor, piyasa emri birkaç kez silinemiyor ve ancak o zaman siliyor. silme döngüsünün başlamasından önce zaten açık olmalarına rağmen.

Bu sayfada nasıl silineceği açıklanmaktadır. 2 hatan var.

 
Tünaydın. Lütfen yardım et. Nette ve forumda hepsi tırmandı. EA'yı standart modda test ediyorum, her şey yolunda... Hata yok, uyarı yok. İndirilen kene verileri, eklendi. (Her şeyi burada açıklanan şekilde yaptım - "Uzman Danışmanları %99 kalite ile nasıl test edebilirim - kolay, ücretsiz, yasal" ve burada - "Metatrader 4 Strategy Tester'da %99 Modelleme Kalitesi nasıl elde edilir ")exper1.0.mq4 ' (69,25)... Dizi olduğunu anladım. Ve ne yapacağımı yapmayacağım. Ancak bir kez standart modda her şey yolunda ... Pliz yardım
 
qroner :
Çalışırken 'expert1.0.mq4' (69,25) dosyasında dizi sürekli aralık dışında hata veriyor... Dizi olduğunu anladım. Ve ne yapacağımı yapmayacağım.

Bu diziyi işleyen koda veya bir parçasına bakmanız gerekir.

Telepatlar bugün dinleniyor.

 
Konstantin Nikitin :

Bu diziyi işleyen koda veya bir parçasına bakmanız gerekir.

Telepatlar bugün dinleniyor.

void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
ArrayInitialize (_Mas, 0);
int Bilet=-1;
for(int pos=OrdersTotal()-1; pos>=0; pos--){
if(OrderSelect(kon,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&
OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
Bilet=SiparişTicket();
switch(OrderType()){
durum 0:{_Mas[0]++;_Mas[6]++;break;}
durum 1:{_Mas[1]++;_Mas[6]++;break;}
durum 2:{_Mas[2]++;_Mas[7]++;break;}
durum 3:{_Mas[3]++;_Mas[7]++;break;}
durum 4:{_Mas[4]++;_Mas[7]++;break;}
durum 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

İşte fonksiyon.

Standart modda herhangi bir hata olmadığı için sorunun kodda olmadığını düşündüm.

Neden: