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

 

SetOrder() 함수를 사용하는 더 많은 예.

명확성을 위해 최소 허용 손절매/이익 실현 수준이 포인트로 큰 상품을 선택해야 합니다. 나는 테스트를 위해 선택한 DC의 이 레벨이 10점인 AUDCAD를 선택했습니다.

1. 현재 가격보다 0.15포인트 낮은 가격으로 BuyLimit 주문을 하십시오. 오류 130 (잘못된 중지)이 발생하고 SetOrder 기능이 어떻게 작동하는지 보여주기 위해 최소 허용 수준보다 낮은 주문 배치 수준을 구체적으로 선택했습니다.

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

프로토콜 내용(아래에서 위로 읽음):
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5: 제거됨
2008.03.17 09:06:24 stdlib AUDCAD,M5: 제거됨
2008.03.17 09:06:24 stdlib AUDCAD,M5: 단위 이유 0
2008.03.17 09:06:24 test_SetOrder AUDCAD, M5: 단위 단위 이유 0
2008.03.17 09:06:24 test_SetOrder AUDCAD,M5: 오픈 #21616412 매수 제한 0.10 AUDCAD 0.9180 ok
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5: SetOrder(): 조정된 가격 수준
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5: Ask=0.919 Bid=0.918 sy=AUDCAD ll=0.1 op=구매한도 pp=0.9185 sl=0 tp=0 mn=0
2008.03.17 09:06:15 test_SetOrder AUDCAD,M5: 오류(130) 설정 순서: 잘못된 중지, 시도 1
2008.03.17 09:06:15 stdlib AUDCAD,M5: 성공적으로 로드됨
2008.03.17 09:06:14 test_SetOrder AUDCAD,M5: 성공적으로 로드됨

프로토콜에서 함수가 0.9185(pp=0.9185)에서 주문을 시도했지만 거래 서버가 이러한 주문을 수락하지 않고 오류 130을 반환했음을 알 수 있습니다. 그러면 함수는 다음 순서에 따라 주문 수준을 수정합니다. 최소 허용 수준을 확인하고 다음 거래를 시도하면 잘 끝납니다. 순서는 0.9180으로 설정됩니다.

2. 현재 가격보다 많은 0.3 6핍의 매수스톱 주문을 9핍의 스탑으로 주문하십시오.

SetOrder(NULL, OP_BUYSTOP, 0.3, Ask+6*Point, Ask+(6-9)*Point);

프로토콜 내용(아래에서 위로 읽음):
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5: 제거됨
2008.03.17 09:27:36 stdlib AUDCAD,M5: 제거됨
2008.03.17 09:27:36 stdlib AUDCAD,M5: 단위 단위 이유 0
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5: 단위 단위 이유 0
2008.03.17 09:27:36 test_SetOrder AUDCAD,M5: 오픈 #21617419 매수 스톱 0.30 AUDCAD at 0.9209 sl: 0.9195 ok
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5: SetOrder(): 조정된 가격 수준
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5: Ask=0.9198 Bid=0.9188 sy=AUDCAD ll=0.3 op=매수 정지 pp=0.9204 sl=0.9195 tp=0 mn=0
2008.03.17 09:27:26 test_SetOrder AUDCAD,M5: 오류(130) 설정 순서: 잘못된 중지, 시도 1
2008.03.17 09:27:26 stdlib AUDCAD,M5: 성공적으로 로드됨
2008.03.17 09:27:25 test_SetOrder AUDCAD,M5: 성공적으로 로드됨

이 예는 주문 배치 수준이 0.9204에서 0.9209로 어떻게 변경되었는지 보여줍니다. 동시에 정지 수준은 동일한 sl=0.9195로 유지되었습니다. 즉, 포인트의 스톱이 9에서 14로 증가했습니다.

 

3. 9핍 스탑과 7핍 테이크로 현재 가격보다 많은 0.5 8핍의 SellLimit 주문을 하십시오.

SetOrder(NULL, OP_SELLLIMIT, 0.5, Bid+8*Point, Bid+(8-9)*Point, Bid-(8+7)*Point);

프로토콜 내용:
2008.03.17 10:38:50 test_SetOrder AUDCAD,M5: 제거됨
2008.03.17 10:38:50 stdlib AUDCAD,M5: 제거됨
2008.03.17 10:38:50 stdlib AUDCAD,M5: 단위 단위 이유 0
2008.03.17 10:38:50 test_SetOrder AUDCAD, M5: 단위 단위 이유 0
2008.03.17 10:38:49 test_SetOrder AUDCAD,M5: 오픈 #21620553 매도 한도 0.50 AUDCAD at 0.9190 sl: 0.9201 tp: 0.9179 ok
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5: SetOrder(): 조정된 가격 수준
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5: Ask=0.919 Bid=0.918 sy=AUDCAD ll=0.5 op=판매 한도 pp=0.9188 sl=0.9197 tp=0.9179 mn=
2008.03.17 10:38:40 test_SetOrder AUDCAD,M5: 오류(130) 설정 순서: 잘못된 중지, 시도 1
2008.03.17 10:38:40 stdlib AUDCAD,M5: 성공적으로 로드됨
2008.03.17 10:38:39 test_SetOrder AUDCAD,M5: 성공적으로 로드됨

