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

 

받아 줘서 고맙습니다... ;)

AND, OR, NOT이란?
이해하기 쉽습니다. 관심 있는 코드와 사용 사례 의 이러한 작은 부분입니다.

또는 예를 들면 다음과 같습니다.
- 조건 ab 와 동일하면 a==b를 구현하기가 더 쉽습니다.
- 그러나 조건 ab 와 같지 않음은 이미 어려움을 야기할 것입니다 ...

다시 기초 를 올려서 죄송합니다만, 이것은 아마 많은 초보자들에게 도움이 될 것입니다 ...

전투 훈련 조건으로 자신을 위해 기성품 코드를 찾았습니다. :)
모든 것이 거기에 있습니다 ... 정의 사용 및 필드 배열에서 프로그래머의 "필기"에 이르기까지 ...
https://www.mql5.com/ru/forum/51521

 
kombat писал (а):
- 그러나 조건 ab 와 같지 않음은 이미 어려움을 야기할 것입니다 ...
 a != b ;
 
Igor, 당신은 주제에서 다소 벗어나 설명으로 전환 한 것 같습니다.
가능하다면 작업 표시줄 바로 가기에 무언가를 표시하는 기능을 제안하고 싶습니다.
터미널을 열지 않고 직장에서 고문의 작업을 모니터링하는 데 사용합니다(많은 외부 엿보는 눈).
다른 경우에도 유용할 수 있습니다.

//----------- 작업 표시줄의 시각화 기능 -------------------------------- ------
무효 ProfMT(문자열X)
{
int hwnd1 = WindowHandle(Symbol(), Period());
int hwnd_parent1 = 0;
동안 (! IsStopped() )
{
hwnd1= GetParent(hwnd1);
if (hwnd1 == 0) 휴식;
hwnd_parent1 = hwnd1;
}
if (hwnd_parent1 != 0) SetWindowTextA(hwnd_parent1,X);
}
고맙습니다.
 

Vooot... 포럼이 아니라면 어디서 그렇게 빨리 진실을 알 수 있습니까... ;)

감사해요! 그리고 주제를 벗어나서 죄송합니다.
나는 책의 주제에서 더 많은 초보자 질문을하려고 노력할 것입니다 ...

 

테스터용 OpenPosition() 함수.

시장 가격으로 구매 또는 판매하는 거래 작업을 수행하는 포지션을 열기 위한 것입니다. 이 기능은 보편적인 다중 통화입니다. 즉, 현재 상품뿐만 아니라 모든 상품에서 포지션을 열 수 있습니다. 예를 들어 EURUSD 차트에서 EA를 시작하고 USDCAD를 거래할 수 있습니다.

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

온라인용 OpenPosition() 함수.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , int mn = 0 ) {
  color    clOpen ;
  datetime ot ;
  double   pp , pa , pb ;
  int      dg , err , it , ticket = 0 ;
  string   lsComm = WindowExpertName () + " " + GetNameTF ( Period ()) ;
 
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  if ( op == OP_BUY ) clOpen = clOpenBuy ; else clOpen = clOpenSell ;
  for ( it = 1 ; it <= NumberOfTry ; it ++ ) {
    if ( ! IsTesting () && ( ! IsExpertEnabled () || IsStopped ())) {
      Print ( " OpenPosition(): Остановка работы функции " ) ;
      break ;
    }
    while ( ! IsTradeAllowed ()) Sleep ( 5000 ) ;
    RefreshRates () ;
    dg = MarketInfo ( sy , MODE_DIGITS ) ;
    pa = MarketInfo ( sy , MODE_ASK ) ;
    pb = MarketInfo ( sy , MODE_BID ) ;
    if ( op == OP_BUY ) pp = pa ; else pp = pb ;
    pp = NormalizeDouble ( pp , dg ) ;
    ot = TimeCurrent () ;
    ticket = OrderSend ( sy , op , ll , pp , Slippage , sl , tp , lsComm , mn , 0 , clOpen ) ;
    if ( ticket > 0 ) {
      if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
    } else {
      err = GetLastError () ;
      if ( pa == 0 && pb == 0 ) Message ( " Проверьте в Обзоре рынка наличие символа " + sy ) ;
      // Вывод сообщения об ошибке
      Print ( " Error( " , err , " ) opening position: " , ErrorDescription ( err ) , " , try " , it ) ;
      Print ( " Ask= " , pa , " Bid= " , pb , " sy= " , sy , " ll= " , ll , " op= " , GetNameOP ( op ) ,
            " pp= " , pp , " sl= " , sl , " tp= " , tp , " mn= " , mn ) ;
      // Блокировка работы советника
      if ( err == 2 || err == 64 || err == 65 || err == 133 ) {
        gbDisabled = True ; break ;
      }
      // Длительная пауза
      if ( err == 4 || err == 131 || err == 132 ) {
        Sleep ( 1000 * 300 ) ; break ;
      }
      if ( err == 128 || err == 142 || err == 143 ) {
        Sleep ( 1000 * 66.666 ) ;
        if ( ExistPositions ( sy , op , mn , ot )) {
          if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
        }
      }
      if ( err == 140 || err == 148 || err == 4110 || err == 4111 ) break ;
      if ( err == 141 ) Sleep ( 1000 * 100 ) ;
      if ( err == 145 ) Sleep ( 1000 * 17 ) ;
      if ( err == 146 ) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 ) ;
      if ( err != 135 ) Sleep ( 1000 * 7.7 ) ;
    }
  }
  return ( ticket ) ;
}
 

