MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1739

 
Artyom Trishkin # :

CopyRates()'e yapılan ilk çağrı, geçmiş verilerin pompalanmasını başlattı (bir hafta çalıştırmayın ve aynı şeyi tekrar alırsınız, peki, belki bir hafta değil, bir süre sonra).
Sunucuda ne kadar veri olduğunu kontrol etmeniz ve mevcut miktarı danışmanla karşılaştırmanız yeterlidir. Gerekenden azsa, bir sonraki onay işaretinden önce çıkın. Tekrar kontrol edin. Belirli sayıda deneme için gerekli geçmişi elde etmek mümkün olmadıysa, bu hatayı gerektiği gibi işleyin.

Bilgi için teşekkürler!

Zaman varsa, nasıl düzeltileceğini cevaplamanızı rica ediyorum:

N mumların geçmişinde, iki farklı yönlendirilmiş hedef belirlenir: Kapat[N]+50*Puan ve Kapat[N]-50*Nokta.
O zaman fiyatın hedeflerden birine ulaşması şartı (if (Yüksek[i]> Kapat[N]+50*Puan) veya (if (Düşük[i]<)   Kapat[N]-50*Nokta)
Koşul karşılandığında, Kapat[N] ile Yüksek[i] arasındaki mesafe x[high]=High[i] dizisine girilir.
Ardından, herhangi bir zamanda rastgele herhangi bir çizelgeye koşar.

Ve Print( x[high]) ile kontrol ederken, on değerden 1-2'si 50'den az gösteriyor! Biri 12, diğeri 49'dur. Ancak +50 * Puan kesinlikle belirtilmiştir. 8-9 doğru (50'den fazla) ve 1-2 anormal. Bu bir test cihazı aracılığıyla değil, gerçek bir grafikte bir danışman atıyorum (ticaret işlevleri olmadan), ancak yalnızca yukarıdakilerle, tarihle çalışır ve böyle yazar.

Değer ne kadar büyük olursa, bu tür hatalar o kadar az olur. Yayılmanın yolda olduğunu düşündüm, ama... MT4'te tarihte yayılma yok gibi görünüyor.

 
Artis98 # :

Merhaba sevgili forum kullanıcıları ve deneyimli programcılar! Danışmanı bitirmek için yardıma ihtiyacınız var)) Bana, pliz, danışman koduna nasıl 2 şey ekleneceğini söyle:

1. Durum şu şekilde - TP ve SL ile bir emir (1.) ve belirli bir lot (0,01 olsun) açıyorum. Bu sipariş kar al - harika, hiçbir şey değişmez. Ancak, bu (1.) sipariş SL tarafından kapatılırsa, bundan hemen sonraki (2.) sipariş lotta 2 kat artışla (0.01*2=0.02) açılır. Bu 2. sipariş kar al ile kapatılırsa - bir sonraki sipariş (3.) normal bir lot ile açılır, yani. 2 kat artırılmış bir lot, yalnızca bir önceki siparişin (1.) SL tarafından kapatılmasından sonraki (2.) sipariş için gereklidir. 3. sırada arka arkaya ikinci kez bir SL kapanışı varsa, bir TP kapanışı olana kadar lot iki katına çıkar. Umarım eklenmesi gereken mantığı detaylı anlatabilmişimdir;


2. Eklenecek ikinci şey ise SL'nin hareketi, şimdi belirli bir örnekle açıklayacağım: Diyelim ki TP + 300, SL - 500 temel parametrelerine sahip bir emir var. Fiyat doğru yönde gidiyor ve geçiyor + Emir açılış fiyatından 100 pip. Fiyat, emir açılış fiyatından +100'e ulaştığında, SL, taban -500'den +90'a geçmelidir. Onlar. fiyat emrin açılış fiyatından + 100 pip'e ulaştığında, S, L ayarlayarak emri başabaşa aktarıyoruz. +90 pip ile. Bundan sonra, fiyat doğru yönde daha da ileri giderse ve bir + 50 pip daha geçerse - SL 50 pip hareket eder => şimdi emir açılış fiyatından + 140 pipte olmalıdır. Onlar. SL, emir açılış fiyatından ilk kez +90 pip hareket eder ve +50 pip hareket ederse (-500 => + 90 => + 140 => + 190 vb.) hareket eder. Ve böylece her şey ya fiyat TP'ye ulaşmadan önce ya da trend hareketi tersine dönüp SL'yi devirdiğinde gider.


Umarım her şeyi ayrıntılı olarak anlatmışımdır ve gerçekten yardımınızı umuyorum çünkü bu eksik öğeleri ekleyerek danışman hazır olacaktır)) Herhangi bir sorunuz varsa - sorun))) Aşağıda danışman kodunun bir kısmını gönderiyorum:

