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

 

GetProfitOpenPosInCurrency() 함수.

이 함수는 현재 열려 있는 포지션의 총 이익을 반환합니다. 이익은 예금 통화 단위로 반환됩니다. 고려할 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в валюте депозита |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetProfitOpenPosInCurrency ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   double p = 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 == "" ) && ( op < 0 || OrderType () == op )) {
         if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
           if ( mn < 0 || OrderMagicNumber () == mn ) {
             p += OrderProfit () + OrderCommission () + OrderSwap () ;
           }
         }
       }
     }
   }
   return ( p ) ;
}
추신. GetProfitOpenPosInCurrency() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
 
KimIV :
전갈 :

131이 아니라 130이 아니라 코드에 실수를 했습니다.

알았습니다...

다음과 같이 정규화를 시도합니다.

 int dg = MarketInfo ( Symbol () , MODE_DIGITS ) ;
return ( NormalizeDouble ( Value , dg )) ;
이 작업을 수행하고 오류 130이 발생하지 않습니다.

따라서 가격을 인용하고 Digits 만 사용 합니다. 그러나 이것은 도움이되지 않습니다. 오류가 항상 나타나는 것은 아니며 일부 경우에만 발생하며 추적되지 않고 의존합니다. 로봇이 설정하려고 하는 값을 수동으로 확인해야 할 것입니다.

 

미래에 마침내 가능한 진전에 비추어, 이 추가는 유용할 것입니다:

 p += OrderProfit () + OrderTaxes () + OrderCommission () + OrderSwap () ;
// !!! OrdertTaxes() мифический парамер налогов !!!
5위 안에 들까...? ;)))

루프에서 데이터 를 합산하는 방법 에 대한 팁에 다시 한 번 감사드립니다 !

 

요모요 , 농담하는 겁니까? 내 컴파일러가 OrderTaxes() 함수를 이해하지 못합니다.

 

틀림없이!!! :)))

이것은 백라이트에서 볼 수 있으며 주석에서 명확하게 표시되었습니다 ...

이것은 주문의 속성 중 하나이지만, 오히려 위치이며 원칙적으로 그러한 기능이 있어야합니다.

-

글쎄, 컴파일러가 이해하지 못하는 것은 ...

그래서 GNI가 가르칠 것입니다;)

 

GetProfitOpenPosInPoint() 함수.

이 함수는 현재 열려 있는 포지션의 총 이익을 반환합니다. 이익은 포인트로 반환됩니다. 고려할 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   double p ;
   int      i , k = OrdersTotal () , pr = 0 ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = 0 ; i < k ; i ++ ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || OrderType () == op )) {
         if ( mn < 0 || OrderMagicNumber () == mn ) {
           p = MarketInfo ( OrderSymbol () , MODE_POINT ) ;
           if ( p == 0 ) if ( StringFind ( OrderSymbol () , " JPY " ) < 0 ) p = 0.0001 ; else p = 0.01 ;
           if ( OrderType () == OP_BUY ) {
             pr += ( MarketInfo ( OrderSymbol () , MODE_BID ) - OrderOpenPrice ()) / p ;
           }
           if ( OrderType () == OP_SELL ) {
             pr += ( OrderOpenPrice () - MarketInfo ( OrderSymbol () , MODE_ASK )) / p ;
           }
         }
       }
     }
   }
   return ( pr ) ;
}
추신. GetProfitOpenPosInPoint() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
 
KimIV :

이 주제에서는 MQL4 프로그래밍 언어로 내 기능의 코드를 게시하고 사용 예를 제공하고 사용과 관련된 질문에 답합니다. 각 기능을 두 개의 게시물에 게시할 것입니다. 첫 번째 포스트에서는 함수 코드, 두 번째 포스트에서는 사용 예시와 간단한 설명을 하고 있습니다. 나는 때때로 결과가 표시된 기능의 실제 테스트를 위해 두 번째 게시물에 스크립트 코드를 첨부할 것입니다.

마지막에 " 두 명의 전문가 고문을 동시에 실행하는 방법 " 주제에서 Lukyanov 의 요청에 따라 주문과 함께 작동하도록 설계된 기능부터 시작하겠습니다.

