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

 
BeerGod :

Yazdırma veya yorumda görüntülemek istediğiniz değişkeni DoubleToStr (çift değer, int basamak) dizesine değiştirin ve gerekli hassasiyeti ayarlayın.

https://docs.mql4.com/en/convert/DoubleToStr

https://docs.mql4.com/ru/common/comment


Tamam teşekkürler. Bunu yapmayı veya ObjecCreate() ile karalamayı da düşündüm..
 
okvseok :

lütfen bana (sonuncudan) son kâra kadar kaybedilen emirlerin sayısını sayan işlevi söyleyin...

teşekkür etmek!

Şu şekilde deneyebilirsiniz:
 //+----------------------------------------------------------------------------+
// Убыточно ли закрылся последний ордер, и подсчет количества
int fHistory(){
   int loss = 0 ;
   for ( int i=OrdersHistoryTotal()- 1 ; i >= 0 ; i--){               // Выборка в истории
     if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== true ){     // Если есть следующий в истории
         if (OrderMagicNumber()!=magN) continue ;                 // Ордера не нашего эксперта

         if (OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
         if (OrderProfit() > 0 ) return (loss);                  // Если прибыль, вернем количество убыточных
     }
  }
   return (- 1 );
}
 

OrderProfit(), OrderType() ve benzerlerini kullanmadan önce OrderSelect'i kaç kez çağırmanız gerekiyor? Start'ta bir kez veya OrderProfit, OrderType vb. kullanmadan önce her seferinde yeterli mi... OrderSelect'i aramam gerekir mi?

ve OrderProfit'ten hemen önce OrderSelect'i çağırmanın gerekli olup olmadığı veya sadece olsaydı, başlangıçta herhangi bir yerde olabilir mi?

 
hoz :

Soruyu yazdım, kimse fark etmedi. Herkesin kafasını karıştırmamak için buraya bu kadar uzun bir soru yazmak istemedim. Lütfen aklınızda bulundurun...

https://www.mql5.com/ru/forum/142983

Şu şekilde deneyin:

 int OrderCloseCount( double ordOpPrice, datetime ordOpTime)
{
   // slippage= Взять из OrderSend
   int timePlusMinus= 20 ; // Пусть будет 20 сек.
   int count = 0 ;
  
   for ( int i = OrdersHistoryTotal() - 1 ; i >= 0 ; i--)
  {
     if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
           if ( MathAbs (OrderOpenPrice()-ordOpPrice) <= slippage* Point && MathAbs (OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

Çünkü siparişlerinizin birebir aynı fiyattan ve tam olarak aynı anda açıldığının garantisi yoktur.

 
hoz :

Soruyu yazdım, kimse fark etmedi. Herkesin kafasını karıştırmamak için buraya bu kadar uzun bir soru yazmak istemedim. Lütfen aklınızda bulundurun...

https://www.mql5.com/ru/forum/142983

Bu konuya zaten yaklaşık bir algoritma yazdım (burada bazı nüansları daha iyi anlamak için biraz düzelttim) ve bahçeyi çitle çevirmeye gerek yok:


Algoritma bir çörek kadar basittir.

Kısmen kapatıldığında, Magic değişmez. Bilet değişir, ancak sihir değişmez.

Açık bir poz var, bu pozun kısım kısım kapatılması gereken seviyeler var.

Düzey1, Düzey2 ve Düzey3 diyelim.

Alış pozisyonu kârdaysa ve Teklif >= Seviye1 && Teklif< Seviye2 ---> pozisyonun ilk bölümünü kapatın (kalan lotun minimumdan az olmaması şartıyla, bu pozisyonun lotundan çok daha azıyla) çok), sonra:

Teklif >= Düzey2 && Teklif< Düzey3 ---> pozisyonun ikinci bölümünü kapatın (kalan lotun minimum lottan az olmaması koşuluyla, bu pozisyonun lotundan çok daha küçük bir lotla), o zaman:

Teklif >= Seviye3 && Teklif<Seviye4 ---> pozisyonun üçüncü bölümünü kapatın (kalan lotun minimum lottan az olmaması koşuluyla, bu pozisyonun lotundan çok daha azıyla), o zaman:

1. Teklif>=SeviyeX'te kısmi kapanıştan sonra parti minimumdan daha az olursa ---> tüm pozisyonu kapatın

2. Bid>=Level3 seviyesindeki üçüncü kapanıştan sonra hala bir pozisyon varsa, Seviye4'ü geçtikten sonra kalan poza bir trol ile eşlik ederiz veya hepsini bir kerede kapatırız.

Hepsi bu.

Satış için Sor: Sor<=Seviye1 && Sor>Seviye2 ... vs.'ye bakın. ...

Tüm pozlarımız arasında bir döngü yapıyoruz, her birini indekse göre seçiyoruz, seçilen pozisyon için seviyelerini ve kapalı lotlarını hesaplıyoruz ve çalışma algoritmasının tadını çıkarıyoruz... :)

Aynı zamanda, bu seviyelerin değerlerini Expert Advisor'ın hafızasında (değişkenlerde) saklamak gerekli değildir, bu çok uygundur - Expert Advisor herhangi bir nedenle sona ererse, devam ettikten sonra devam etmez. Seviyelerdeki verileri kaybedersiniz - onları anında her pozisyon için yeniden hesaplar.

Ve bir şey daha: Kısmi kapatmadan sonra koruyucu durdurucuyu sıkmayı unutmayın. 1. seviyede kapandıktan sonra - başabaşta dur, 2. seviyede kapandıktan sonra - 1. seviyede dur, 3. seviyede kapandıktan sonra - 2. seviyede dur, vb. ...


 
Merhaba! Özel bir gösterge kullanan bir Uzman Danışman örneği olan var mı?
 
dimarik0000 :
Merhaba! Özel bir gösterge kullanan bir Uzman Danışman örneği olan var mı?
Sorun ne?
 
artmedia70 :
Sorun ne?


EA koduna özel bir gösterge aktarma hakkında bir makale okudum ve kafam karıştı, buna değer mi? Yoksa kodda belirli bazı gösterge parametrelerini belirtmek yeterli mi?
 
dimarik0000 :

EA koduna özel bir gösterge aktarma hakkında bir makale okudum ve kafam karıştı, buna değer mi? Yoksa kodda belirli bazı gösterge parametrelerini belirtmek yeterli mi?
Çok az deneyiminiz varsa, o zaman iCustom() işlevini kullanmak veya mantığını bir uzmana aktarmadan önce indükleyicinin ilkesini iyice incelemek ve anlamak daha iyidir.
 

713
15.01.2013 12:10

Bir bilmeceyi çözebilir misiniz: Neden, bu işlevi koşullara eklediğimde || isCloseLastPosByTake() == Doğru || test cihazındaki uzman 10 kez çok yavaşlamaya başladı!? Bu, birbirini dışlayan 4 koşuldan biridir, bu nedenle, özetlenen koşullarda olduğu gibi, kodun daha hızlı çalışmasını sağlamak için if ile zincirleme yapamam. Bana ne tavsiye edebilirsin? tavsiyeniz için şimdiden teşekkürler