KimIV'ten faydalı özellikler - sayfa 14

 
KimIV :

Öte yandan, araç çubuğundaki "Uzman Danışmanlar" düğmesine basarak Expert Advisor'ı durdurmayı mümkün kılar.

Prensip olarak, bir seçenek olarak, sanırım, teşekkürler. danışmandan ayrılmak için çok fazla parametre yok, zor olmayacak

 

ClosePosBySizeProfitInCurrency() işlevini kullanma örneği

Özellikle ClosePosBySizeProfitInCurrency() işlevinin çalışmasını göstermek için bir Uzman Danışman yazdım
e-CloseByProfitPosInCurrency , yalnızca mevduat para birimindeki karı belirli bir değeri aşan pozisyonları kapatan . Expert Advisor hem tek bir çizelgeye hem de birkaç çizelgeye kurulabilir. Danışmanın harici parametrelerini kullanarak kapatılan pozisyonların listesini belirleyebilirsiniz:

  • sembol ="0" - Ticaret aracı. Aşağıdaki değerlere izin verilir: "0" - herhangi bir alım satım aracı, "" - yalnızca mevcut enstrüman ve piyasa saatinden herhangi bir değer (EURUSD, GBPUSD, vb.).
  • İşlem =-1 - Ticaret işlemi. Geçerli değerler: -1 - herhangi bir ticari işlem, 0 - OP_BUY, 1 - OP_SELL.
  • Kar =50 - Mevduat para biriminde kar.
  • MagicNumber =0 - Konum Kimliği.
 

Hepinize iyi günler.

Igor, belirli bir kayba ulaşıldığında, ClosePosBySizeProfitInCurrency() işlevine benzer şekilde kârsız pozisyonları kapatan bir işlevin var mı? (Ya da belki, kâr ve zararın kapanışını ayarlayabileceğiniz birleşik.)

Anladığım kadarıyla, OrderProfit () için pr parametrelerini eksi işaretiyle ayarlayabilirsiniz ve aradığımız şeyi elde ederiz.

Ancak puan cinsinden (ve mevduat para biriminde değil) eşiği belirlemek mümkün müdür? Evet ise, nasıl? (kar al ve zararı durdur teklif etmeyin)

 
rid писал (а):
Igor, belirli bir kayba ulaşıldığında, ClosePosBySizeProfitInCurrency() işlevine benzer şekilde kârsız pozisyonları kapatan bir işlevin var mı? (Ya da belki birleştirilmiş, burada kâr ve zararı kapatabilirsiniz.)

Hayır, henüz bu özelliğe sahip değilim. Ancak, ClosePosBySizeProfitInCurrency() öğesini yeniden oluşturabilirsiniz:


 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.04.2008                                                     |
//|  Описание : Закрытие тех позиций, у которых убыток в валюте депозита       |
//|             превысил некоторое значение                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pr - профит/убыток                                                      |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency ( string sy = "" , int op =- 1 , int mn =- 1 , double pr = 0 ) {
   int i , k = OrdersTotal () ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = k - 1 ; i >= 0 ; i -- ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || OrderType () == op )) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( mn < 0 || OrderMagicNumber () == mn ) {
             if ( OrderProfit () + OrderSwap () <- MathAbs ( pr )) ClosePosBySelect () ;
           }
         }
       }
     }
   }
}

Kaybın pozitif (kayıp) ve negatif (eksi işaretli kazanç) sayı olarak aktarılabilmesi için yaptım.

kurtulmak yazdı:
Anladığım kadarıyla, OrderProfit () için pr parametrelerini eksi işaretiyle ayarlayabilirsiniz ve aradığımız şeyi elde ederiz.

Ancak puan cinsinden (ve mevduat para biriminde değil) eşiği belirlemek mümkün müdür? Evet ise, nasıl? (kar al ve zararı durdur teklif etmeyin)

e-CloseByProfit EA koduna bakın.

 
Sayesinde.
 

ClosePositions() işlevi.

Bu işlev, parametreleri belirtilen değerleri karşılayan konumları kapatır:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL, geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY, OP_SELL veya -1. Varsayılan değer -1, herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePositions ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   int i , k = OrdersTotal () ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = k - 1 ; i >= 0 ; i -- ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || OrderType () == op )) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( mn < 0 || OrderMagicNumber () == mn ) ClosePosBySelect () ;
         }
       }
     }
   }
}
 
Lütfen yardım et!!! 4 gündür ilk bakışta basit bir iş için kafa yoruyorum. CCİ değeri 100'ün üzerinde ise kayıt olmak, değer -100'ün altına düşene kadar alış pozisyonu açmak , -100'ün altına düştüğünde 100'ün üzerine çıkana kadar satış açmak gerekir.
 

