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 ) ;
  }
}
//+----------------------------------------------------------------------------+
 
실제 거래를 위한 기능이 공개되나요? 추신: 주제에 감사드립니다. 나는 그것이 매우 인기 있고 수요가있을 것이라고 생각합니다.
 
안녕하세요 이고르입니다!
나는 그 생각을 지지한다. 정답은........!!!
귀하의 코드는 방대하고 질문이 자주 발생하며 다른 사람의 게시물 및 기타 주제로 귀하에게 연락하는 것은 어쩐지 좋지 않습니다.
 

놀라운.

개발자에 대한 제안: 함수 라이브러리 구축을 시작하십시오. 제 생각에는 이를 위해 커뮤니티 에 디자인 요구 사항 을 제시하는 것이 바람직합니다(예: 변수에 대한 설명 , 사용 제한, 줄당 문자 수 등이 있어야 함). 이 주제에 대한 MQ-vskuyu 기사가 있으면 좋을 것입니다.

시간이 지남에 따라 단순한 기능뿐만 아니라 복잡한 기능도 라이브러리에 나타납니다.

 
Lukyanov :
실제 거래를 위한 기능이 공개되나요?

예, 그들은... 다음은 온라인 거래를 위한 SetOrder() 함수입니다...


SetOrder() 함수 사용의 예:

1. 현재 가격보다 0.1 50 포인트 낮은 BuyLimit 주문:

 SetOrder ( NULL , OP_BUYLIMIT , 0.1 , Ask - 50 * Point ) ;

2. 현재 가격보다 0.3 36포인트 높은 바이스톱 주문과 32포인트의 스탑:

 SetOrder ( NULL , OP_BUYSTOP , 0.3 , Ask + 36 * Point , Ask + ( 36 - 32 ) * Point ) ;

3. 현재 가격보다 0.2 42핍 많은 SellLimit 주문과 50핍의 매수:

 SetOrder ( NULL , OP_SELLLIMIT , 0.2 , Bid + 42 * Point , 0 , Bid + ( 42 - 50 ) * Point ) ;

4. 스톱 30포인트와 테이크 70포인트로 현재 가격보다 0.5 100포인트 낮은 SellStop 주문:

 SetOrder ( NULL , OP_SELLSTOP , 0.5 , Bid - 100 * Point , Bid - ( 100 - 30 ) * Point , Bid - ( 100 + 70 ) * Point ) ;

5. Magic 123456을 사용하여 현재 가격보다 0.1 50핍 많은 BuyLimit 주문을 하고 2시간 후에 만료 됩니다.

 SetOrder ( NULL , OP_BUYLIMIT , 0.1 , Ask - 50 * Point , 0 , 0 , 123456 , TimeCurrent () + 2 * 60 * 60 ) ;
예고편에는 위의 예와 함께 실제 작업 스크립트가 포함되어 있습니다. 처음 4개의 예는 주석 처리되어 있습니다.
파일:
 
VBAG :
안녕하세요 이고르입니다!
나는 그 생각을 지지한다. 정답은........!!!
귀하의 코드는 방대하고 질문이 자주 발생하며 다른 사람의 게시물 및 기타 주제로 귀하에게 연락하는 것은 어쩐지 좋지 않습니다.
자, 여기에서 채팅할 수 있습니다. 편하게 질문해 주시면 친절히 답변해 드리겠습니다 :-)
 
거래 사이의 지연 버전 표시
고맙습니다.
 
내가 번트 파이에 대해 이야기하고 있지만 유용한 주제에 감사드립니다. 그러나 여전히 누군가는 µl 단위의 큰 데이터 배열을 저장하고 샘플링하는 문제에 직면했을 수 있습니다. MKL과 데이터베이스? 아무도이 방향으로 생각하지 않았습니까?
 
zhuki писал (а):
거래 사이의 지연 버전 표시

나는 거래 사이에 어떤 지연도 만들지 않습니다. 즉, 두 개 이상의 주문을 해야 하는 경우 이러한 거래 작업을 중간에 쉬지 않고 수행합니다. 하지만 반복해야 하는 거래 시도 사이에 서버 접속 시 오류가 발생하면 MT4 개발자의 권고에 따라 일시 중지합니다. 예를 들어, 온라인 거래를 위한 내 SetOrder() 함수에서 이러한 일시 중지가 구현되는 방법을 볼 수 있습니다. 거래 서버에서 반환된 다양한 오류에 대해 다른 일시 중지가 이루어집니다.

SetOrder() 함수는 보류 중인 주문을 설정하기 위한 것입니다. 데모 및 실제 계정의 온라인 거래에 사용하는 것이 좋습니다.

파일:
 
매우 독창적이지만 7.7,17,11초의 지연이 어디에서 오는지 설명하십시오. 농담이거나 정당합니다. 그러나 전문가가 여러 명이라면 분석은 필수 불가결합니다.
 
zhuki :
... 7.7,17,11초의 지연이 어디에서 오는지 설명하십시오. 이것은 농담인가 정당화인가.

진짜 돈으로 무엇을 농담 할 수 있습니까?

7.7초의 일시 중지 동안 오류 129(잘못된 입찰 또는 매도호가), 130(잘못된 정지), 134(돈이 충분하지 않음), 136(가격이 없음)이 발생합니다. MT4 개발자는 이러한 경우 5초 이상의 일시 중지를 권장 합니다. 7.7초를 넣었습니다. 같은 성공으로 6.1초를 넣을 수 있었습니다. 나는 그 매력 때문에 둥근 값을 좋아하지 않으므로 둥근 값이 아닌 값을 넣습니다.

일시 정지 시간 17초 오류 145(수정 금지)로 가정합니다. 그러나 SetOrder 함수는 수정하지 않기 때문에 이 오류의 처리를 제거했습니다. 제 기능의 이 부분을 주목해 주셔서 감사합니다!

11초의 일시 중지는 거래 하위 시스템의 상태를 확인하는 주기 내에 있습니다. 여기에 15초와 30초를 둘 수 있습니다. 원하는 대로.

주키 :
그러나 전문가가 여러 명이라면 분석은 필수 불가결합니다.

하나의 거래 계정에 여러 Expert Advisors가 있는 경우 오류 146(거래 하위 시스템이 사용 중임)이 처리됩니다. SetOrder 함수는 거래 하위 시스템이 해제될 때까지 기다립니다.


주목! 이전글 수정했습니다. SetOrder 함수를 변경했습니다.