이 예에서는 시장에 너무 가까운 지정가 주문을 다시 시도합니다. 주문 배치 레벨이 0.9188에서 0.9190으로 2포인트 상향 조정되었습니다. 정지 수준도 조정되었지만 0.9197에서 0.9201로 4포인트 조정되었습니다. 테이크 레벨만 변경되지 않아 점수가 9점에서 11점으로 증가했습니다.

아마도 충분한 예입니다. 그들은 이해하기가 매우 어렵습니다. 어떤 결론을 내릴 수 있습니까?
1. 기능은 할당된 작업을 완료하기 위해 최선을 다할 것입니다. 즉, 순서를 설정하려고 합니다. 변화하는 시장에 맞게 수준을 조정하고 계속해서 제 역할을 하려고 합니다.
2. 스탑 주문 레벨 수정은 설치 가격 대비 스탑 레벨 포인트 상승으로 이어집니다. 이것은 스탑 주문의 스탑 레벨이 그대로 유지되고 주문 레벨이 스탑 레벨에서 멀어진다는 사실로 설명됩니다. BuyStop 주문의 경우 설정 수준이 위로 이동하고 SellStop 주문의 경우 설정 수준이 아래로 이동합니다. 주문 배치 수준을 사용한 이러한 조작은 주문 배치 수준 조정의 양만큼 정지 크기를 포인트 단위로 증가시킵니다.
3. 지정가 주문의 수준을 조정하면 설정 가격에 비해 포인트의 수취 수준이 높아집니다. 이런 식으로 발생합니다. 정지 및 설치 수준은 BuyLimit의 경우 위로 이동하고 SellLimit의 경우 아래로 이동하는 동안 제자리에 유지됩니다. 테이크 인 포인트의 크기는 주문 수준 조정 금액만큼 증가합니다.

주목! SetOrder 함수의 코드를 변경했습니다. 여러 줄을 재정렬했습니다. 기존 글은 더이상 수정이 불가능하여 수정된 기능을 여기에 올립니다. 예고편에는 SetOrder 기능의 온라인 테스트를 위한 스크립트도 포함되어 있습니다.


파일:
 

ModifyOrder 함수의 게시 속도를 높이기 위해 잠시 위치 작업을 위한 함수로 전환한 다음 다시 주문 함수로 돌아가서 마무리하기로 결정했습니다.

메모!
포지션 거래를 OP_BUYOP_SELL이라고 합니다. 포지션이 열리고 닫힙니다.
주문 거래를 OP_BUYLIMIT , OP_BUYSTOP , OP_SELLLIMITOP_SELLSTOP 이라고 합니다. 주문이 이루어지고 제거됩니다. 명령이 작동하면 위치가 됩니다.

ExistPositions() 함수.

미결 매수 또는 매도를 확인하도록 설계되었습니다. ExistOrders 함수와 유사합니다. 기본적으로 모든 위치(현재 및 기타 상품)를 검사합니다. 필터 - 기능 매개변수 조합으로 선택 항목을 지정할 수 있습니다.

  • sy - 도구 이름에 제한을 가합니다. 기본적으로 매개변수는 ""입니다. 제한이 없습니다. 즉, 모든 도구입니다. NULL을 전달하면 위치 선택이 현재 기기로 제한됩니다.
  • op - 포지션 유형을 제한합니다(매수/매도). 기본적으로 제한이 없습니다. 즉, 모든 유형의 위치가 있는지 확인합니다. 유효한 매개변수 값은 -1, OP_BUY 및 OP_SELL입니다.
  • mn - 위치의 식별("매직") 번호에 제한을 둡니다. 기본적으로 제한이 없습니다. 즉, 임의의 매직 번호가 있는 위치가 있는지 확인합니다.
  • ot - 포지션 개시 시간에 제한을 둡니다. 이 매개변수의 값보다 늦게 위치가 열렸는지 확인합니다. 기본적으로 제한이 없습니다. 즉, 개장 시간이 있는 위치가 있는지 확인합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions ( string sy = "" , int op =- 1 , int mn =- 1 , datetime ot = 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 == "" ) {
        if ( OrderType () == OP_BUY || OrderType () == OP_SELL ) {
          if ( op < 0 || OrderType () == op ) {
            if ( mn < 0 || OrderMagicNumber () == mn ) {
              if ( ot <= OrderOpenTime ()) return ( True ) ;
            }
          }
        }
      }
    }
  }
  return ( False ) ;
}
 

ExistPositions() 함수 사용의 예.

1. 모든 직위의 가용성 확인

 ExistPositions () ;

