기고글 토론 "MQL5 소개: 간단한 전문가 자문 및 사용자 지정 지표 작성 방법"

 

새로운 기고글 MQL5 소개: 간단한 전문가 자문 및 사용자 지정 지표 작성 방법 가 게재되었습니다:

MetaTrader 5 클라이언트 터미널에 포함된 MQL5(MetaQuotes Programming Language 5)는 MQL4에 비해 많은 새로운 가능성과 더 높은 성능을 가지고 있다. 이 글은 당신이 이 새로운 프로그래밍 언어에 익숙해지도록 도와줄 것이다. 이 문서에는 전문가 자문 및 사용자 지정 지표 작성 방법의 간단한 예가 나와 있습니다. 저희는 또한 이러한 예를 이해하는 데 필요한 MQL5 언어의 몇 가지 세부 사항을 고려할 것이다.

작성자: Denis Zyatkevich

 
MACD 또는 사용자 지정 이동 평균과 같은 인디케이터에 대한 디버거를 시작할 수 없습니다. F5 키를 누르면 "컴파일" 버튼이 "취소" 버튼으로 바뀌고 잠시 후 화면이 깜박이며 모든 것이 초기 상태로 돌아갑니다. "디버그" 탭이 나타나지 않습니다. "AccountInfo" 스크립트를 디버깅하는 경우 디버거가 정상적으로 작동합니다(빌드 257).
 
현재 지표 디버깅은 구현되어 있지 않습니다.
 

승리의 날을 축하합니다!

조언을 부탁합니다.

전문가 어드바이저에는 모든 오픈 포지션을 번갈아 검색하는 사이클이 있습니다. 이 주기에는 PositionGetDouble(POSITION_SL) 함수가 사용됩니다. 포지션_SL 매개변수 설명에 따르면 이 함수는오픈 포지션의 스톱로스 레벨을 가져오는 데 사용할 수 있습니다.

질문 1: 스톱로스 레벨이 다른 여러 개의 지정가 주문을 트리거한 결과 오픈 포지션이 형성된 경우 PositionGetDouble(POSITION_SL) 함수에 어떤 값이 표시되나요?

질문 2: 서로 다른 스톱로스 레벨을 가진 여러 대기 주문을 트리거한 결과 오픈 포지션이 형성된 경우, 이러한 스톱로스 레벨에 대한 데이터를 얻는 가장 좋은 방법은 무엇인가요?

이 주제에 대해 이전에 논의한 적이 있다면 링크를 제공해 주세요.

Документация по MQL5: Торговые функции / PositionGetDouble
Документация по MQL5: Торговые функции / PositionGetDouble
  • www.mql5.com
Торговые функции / PositionGetDouble - Документация по MQL5
 
Yedelkin:

해피 빅토리 데이!

질문 1: 스톱로스 레벨이 다른 여러 개의 지정가 주문을 트리거한 결과 오픈 포지션이 형성된 경우 PositionGetDouble(POSITION_SL) 함수에 어떤 값이 표시되나요?
함수가 반환하는 값을 확인하셨나요?
 
sergeev:
함수가 무엇을 반환하는지 확인하셨나요?

아니요, 아직 확인하지 못했습니다. 특정 함수를 확인(테스트)할 때 준수해야 하는 중요한 초기 조건을 모두 알지 못하기 때문입니다. 또한 처음 접하는 프로그래밍 언어를 배울 때 과학적 찌르기 방법을 사용할 가능성에 대한 부정적인 태도 때문이기도 합니다.

설명. 전문가 고문 전용 기사가 매우 적고 MQL5에 대한 교과서가 없기 때문에 일반 사용자는 자신의 거래 전략을 구현할 때이 (매우 유용한) 기사를 포함하여 웹에서 사용할 수있는 자료에 의존해야합니다.

잘 아시다시피, 제가 질문한 내용은 현재 버전의 MQL5 참조 가이드와 MQL5 전문가 자문에서 제공되는 기사에는 반영되지 않은 이론 및 응용 측면에 관한 것입니다.

이러한 상황에서는 특정 조건에서 "함수가 무엇을 반환하는지 확인"하는 실험이나 이와 유사한 아마추어적인 방법보다는 지식이 풍부한 사람들(언어 개발자 및 문서 작성자)에게 MQL5 함수의 특정 이론적 적용 측면에 대해 질문하는 것이 훨씬 더 합리적이라고 생각합니다.