OpenPosition() 함수 사용의 예.

1. 현재 상품의 0.1랏 구매

 OpenPosition ( NULL , OP_BUY , 0.1 ) ;

2. 0.2랏 판매 EURUSD

 string sy =" EURUSD ";
double pa = MarketInfo ( " EURUSD " , MODE_ASK ) ;
double pb = MarketInfo ( " EURUSD " , MODE_BID ) ;
double po = MarketInfo ( " EURUSD " , MODE_POINT ) ;
OpenPosition ( sy , OP_SELL , 0.2 ) ;

3. 20핍 스탑으로 USDCAD 0.12랏 판매

 string sy =" USDCAD ";
double pa = MarketInfo ( " USDCAD " , MODE_ASK ) ;
double pb = MarketInfo ( " USDCAD " , MODE_BID ) ;
double po = MarketInfo ( " USDCAD " , MODE_POINT ) ;
OpenPosition ( " USDCAD " , OP_SELL , 0.12 , pb + 20 * po ) ;

4. 40포인트로 0.15랏 USDJPY 구매

 string sy =" USDJPY ";
double pa = MarketInfo ( " USDJPY " , MODE_ASK ) ;
double pb = MarketInfo ( " USDJPY " , MODE_BID ) ;
double po = MarketInfo ( " USDJPY " , MODE_POINT ) ;
OpenPosition ( " USDJPY " , OP_BUY , 0.15 , 0 , pa + 40 * po ) ;

5. 스톱 23으로 0.1랏 GBPJPY를 매도하고 44핍을 받습니다.

 string sy =" GBPJPY ";
double pa = MarketInfo ( " GBPJPY " , MODE_ASK ) ;
double pb = MarketInfo ( " GBPJPY " , MODE_BID ) ;
double po = MarketInfo ( " GBPJPY " , MODE_POINT ) ;
OpenPosition ( " GBPJPY " , OP_SELL , 0.1 , pb + 23 * po , pb - 44 * po ) ;
트레일러에는 OpenPosition() 함수를 테스트하기 위한 스크립트가 있습니다. 처음 4개의 예는 주석 처리되어 있습니다.
파일:
 
KimIV :

온라인용 OpenPosition() 함수.

 //+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 21.03.2008 |
//| Описание : Открывает позицию и возвращает её тикет. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента (NULL или "" - текущий символ) |
//| op - операция |
//| ll - лот |
//| sl - уровень стоп |
//| tp - уровень тейк |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
int OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , int mn = 0 ) {
//-- skip --
string lsComm = WindowExpertName () + " " + GetNameTF ( Period ()) ;
//-- skip --
그리고 왜 함수 매개변수에서 lsComm을 빼지 않습니까? 예를 들면 다음과 같습니다.
 int OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , string lsComm = "" , int mn = 0 ) {
color clOpen ;
datetime ot ;
double pp , pa , pb ;
int dg , err , it , ticket = 0 ;

if ( lsComm == "" || lsComm == " 0 " ) lsComm = WindowExpertName () + " " + GetNameTF ( Period ()) ;
if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
IMHO, 기능의 '유연성' 확대…
 
Lukyanov писал (а):
그리고 왜 함수 매개변수에서 lsComm을 빼지 않습니까?
IMHO, 기능의 '유연성' 확대…
상관없어요... 제 말은, 당신이 할 수 있도록 허용합니다 :-)
 
그는 자신을 위해 그렇게 했습니다. 누군가에게 유용할 수 있습니다. :-)