[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 393

 
Reshetov :

Test cihazında ve çizelgede dosyalar farklı dizinlere yazılır ve okunur:

  1. MetaTrader 4\tester\uzmanlar\dosyalar
  2. MetaTrader 4\uzmanlar\dosyalar

Yuri, saygılar! Şimdi anladım ve düzelttim.

Zhunko, teşekkür ederim. Bunu denedim, ancak bir hata aldım, dize dosyasından ikili veri okunamıyor gibi bir şey veya bunun gibi bir şey. Her durumda, tasarımım işe yarıyor.

 
snail09_1 :

IMHO, kapanış için bir dizi bilet oluşturmazdım, ancak piyasa emirleri döngüsünde her siparişi kontrol ettim, biletini olası koşulları kontrol ederek kapanış fonksiyonunun girişine gönderdim.

Kodla gösterebilir misin???

Yani, bu nasıl uygulanabilir?

 

Hepinize iyi günler!

Belki de soru yeni başlayanlar için pek uygun değil ama soru sorabileceğiniz başka bir konu bulamadım:

Grafiğin bakiye yerine öz sermayeyi göstermesi için MetaTrader 4'ten ayrıntılı bir raporu nasıl indirebilirim? Veya MT4'ten boşaltma yapmayın, ancak bunu başka uygun bir şekilde yapmak gerçekten mümkün mü? Ato baykuşlar tarafından takas edilir, dengeye bakmanın bir anlamı yoktur - asıl şey, düşüşlerin ne verdiğidir.

Çok teşekkürler!!

 
belous :

Kodla gösterebilir misin???

Yani, bu nasıl uygulanabilir?

Peki, bunun gibi bir şey

 int ticket;

for ( int z= OrdersTotal ()- 1 ;z>= 0 ;z--)
   {
   if (! OrderSelect (z,SELECT_BY_POS))
      {
      _GetLastError= GetLastError ();
       Print ( " OrderSelect(" ,z, ",SELECT_BY_POS)-Error #" ,_GetLastError);
       continue ;
      }
   if ( OrderMagicNumber ()==magic && OrderSymbol ()== Symbol ())
      {
       if (( OrderType ()==OP_BUY)||( OrderType ()==OP_SELL))
          {
           // Проверим условие для закрытия, и если истинно          
              {
              ticket= OrderTicket ();
               //Закрываем его
              }
           }
       }
    }
 

yardım edin lütfen

işte kod


 //-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0 ; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0 ;   // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0 ,
Time_at_History_Previos = 0 ;     
 
 if ( OrdersHistoryTotal () != 0 )
   {
     for ( int counter = OrdersHistoryTotal ()- 1 ; counter >= 0 ; counter--)
      {
       OrderSelect (counter, SELECT_BY_POS, MODE_HISTORY);
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         {
           if ( OrderType () == OP_BUY || OrderType () == OP_SELL)
            {
             if ( OrderProfit () < 0 ) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if (Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                 //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                 if ( OrderProfit () >= 0 )
                   break ;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0 ) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
         if (BuyLots  > SellLots)money = BuyLots * 10 ;
         if (BuyLots  < SellLots)money = SellLots * 10 ;
   if ((( AccountEquity () + Sum_Loss + (Sum_Loss / money)) >= AccountBalance ()) && (((totalSell > 0 ) && (totalBuy < 1 )) || ((totalSell < 1 ) && (totalBuy > 0 )))) { // Достигли безубытка
     // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0 ;
           

Anlaşma negatifte kapatıldığında, bir döngü açılacak ve bir sonraki sipariş sıfırdan fazla, yani pozitif bir bakiye, ancak negatiften daha az kapanırsa, o zaman bir ekleyeceğimiz hiçbir şey yapamam. artı eksi ve zaten daha küçük olan yeni bir negatif değer elde ederiz.

 if ( OrderProfit () >= 0 && Sum_Loss < 0.0 )
                   double lastLoss_two = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss_two;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
               }

ve bir sinyalde negatiften fazlaysa, siparişi kapatırız ve döngüyü baştan başlatırız.


Durum şu ki, bu kod bir anlaşmayı kayıpla kapattığında, eksi bakiyeyi hatırlar ve bir artı ile bir anlaşmayı kapattığında ve aynı zamanda artı bakiyeden daha az olduğunda, Sum_Loss'u sıfırlar ve ihtiyacım var sıfırlamak için değil, biçmek için.

yani, şimdi şöyle çalışıyor:

kapalı bir emri kontrol eder, eğer kapalı bir emrin karı sıfırdan azsa, bu kar Sum_Loss'a eklenir ve açık bir anlaşmanın karı Sum_Loss'u geçene (daha fazla olacak) kadar, anlaşmaya ulaşıldığında, anlaşma kapatılır ve Sum_Loss sıfırlanır ve döngü yeniden başlar.

Ve ihtiyacım var:

emir kırmızı ile kapandı, negatif karı Sum_Loss'a eklendi, sonra bir sonraki işlem pozitif bir karla kapandıysa, Sum_Loss miktarını karlı kardan alınan miktar kadar düşürürüz, bu da bir sonraki açık sipariş Sum_Loss'un alacağı anlamına gelir daha küçük bir miktarla ve siparişlerden elde edilen kâr Sum_Loss'tan daha büyük olana kadar böyle devam eder ve ardından Sum_Loss'u sıfırlar ve yeni bir döngü başlatırız.

toplam_kayıp = 0;

1. kapalı emir: kar (-50) < 0

Sum_Loss + kar (Sum_Loss + (-50))

Toplam_Kayıp = -50;

2. kapalı emir: kar(+40) > 0 ve Sum_Loss < 0

Sum_Loss + kar (Sum_Loss + 40)

Toplam_Kayıp = -10


Belki bir şekilde Sum_Loss değişkenini negatif olarak belirtmeniz gerekir? Genel olarak kafam karıştı. Birçok seçenek denedim ama doğru sonucu alamadım. En azından beni doğru yöne yönlendir, neyi ve nasıl yapacağımı söyle yoksa anlamam.
 
Yayılmayı hesaba katmadan bir danışman nasıl test edilir? Mümkün mü?
 
Max79 :
Yayılmayı hesaba katmadan bir danışman nasıl test edilir? Mümkün mü?
Google ve öğrenin, örneğin burada (set spread ? site:mql4.com) şunu okuyun: https://www.mql5.com/en/forum/102224/page2
 

bu türkiyede kim var

 

Bana yardım et lütfen.

Expert Advisor'a bekleyen bir sipariş değiştirici koydum ve bunu Journal'da test ederken bana bir hata veriyor - 1.

Onlar. - "Fonksiyon parametreleri olarak sabit değerler geçilirse bu durumda hata 1 (ERR_NO_RSULT) oluşacaktır."

Değişiklikten önce bir kontrol koydum, ancak yardımcı olmuyor. Hata nerede? EA test ediliyor, ancak değişmeyen değerlere sahip siparişler nasıl ayıklanır?