"함수가 무엇을 반환하는지 확인했는가"와 같은 반문보다 "무엇이 되어야 하는가"에 대한 지식이 풍부한 사람들의 답변이 (함수의 기능적 특성에 대한 이해가 없는 상황에서) 더 적합하다는 데 동의합니다.

 

답을 찾았습니다. 클라이언트 터미널 사용 안내서에서:

...Уровни Тейк Профит и Стоп Лосс устанавливаются для позиции по последнему ордеру (рыночному или сработавшему отложенному).
Иными словами, стоп уровни в каждом последующем ордере по одной позиции заменяют предыдущие. 
...Срабатывание ордеров Тейк профит и Стоп Лосс приводит к полному закрытию позиции.  

이상합니다. 각 금융 상품에 대해 하나의 오픈 포지션 만 가능하기 때문에 손절매로 포지션을 부분적으로 청산하는 시나리오는 원칙적으로 구현할 수 없다는 것이 밝혀 졌습니까?

추신: MT5에 내재된 이러한 특성을 파악한 후, 손절매 수준이 다른 여러 대기 주문을 트리거한 결과 오픈 포지션이 형성된 경우 PositionGetDouble(POSITION_SL) 함수에서 반환되는 값을 확인할 필요가 없습니다.

 
Yedelkin:

답을 찾았습니다. 클라이언트 터미널의 사용 설명서에서 확인하세요:

이상합니다. 각 금융상품에 대해 하나의 오픈 포지션만 가능하기 때문에 손절매로 포지션을 부분 청산하는 시나리오는 원칙적으로 구현할 수 없다는 건가요?

추신 MT5에 내재 된이 특성을 찾은 후에는 손절매 수준이 다른 여러 보류중인 주문을 트리거 한 결과 오픈 포지션이 형성된 경우 PositionGetDouble (POSITION_SL) 함수가 반환하는 값을 확인할 필요가 없습니다.

주어진 상품의 거래량에 따라 테이크프로핏을 레벨별로 보류 주문으로 분할하는 "izpodvypodvert vypert podvypert" 함수의 형태로 만들 수 있습니다.

하지만 개인적으로는 잠금 기능이 없는 공식 거래 터미널에 익숙하기 때문에 이 기능은 필요하지 않다고 생각합니다.

 
CoreWinTT:

함수로 만들 수 있습니다 "from-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub-sub" ...

예, 저는 이미이 주제에 대해 머리를 긁었습니다. 세 가지 옵션이 있습니다 :)

- MT5의 특성에 맞게 기존 시나리오를 창의적으로 재 작업하는 것입니다;

- 또는 서브-서브-서브-서브-서브-서브-서브-서브 함수의 클래스를 만들거나;

- 또는 주문에서 손절 및 이익실현을 사용하지 않고 처음에는 반대 방향의 주문 묶음으로 작동합니다.

걱정 마세요, 잘 극복할 겁니다! :)

 

전문가 어드바이저에서 ArraySetAsSeries 함수의 배치에 관한 질문입니다.

ArraySetAsSeries 함수는 복사 시간, 복사 높음, 복사 낮음 함수 바로 뒤에 OnTick() 함수에 배치되어 있습니다.

배열을 복사한 후에만 인덱싱해야 하는지, 아니면 배열을 복사한 후에만 인덱싱해야 하는지, OnInit() 함수에 ArraySetAsSeries 함수를 배치하는 데 장애물이 있나요?

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
Операции с массивами / ArraySetAsSeries - Документация по MQL5
 
Yedelkin:

EA에 ArraySetAsSeries 함수를 배치하는 것에 대한 질문입니다.

ArraySetAsSeries 함수는 복사 시간, 복사 높음 및 복사 낮음 함수 바로 뒤에 OnTick() 함수에 배치됩니다.

배열을 복사한 후에만 인덱싱해야 하나요, 아니면 배열을 복사한 후에만 인덱싱해야 하나요, 아니면 OnInit() 함수에 ArraySetAsSeries 함수를 배치하는 데 장애물이 있나요?

인디케이터 버퍼의 경우 SetIndexBuffer라고 나와 있습니다:

참고

연결 후 동적 배열 버퍼[] 는 연결되는 배열이 시계열에서처럼 색인되도록 미리 설정되어 있더라도 일반 배열과 마찬가지로 색인됩니다. 인디케이터 배열의 요소에 대한 접근 순서를 변경해야 하는 경우 SetIndexBuffer() 함수로 배열을 바인딩한 후 ArraySetAsSeries() 함수를 적용해야 합니다.

전문가 어드바이저도 비슷해야 합니다.