2. 현재 차트의 악기에 어떤 위치가 있는지 확인

 ExistPositions ( NULL ) ;

3. 구매한 악기가 있는지 확인

 ExistPositions ( "" , OP_BUY ) ;

4. EURUSD에서 magic 123456으로 판매 확인

 ExistPositions ( " EURUSD " , OP_SELL , 123456 ) ;

5. 오픈 시간 이 15분 이내인 모든 포지션의 가용성을 확인하십시오.

 ExistPositions ( "" , - 1 , - 1 , TimeCurrent () - 15 * 60 ) ;

예고편에는 ExistPositions 기능을 테스트하기 위한 스크립트가 있습니다. 처음 4개의 예는 주석 처리되어 있습니다.

파일:
 
물론 죄송합니다. 하지만 OrderSet_1도 OrderSet_2도 작동하지 않습니다! 오류 발생 - 컴파일을 원하지 않습니다! 어떻게 할까요???
 
SoloEgoist :
물론 죄송하지만 OrderSet_1도 OrderSet_2도 작동하지 않습니다! 오류 발생 - 컴파일을 원하지 않습니다! 어떻게 할까요???
OrderSet_1 및 OrderSet_2 파일은 OrderSet 함수의 다른 버전에 대한 소스 코드입니다. 소스 코드만 있으면 됩니다. 오류 없이 올바르게 컴파일되거나 실행되지 않습니다. 최소한의 결과를 얻으려면 OrderSet 함수를 사용하는 작업 환경도 만들어야 합니다. test_SetOrder 파일에서 이러한 작업 환경의 예를 만들었습니다.
 
감사합니다. 분명합니다 - 시도해 보겠습니다. 저는 언어를 모릅니다.
 

날짜시간 으로 작업하는 기능과 방법은 유용할 것입니다 ...

예를 들어:
- 현재 시간에서 2시간 빼기
- 만료까지 X일 남았습니다...

또한 관련이 있는지 모르겠습니다 ... :(

통계 기능. 예를 들어:
- 매주 월요일 21:00에 시간당 촛불 몇 개
- 그 중: 215 강세, 245 약세
- 소: 분. 12핍 최대 54핍
- 등...

또는
- 하루의 첫 번째 15H 캔들 중 두 번째 X회 위/아래로 각각 저점

더 중요한 것은 기능 자체가 아니라 그것을 구축하는 방법, 그러면 자신의 것을 구현하는 것이 더 쉽습니다.
프로그래밍을 배우면서...
나는 다시 한 번 불평할 것이다 :))) 때때로 많은 것이 명확하지 않고 C에 관한 책이 도움이 될 것이라고 나타냅니다.
당연히 읽을 수는 있지만 필요합니까 ??? µl4에만 집중하는 불필요한 정보로 머리를 채우십시오.
부정확한 사항은 무엇입니까? 예를 들면 다음과 같습니다. ||

 
kombat :

날짜시간 으로 작업하는 기능과 방법은 유용할 것입니다 ...

예를 들어:
- 현재 시간에서 2시간 빼기
- 만료까지 X일 남았습니다...

...


그런 함수를 작성해서는 안 됩니다. 아주 간단한 해결책이 있습니다!


정수 시간 = 2;
datetime gTwoHours외식 ;


gTwoHoursEat = TimeCorrent() - ((86400)/24) * gHour ); // 2시간
gTwoHoursEat = TimeCorrent() - 7200; // 동일하지만 계산 부하가 없음

즉, 하루에 86400개의 타이머 틱을 얻습니다.

따라서 2시간 = 7200틱이므로 86400/24 * 2 = 7200
1시간 = 3600; 등
 
kombat :

날짜시간 으로 작업하는 기능과 방법은 유용할 것입니다 ...

통계 기능. 예를 들어:
- 매주 월요일 21:00에 시간당 촛불 몇 개
- 그 중: 215 강세, 245 약세
- 소: 분. 12핍 최대 54핍
- 등...

또는
- 하루의 첫 번째 15H 캔들 중 두 번째 X회 위/아래로 각각 저점

더 중요한 것은 기능 자체가 아니라 그것을 구축하는 방법, 그러면 자신의 것을 구현하는 것이 더 쉽습니다.
프로그래밍을 배우면서...

참고하세요... :-)

kombat 은 다음과 같이 썼습니다.
나는 다시 한 번 불평할 것이다 :))) 때때로 많은 것이 명확하지 않고 C에 관한 책이 도움이 될 것이라고 나타냅니다.
당연히 읽을 수는 있지만 필요합니까 ??? µl4에만 집중하는 불필요한 정보로 머리를 채우십시오.
부정확한 사항은 무엇입니까? 예를 들면 다음과 같습니다. ||

이것은 논리적 OR 입니다. 예를 들어 설명하겠습니다. MQL4의 "If x>2 또는 x<-3, then x=5"라는 표현식은 다음과 같습니다.

 if ( х> 2 || х<- 3 ) х= 5 ;
사유: