KimIV'ten faydalı özellikler - sayfa 13

 
olyakish :

Igor, 'INI dosyalarıyla çalışmak için işlevler kitaplığındayım.' Sana bir soru sordum ama cevap alamadım :(


teşekkür ederim... cevapladım...

 

ClosePosBySelect() işlevi.

Önceden seçilmiş bir konumu kapatır. Bu fonksiyon oldukça yardımcıdır, çünkü bazı koşullara göre kapanma pozisyonlarını seçmeye yardımcı olan diğer birkaç fonksiyondan çağrılır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect () {
   bool    fc ;
   color    clClose ;
   double ll , pa , pb , pp ;
   int      err , it ;

   if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
     for ( it = 1 ; it <= NumberOfTry ; it ++ ) {
       if ( ! IsTesting () && ( ! IsExpertEnabled () || IsStopped ())) break ;
       while ( ! IsTradeAllowed ()) Sleep ( 5000 ) ;
       RefreshRates () ;
       pa = MarketInfo ( OrderSymbol () , MODE_ASK ) ;
       pb = MarketInfo ( OrderSymbol () , MODE_BID ) ;
       if ( OrderType () == OP_BUY ) {
         pp = pb ; clClose = clCloseBuy ;
       } else {
         pp = pa ; clClose = clCloseSell ;
       }
       ll = OrderLots () ;
       fc = OrderClose ( OrderTicket () , ll , pp , Slippage , clClose ) ;
       if ( fc ) {
         if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
       } else {
         err = GetLastError () ;
         if ( err == 146 ) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 ) ;
         Print ( " Error( " , err , " ) Close " , GetNameOP ( OrderType ()) , " " ,
               ErrorDescription ( err ) , " , try " , it ) ;
         Print ( OrderTicket () , "   Ask= " , pa , "   Bid= " , pb , "   pp= " , pp ) ;
         Print ( " sy= " , OrderSymbol () , "   ll= " , ll , "   sl= " , OrderStopLoss () ,
               "   tp= " , OrderTakeProfit () , "   mn= " , OrderMagicNumber ()) ;
         Sleep ( 1000 * 5 ) ;
       }
     }
   } else Print ( " Некорректная торговая операция. Close " , GetNameOP ( OrderType ())) ;
}
 
KimIV :

teşekkür ederim... cevapladım...

Aynı yerde başka bir soru (veya daha doğrusu bir ifade) :)

 
KimIV :

ClosePosBySelect() işlevi.

Önceden seçilmiş bir konumu kapatır. Bu fonksiyon oldukça yardımcıdır, çünkü bazı koşullara göre kapanma pozisyonlarını seçmeye yardımcı olan diğer birkaç fonksiyondan çağrılır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect () {
   bool    fc ;
   color    clClose ;
   double ll , pa , pb , pp ;
   int      err , it ;

   if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
     for ( it = 1 ; it <= NumberOfTry ; it ++ ) {
       if ( ! IsTesting () && ( ! IsExpertEnabled () || IsStopped ())) break ;
       while ( ! IsTradeAllowed ()) Sleep ( 5000 ) ;
       RefreshRates () ;
       pa = MarketInfo ( OrderSymbol () , MODE_ASK ) ;
       pb = MarketInfo ( OrderSymbol () , MODE_BID ) ;
       if ( OrderType () == OP_BUY ) {
         pp = pb ; clClose = clCloseBuy ;
       } else {
         pp = pa ; clClose = clCloseSell ;
       }
       ll = OrderLots () ;
       fc = OrderClose ( OrderTicket () , ll , pp , Slippage , clClose ) ;
       if ( fc ) {
         if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
       } else {
         err = GetLastError () ;
         if ( err == 146 ) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 ) ;
         Print ( " Error( " , err , " ) Close " , GetNameOP ( OrderType ()) , " " ,
               ErrorDescription ( err ) , " , try " , it ) ;
         Print ( OrderTicket () , "   Ask= " , pa , "   Bid= " , pb , "   pp= " , pp ) ;
         Print ( " sy= " , OrderSymbol () , "   ll= " , ll , "   sl= " , OrderStopLoss () ,
               "   tp= " , OrderTakeProfit () , "   mn= " , OrderMagicNumber ()) ;
         Sleep ( 1000 * 5 ) ;
       }
     }
   } else Print ( " Некорректная торговая операция. Close " , GetNameOP ( OrderType ())) ;
}

Merhaba!

Özür dilerim !

1) for satırının anlamını anlayamıyorum ( it = 1 ; it <= NumberOfTry ; it ++ )

bu döngü nedir?

2) ve ayrıca (!testing() ......) break ise koşulunu anlamıyorum;

3) ve son olarak, bu fonksiyon nedir? ErrorDescription ( err ) , " ,

Zor değilse lütfen açıklayın.

 

1. Bu bir ticaret girişimleri döngüsüdür. İşlem sunucusu hata döndürürse, işlev NumberOfTry'ın pozisyonu yine de kapatmaya çalışmasını sağlar. Genellikle NumberOfTry=5 olarak ayarladım.

2. Bu koşul , Expert Advisor'ın çevrimiçi çalışmasını durdururken deneme döngüsünden doğru bir çıkış olasılığını uygular. Örneğin, bir danışmanın özelliklerini aramak için böyle bir koşul olmadan, danışman tüm ticaret girişimlerini kullanana kadar beklemek veya danışmanı tablodan çıkarmak zorunda kaldı.

3. ..\experts\libraries\stdlib.mq4 dosyasına bakın

 

Sormak istiyorum. danışman, parametrelerinin ayarlarına erişmek için sonsuz bir döngüde nasıl çalıştırılır?

Baştan böyle yazdım

 while ( true )
{
   // проверка на останов и прочее
       if ( IsStopped ()) 
         return ( - 1 ) ;
   while ( isRefresh == false )
       isRefresh = RefreshRates () ;
      
   // некий код
   // задержка
   Sleep ( G_Period ) ;   
}

Ancak bu durumda, danışman donar ve grafikten silmeden onunla hiçbir şey yapılamaz.

 

Valera, şunu yap:


 while ( IsExpertEnabled () && ! IsStopped ())
{
   while ( ! RefreshRates ()) Sleep ( 500 ) ;
      
   // некий код
   // задержка
   Sleep ( G_Period ) ;   
}
 

ClosePosBySizeProfitInCurrency() işlevi.

Bu fonksiyon, yalnızca mevduat para birimindeki karı belirli bir değeri aşan pozisyonları kapatır. Fonksiyon parametrelerini kullanarak hangi pozisyonların kapatılacağını belirleyebilirsiniz:

  • 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ü.
  • pr - Mevduat para biriminde kar seviyesi. Varsayılan değer 0'dır .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие тех позиций, у которых профит в валюте депозита       |
//|             превысил некоторое значение                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pr - профит                                                             |
//+----------------------------------------------------------------------------+
void ClosePosBySizeProfitInCurrency ( 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 () > pr ) ClosePosBySelect () ;
           }
         }
       }
     }
   }
}
 
KimIV :

Valera, şunu yap:


 while ( IsExpertEnabled () && ! IsStopped ())
{
   while ( ! RefreshRates ()) Sleep ( 500 ) ;
      
   // некий код
   // задержка
   Sleep ( G_Period ) ;   
}

Ne yazık ki, bu aynı zamanda bir uzman yayınlar ve siz onu grafikten kaldırana kadar parametrelerine erişim sağlamaz.

 
scorpionk :

Ne yazık ki, bu aynı zamanda bir uzman yayınlar ve siz onu grafikten kaldırana kadar parametrelerine erişim sağlamaz.

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