İlk noktada: bir pozisyon açmadan önce, bir öncekinin nasıl kapatıldığına bakın. Eğer SL ile ise, lot çift olmalıdır. Parti, önceki pozisyonun lotundan değil, ayarlarda veya kodda bir yerde belirtilenden ikiye katlanır. Ardından, açmadan önce bir durum kontrolünüz olacak: önceki pozisyon SL tarafından kapatılmışsa, o zaman çift lotlu bir pozisyon açın.

İkincisinde: Bu başlıkta, uzun süredir takip eden bir durdurma oluşturmak için bir örnek hazırladım. Bak. Kullanıcının mesajlarında profilimde daha iyi - burada 100'den fazla sayfa arasında gezinmekten daha hızlı bulacaksınız. Ardından bulunan örnekten yola çıkarak kendi trolünüzü oluşturmaya çalışacaksınız.

 
Artyom Trishkin # :

CopyRates()'e yapılan ilk çağrı, geçmiş verilerin pompalanmasını başlattı (bir hafta çalıştırmayın ve aynı şeyi tekrar alırsınız, peki, belki bir hafta değil, bir süre sonra).
Sunucuda ne kadar veri olduğunu kontrol etmeniz ve mevcut miktarı danışmanla karşılaştırmanız yeterlidir. Gerekenden azsa, bir sonraki onay işaretinden önce çıkın. Tekrar kontrol edin. Belirli sayıda deneme için gerekli geçmişi elde etmek mümkün olmadıysa, bu hatayı gerektiği gibi işleyin.

Yüklenen çubukların sayısını programlı olarak almak mümkün müdür?

Ben kendim sadece her zaman dilimi için alıntı arşivindeki tarihe bakıyorum ve hesaplamalarda onlardan çıkmamaya çalışıyorum.

Görev bu formda gerekli olmayabilir, gerekli sayıda çubuk yüklendiğinde bir bayrak almak daha doğrudur, ancak belirli enstrümanlar için hiç yüklenmeyebilir.

 
Artyom Trishkin # :

İlk noktada: bir pozisyon açmadan önce, bir öncekinin nasıl kapatıldığına bakın. SL ile ise, parti iki katı olmalıdır. Parti, önceki pozisyonun lotundan değil, ayarlarda belirtilenden veya kodda bir yerden ikiye katlanır. Ardından, açmadan önce bir durum kontrolünüz olacak: önceki pozisyon SL tarafından kapatılmışsa, o zaman çift lotlu bir pozisyon açın.

Sanırım bunu zaten kodda değiştirdim:

 //+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
 double Lots()   // Расчет объема лота
  {
   int n= 0 ;
   double Lotscount;
   double OL=Lot;
   
   
   if (Lot> 0 ) return (LOT());           // "если во внешней переменной "Lot" стоит число больше 0 => будет фиксированный лот без авт. расчёта" 
   Lotscount=AccountFreeMargin()/ 10000 ;   // раcчёт лота - свободная маржа/9000 => 100/9000=0.01 лота 
   Lotscount= MathMin ( 15 , MathMax ( 0.01 ,Lotscount));
     if (Lotscount< 0.1 ) Lotscount= NormalizeDouble (Lotscount, 2 );
     else 
     {
       if (Lotscount< 1 ) Lotscount= NormalizeDouble (Lotscount, 1 );
       else        Lotscount= NormalizeDouble (Lotscount, 0 );
     }
     
     for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
           if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber)
         {
             if (OrderProfit()< 0 ) 
             {
               if (n== 0 ) OL= NormalizeDouble (OrderLots()*K_Martin,DigitsLot);
               n++; 
               if (OrderProfit()> 0 ) return (Lotscount);
            }
             else
            {
               if (n== 0 ) { Comment ( "2" ); return (Lotscount);}
               else { Comment ( "3" ); return (OL);}
            }
         }
      }
   }
       return (Lotscount);
 }
//------------------------------------------------------------------
double LOT()
{
   int n= 0 ;
   double OL=Lot;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber)
         {
             if (OrderProfit()< 0 ) 
            {
               if (n== 0 ) OL= NormalizeDouble (OrderLots()*K_Martin,DigitsLot);
               n++; 
               if (OrderProfit()> 0 ) return (Lot); }
            }
             else
            {
               if (n== 0 ) { Comment ( "2" ); return (Lot);}
               else { Comment ( "3" ); return (OL);}
            }
         }
      }
   }
   return (OL);
}