주문 설정 기능을 첫 번째 기능으로 설정합니다(MT4 테스터용 버전).

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder ( string sy , int op , double ll , double pp ,
              double sl = 0 , double tp = 0 , int mn = 0 , datetime ex = 0 ) {
  color clOpen ;
  int   err , ticket ;
 
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  if ( op == OP_BUYLIMIT || op == OP_BUYSTOP ) clOpen = clOpenBuy ; else clOpen = clOpenSell ;
  ticket = OrderSend ( sy , op , ll , pp , Slippage , sl , tp , "" , mn , ex , clOpen ) ;
  if ( ticket < 0 ) {
    err = GetLastError () ;
    Print ( " Error( " , err , " ) set " , GetNameOP ( op ) , " : " , ErrorDescription ( err )) ;
    Print ( " Ask= " , Ask , " Bid= " , Bid , " sy= " , sy , " ll= " , ll ,
          " pp= " , pp , " sl= " , sl , " tp= " , tp , " mn= " , mn ) ;
  }
}
//+----------------------------------------------------------------------------+

안녕하세요, 조언자 작성을 도와주세요. 나는 이것에 대해 호황을 누리고 있지는 않지만 좋은 생각이라고 생각합니다. 물론 가능하다면 그 생각의 의미는 다음과 같다.
매개변수(lots=0.1____TafeProfit=30______StopLoss=10)가 있는 Sell 하나 Buy와 매개변수가 있는 두 번째 양수(lots=1____TafeProfit=30___StopLoss=10)가 닫힐 때 두 번째 비율이 동시에 개설되어야 합니다. 열리다
그리고 당신, 내 친구가 나를 즉시 엿먹이는 경우 ... 나를 보내지 않으면 이상적으로 두 개의 초기 베팅이 최소 또는 최대 양초에서 또는 새 양초가 나타날 때 열릴 것입니다. 그러나 두 번째 양초를 쓴다면 오랜 시간 동안, 적어도 내 넌센스의 첫 부분을 수행

미리 감사드립니다!!!! 작성하는 경우 여기에 드롭하십시오. vms.80@mail.ru



 

GetTicketLastPos() 함수.

이 함수는 마지막 열린 위치의 티켓 또는 -1을 반환합니다. 고려할 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тикет последней открытой позиции или -1             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTicketLastPos ( string sy = "" , int op =- 1 , int mn =- 1 ) {
   datetime o ;
   int        i , k = OrdersTotal () , r =- 1 ;

   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 ) {
               if ( o < OrderOpenTime ()) {
                 o = OrderOpenTime () ;
                 r = OrderTicket () ;
               }
             }
           }
         }
       }
     }
   }
   return ( r ) ;
}
추신. GetTicketLastPos() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
파일:
 
WoodyVMS :

안녕하세요, 조언자 작성을 도와주세요. 나는 이것에 대해 호황을 누리고 있지는 않지만 좋은 생각이라고 생각합니다. 물론 가능하다면 그 생각의 의미는 다음과 같다.
매개변수(lots=0.1____TafeProfit=30______StopLoss=10)가 있는 Sell 하나 Buy와 매개변수가 있는 두 번째 양수(lots=1____TafeProfit=30___StopLoss=10)가 닫힐 때 두 번째 비율이 동시에 개설되어야 합니다. 열리다
그리고 당신, 내 친구가 나를 즉시 엿먹이는 경우 ... 나를 보내지 않으면 이상적으로 두 개의 초기 베팅이 최소 또는 최대 양초에서 또는 새 양초가 나타날 때 열릴 것입니다. 그러나 두 번째 양초를 쓴다면 오랜 시간 동안, 적어도 내 넌센스의 첫 부분을 수행

미리 감사드립니다!!!! 작성하는 경우 여기에 드롭하십시오. vms.80@mail.ru

또는 CodeBase의 모든 Expert Advisor를 이 주소로 친구에게 보낼 수 있습니다.

죄송합니다 Igor, 그것은 주제를 벗어났습니다. 그렇다면 삭제하겠습니다.

 
Vinin писал (а):
또는 CodeBase의 모든 Expert Advisor를 이 주소로 친구에게 보낼 수 있습니다.
그는 찾을 것입니다 ...