KimIV의 유용한 기능 - 페이지 13

 
olyakish :

Igor, 저는 'INI 파일 작업을 위한 기능 라이브러리'에 있습니다. 질문했는데 답이 없네요 :(


감사합니다...답글...

 

ClosePosBySelect() 함수.

하나의 미리 선택된 위치를 닫습니다. 이 함수는 일부 조건에 따라 닫기 위치를 선택하는 데 도움이 되는 여러 다른 함수에서 호출되기 때문에 다소 보조적입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 :

감사합니다...답글...

같은 장소에 있는 또 다른 질문(또는 오히려 진술) :)

 
KimIV :

ClosePosBySelect() 함수.

하나의 미리 선택된 위치를 닫습니다. 이 함수는 일부 조건에 따라 닫기 위치를 선택하는 데 도움이 되는 여러 다른 함수에서 호출되기 때문에 다소 보조적입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 ())) ;
}

안녕하세요!

사과드립니다!

1) for 라인의 의미를 이해할 수 없습니다 ( it = 1 ; it <= NumberOfTry ; it ++ )

이 주기는 무엇입니까?

2) 또한 if (!testing() ......) break;

3) 마지막으로 이 기능은 무엇입니까? 오류 설명 ( 오류 ) , " ,

어렵지 않다면 설명 부탁드립니다.

 

1. 트레이딩 시도의 주기입니다. 거래 서버가 오류를 반환하면 함수는 NumberOfTry 가 어쨌든 포지션을 청산하려고 시도합니다. 나는 보통 NumberOfTry=5 를 설정합니다.

2. 이 조건 은 Expert Advisor의 온라인 작업을 중지 할 때 시도 주기에서 올바른 종료 가능성을 구현합니다. 예를 들어 어드바이저의 속성을 호출하기 위한 이러한 조건이 없으면 어드바이저가 모든 거래 시도를 사용할 때까지 기다리거나 차트에서 해당 어드바이저를 제거해야 했습니다.

3. ..\experts\libraries\stdlib.mq4 파일을 찾습니다.

 

전 물어보고 싶습니다. 또한 조언자가 무한 루프에서 작동하도록 하여 매개변수 설정에 액세스할 수 있도록 하는 방법은 무엇입니까?

나는 처음에 이렇게 썼다.

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

그러나이 경우 고문은 정지하고 차트에서 삭제하지 않고는 아무 것도 할 수 없습니다.

 

발레라, 이렇게 하세요:


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

ClosePosBySizeProfitInCurrency() 함수.

이 기능은 예금 통화의 이익이 특정 지정된 값을 초과한 포지션만 청산합니다. 함수 매개변수를 사용하여 청산할 위치를 지정할 수 있습니다.

  • sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
  • pr - 예금 통화의 이익 수준. 기본값은 0 입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 :

발레라, 이렇게 하세요:


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

아아, 이것은 또한 전문가를 방송하며 차트에서 제거할 때까지 매개변수에 대한 액세스를 허용하지 않습니다.

 
scorpionk :

아아, 이것은 또한 전문가를 방송하며 차트에서 제거할 때까지 매개변수에 대한 액세스를 허용하지 않습니다.

한편, 툴바의 "Expert Advisors" 버튼을 눌러 Expert Advisor를 중지 할 수 있습니다.