Yoksa değil mi? Ayrıca, lotla ilgili iki şeyi nasıl değiştireceğimi bilmiyorum. Birincisi, çift lotlu bir siparişin yalnızca bir kez ve yalnızca bir siparişte (SL'li siparişten sonraki siparişte) açılmasını sağlamaktır. Ve nasıl ekleyeceğimi bilmediğim ikinci şey, arka arkaya iki SL olması durumunda (iki sipariş SL tarafından arka arkaya kapatıldı), üçüncü sipariş açılmayacak şekilde yapmaktır. başka 2 (2*2*2), ancak ikinci sıra gibi yalnızca bir kez (2*2).

 
Artis98 # :

Sanırım bunu zaten kodda değiştirdim:

Yoksa değil mi? Ayrıca, lotla ilgili iki şeyi nasıl değiştireceğimi bilmiyorum. Birincisi, çift lotlu bir siparişin yalnızca bir kez ve yalnızca bir siparişte (SL'li siparişten sonraki siparişte) açılmasını sağlamaktır. Ve nasıl ekleyeceğimi bilmediğim ikinci şey, arka arkaya iki SL olması durumunda (iki sipariş SL tarafından arka arkaya kapatıldı), üçüncü sipariş açılmayacak şekilde yapmaktır. başka 2 (2*2*2), ancak ikinci sıra gibi yalnızca bir kez (2*2).

İKİ tür siparişiniz var - No. 1 - normal lotlu bir sipariş ve No. 2 - artan lotlu bir sipariş. Lotlar yalnızca SL tipi No. 1 için artar

"Yorum"da sipariş türünü saklayın ör. Ve evde daha iyi hatırlayın, genel olarak, siparişlerinizle ilgili her şeyi kendiniz hatırlamak iyi bir alışkanlıktır.

 
Maxim Kuznetsov # :

İKİ tür siparişiniz var - No. 1 - normal lotlu bir sipariş ve No. 2 - artan lotlu bir sipariş. Lotlar yalnızca SL tipi No. 1 için artar

"Yorum"da sipariş türünü saklayın ör. Ve evde daha iyi hatırlayın, genel olarak, siparişlerinizle ilgili her şeyi kendiniz hatırlamak iyi bir alışkanlıktır.

Hiçbir şeyi ezberlemesi gerekmez (özellikle ezberleme daha sonra restorasyon gerektirdiğinden). Önceki pozisyonun nasıl kapatıldığını bilmesi onun için yeterlidir. Her şey. Stoploss ile kapatılan iki veya üç veya arka arkaya yüz veya arka arkaya değil, yalnızca sonuncusunu bilmeniz gerekmez. Zararı durdur ile kapatılırsa, bir sonraki çift lotlu olmalıdır. Ancak lot, önceki pozisyonun lotundan değil, programda belirtilen olağan lottan ikiye katlanmalıdır. Sonra - pozisyon stoploss ile kapatılmadıysa, bir sonrakini normal bir lotla açın. Pozisyon zararı durdur ile kapatılırsa, bir sonrakini ikiye katlayın. Her şey. Daha fazla bir şey bilmenize gerek yok.

 
Artyom Trishkin # :

Hiçbir şeyi ezberlemesi gerekmez (özellikle ezberleme daha sonra restorasyon gerektirdiğinden). Önceki pozisyonun nasıl kapatıldığını bilmesi onun için yeterlidir. Her şey. Stoploss ile kapatılan iki veya üç veya arka arkaya yüz veya arka arkaya değil, yalnızca sonuncusunu bilmeniz gerekmez. Zararı durdur ile kapatılırsa, bir sonraki çift lotlu olmalıdır. Ancak lot, önceki pozisyonun lotundan değil, programda belirtilen olağan lottan ikiye katlanmalıdır. Sonra - pozisyon stoploss ile kapatılmadıysa, bir sonrakini normal bir lotla açın. Pozisyon zararı durdur ile kapatılırsa, bir sonrakini ikiye katlayın. Her şey. Daha fazla bir şey bilmenize gerek yok.

insanlara kötü şeyler öğretme.

verilerinizi hatırlamanız ve üzerinde çalışmanız gerekir

 
Artyom Trishkin # :

Önceki pozisyonun nasıl kapatıldığını bilmesi onun için yeterlidir. Her şey. Stoploss ile kapatılan iki veya üç veya arka arkaya yüz veya arka arkaya değil, yalnızca sonuncusunu bilmeniz gerekmez. Zararı durdur ile kapatılırsa, bir sonraki çift lotlu olmalıdır. Pozisyon zararı durdur ile kapatılırsa, bir sonrakini ikiye katlayın.

İhtiyacım olan bu, asıl soru bu - kodda nasıl yazılır?

 

Merhaba!
Belki birileri derleyiciyi MT5 için değil MT4 için derlemeye nasıl zorlayacağını biliyordur?

Dosya *.mq4 uzantısına sahipse her şey yolundadır, *.mqh ise derleyici dosyayı *.mq5 olarak algılamaya başlar ve hatalar ortaya çıkar.

 
Sergey Zhukov # :

Merhaba!
Belki birileri derleyiciyi MT5 için değil MT4 için derlemeye nasıl zorlayacağını biliyordur?

Dosya *.mq4 uzantısına sahipse her şey yolundadır, *.mqh ise derleyici dosyayı *.mq5 olarak algılamaya başlar ve hatalar ortaya çıkar.

Dosyayı buradan alın. Bu yeni bir şey, daha önce hiç duymadım.