MQL uzmanları için soru - sayfa 10

 
FAQ :
Bir emri açın, açılıp açılmadığını kontrol edin, eğer açıldıysa - ikincisini bir çekle açın...

Teşekkür ederim, anladım, sadece gri maddeyi biraz hareket ettirmek zorunda kaldım))) duruma göre farklı açılan 2 fonksiyon yazdım her birinin sonunda bir çek yapıştıracağım (sanırım bir şeklinde ayrı fonksiyon) hangi emirlerin ve kaç tanesinin açık olduğu ve hangilerinin yeterli olmayacağı yeniden açılacaktır.

leonid553 Selamlar! Spreadler üzerine konunuzu başarılı bir şekilde uyguladım, para birimleri ile ilgili olarak tekrar teşekkür etmek istiyorum. (offtopik için üzgünüm)

 

Günaydın.

Bir problem vardı. Belirli bir enstrümanın "kümülatif" konumunun boyutunu döndüren bir işlev bulamıyorum! Dahil olmak üzere tüm forum aramasını kürekledim. ve I.KIMA şubesi, https://www.mql5.com/en/forum/131859 - var - ihtiyacım olanın dışında çok farklı işlevler var!

Örneğin, euro cinsinden birkaç "satın alma" anlaşması varsa, bunların toplam boyutunu nasıl belirleyeceğimi söyleyin?

GetLot (EURUSD, OP_BUY, büyü)

 double GetLot( string sy= "" , int op=- 1 , int mn=- 1 ) {// возвращает сувокупный размер поз.
   double    l=- 1 ;
   int       i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return (l);
}
 

Soru kaldırıldı! Bulunan işlev:

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double l= 0 ;
   int     i, k= OrdersTotal ();
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
              l+= OrderLots ();
            }
          }
        }
      }
    }
  }
   return (l);
}
 
Öyle değil)
 

Nasıl olmaz? Peki bu f-I ne döndürür?

"Birçok açık pozisyonun miktarını döndürür" - yazılmamış mı?

https://www.mql5.com/ru/code/9394

 
Rita :

"Birçok açık pozisyonun miktarını döndürür" - yazılmamış mı?

Her şey doğru. Bu asla pozisyonun toplam hacmi değildir. Kilidi açıp kontrol edebilirsiniz.
 

Lok'u düşünmeme gerek yok. Daha doğrusu, işte nasıl:

Buna ihtiyacım var. Birkaç açık sat ve al pozisyonu varsa, sadece bir yön kalması için zıt (telafi edici) pozisyonları kaldırmam gerekiyor.

İlk önce tüm "satın almaların" toplamını, ardından tüm X "köylerin" toplamını hesaplamak istedim. Bundan sonra, farkı bulun (yani, toplam boyutu daha büyük olan). Ve bu "farkı" piyasada bırakın - ve tüm sayaçları kaldırın!

Yani bu GetAmountLotFromOpenPos işlevi burada uygun değil mi? mesela ben sorarsam

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-Bütün satış pozisyonlarının toplamını bana geri vermeyecek mi?

 
Rita :

-Bütün satış pozisyonlarının toplamını bana geri vermeyecek mi?

Üzgünüm, eğer öyleyse, sorun değil. Pazartesi. Kafa henüz tam olarak açılmadı :)
 
Rita :

Lok'u düşünmeme gerek yok. Daha doğrusu, işte nasıl:

Buna ihtiyacım var. Birkaç açık sat ve al pozisyonu varsa, sadece bir yön kalması için zıt (telafi edici) pozisyonları kaldırmam gerekiyor.

Önce tüm "satın almaların" toplamını, ardından tüm X "köylerin" toplamını hesaplamak istedim. Bundan sonra, farkı bulun (yani, toplam boyutu daha büyük olan). Ve bu "farkı" piyasada bırakın - ve tüm sayaçları kaldırın!

Yani bu GetAmountLotFromOpenPos işlevi burada uygun değil mi? mesela ben sorarsam

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-Bütün satış pozisyonlarının toplamını bana geri vermeyecek mi?

Genel olarak:

SummLot = GetAmountLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmountLotFromOpenPos("0", OP_SELL, MagicNumber);

 
Evet, bunu "temiz" bir denge elde etmek için yaptım.