ClosePosFirstProfit() işlevi.

Bu işlev, pozisyonları belirli bir sırayla, yani önce karlı, sonra geri kalan her şeyi kapatır. Daha doğru bir kapalı pozisyon seçimi, harici parametreler tarafından belirlenir:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL, geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY, OP_SELL veya -1. Varsayılan değer -1, herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   int i , k = OrdersTotal () ;
   if ( sy == " 0 " ) sy = Symbol () ;

   // Сначала закрываем прибыльные позиции
   for ( i = k - 1 ; i >= 0 ; i -- ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || OrderType () == op )) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( mn < 0 || OrderMagicNumber () == mn ) {
             if ( OrderProfit () + OrderSwap () > 0 ) ClosePosBySelect () ;
           }
         }
       }
     }
   }
   // Потом все остальные
   k = OrdersTotal () ;
   for ( i = k - 1 ; i >= 0 ; i -- ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || OrderType () == op )) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( mn < 0 || OrderMagicNumber () == mn ) ClosePosBySelect () ;
         }
       }
     }
   }
}
 

ClosePosWithMaxProfitInCurrency() işlevi.

Bu fonksiyon, mevduat para biriminde maksimum pozitif kârla bir pozisyonu kapatır. Yani şu anda her birinin karı -34, 15, 73, -90, 41 olan beş pozisyondan mevduat para biriminde 73 birim kârlı bir pozisyon kapatılacaktır. Daha doğru bir kapalı pozisyon seçimi, harici parametreler tarafından belirlenir:

  • sy - Araç adı. Bu parametreyi ayarlarsanız, fonksiyon sadece belirtilen enstrümanın pozisyonlarını kontrol edecektir. NULL, geçerli araç anlamına gelir ve "" (varsayılan) herhangi bir araç anlamına gelir.
  • op - Ticaret işlemi , pozisyon türü. Geçerli değerler: OP_BUY, OP_SELL veya -1. Varsayılan değer -1, herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği (MagicNumber). Varsayılan değer -1 - herhangi bir büyü.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие одной позиции с максимальным положительным профитом   |
//|             в валюте депозита                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosWithMaxProfitInCurrency ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   double pr = 0 ;
   int      i , k = OrdersTotal () , np =- 1 ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = k - 1 ; i >= 0 ; i -- ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || OrderType () == op )) {
         if ( mn < 0 || OrderMagicNumber () == mn ) {
           if ( pr < OrderProfit () + OrderSwap ()) {
             pr = OrderProfit () + OrderSwap () ;
             np = i ;
           }
         }
       }
     }
   }
   if ( np >= 0 ) {
     if ( OrderSelect ( np , SELECT_BY_POS , MODE_TRADES )) {
       ClosePosBySelect () ;
     }
   }
}
 
B_Dima :
CCİ değeri 100'ün üzerindeyse, değer -100'ün altına düşene kadar alış pozisyonu, -100'ün altına düştüğünde ise 100'ün üzerine çıkana kadar satış pozisyonu açın.

Dima, sana şu işlevi sunabilirim:

 int CCI_period = 14 ;
int Applied_Price = PRICE_CLOSE ;

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.24.2008                                                     |
//|  Описание : Возвращает торговый сигнал:                                    |
//|              1 - покупай                                                   |
//|              0 - сиди, кури бамбук                                         |
//|             -1 - продавай                                                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    nb - номер бара                 (    0       - текущий номер бара)      |
//+----------------------------------------------------------------------------+
int GetTradeSignal ( string sy = "" , int tf = 0 , int nb = 0 ) {
   if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
   double cci0 = iCCI ( sy , tf , CCI_period , Applied_Price , nb ) ;
   double cci1 = iCCI ( sy , tf , CCI_period , Applied_Price , nb + 1 ) ;
   int bs = 0 ;

   if ( cci1 <=+ 100 && cci0 >+ 100 ) bs =+ 1 ;
   if ( cci1 >=- 100 && cci0 <- 100 ) bs =- 1 ;

   return ( bs ) ;
}

Bu fonksiyon satın alırken 1, satarken -1 döndürür. Satın alma / satış koşulları isteklerinize karşılık gelir. Şimdi her kene üzerinde aşağıdakileri yapmanız yeterlidir:

1. GetTradeSignal() işlevinin değerini alın.

2. Alınan değer ==0 ise, hiçbir şey yapmayın.

3. Alınan değer >0 ise tüm satışları kapatın ve satın alın.

4. Alınan değer <0 ise, tüm alımları kapatın ve satın.