mql4 언어의 기능, 미묘함 및 작업 방법

 
이 주제 에서는 mql4 언어로 작업하는 문서화되지 않은 방법, 특정 작업을 해결하는 예에 대해 설명합니다. 이 스레드가 토론보다 FAQ에 더 가까운 내용이 되었으면 합니다. 모든 경험 많은 프로그래머를 초대하여 찾은 솔루션과 프로그래밍 기술을 공유합니다. 도움말에 설명되지 않은 가능성의 범위는 특히 환영합니다.
 
자, 먼저 시작하겠습니다.

주문을 마감하기 위해 주문 유형 과 이 유형에 해당하는 가격을 정의할 필요가 없습니다. OrderClosePrice() 가격으로 닫기를 작성하는 것으로 충분합니다.

/********************Script program start function********************/
void OnStart ()
{
   int i, total = OrdersTotal ()- 1 ;
     for (i = total; i >= 0 ; i--)
     {
       if ( OrderType () < OP_SELLSTOP )
       {
         if (! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 100 ))
         printf ( "***********" );
       }
     }
} /********************************************************************/
 

매뉴얼에는 여전히 많은 오류가 있습니다. 예를 들어 SetIndexBuffer() 를 사용하십시오. 도움말에 무슨 문제가 있습니까?

"옵션

인덱스

【인】 표시기 버퍼 번호 . 번호는 0부터 시작합니다. 숫자는 #property indicator_buffers에 선언된 값보다 작아야 합니다." (이 문장은 사실이 아닙니다)

#property indicator_buffers는 표시할 버퍼 수를 지정합니다. 내가 확인하지는 않았지만 도움말이 의미하는 바는 계산에 사용된 버퍼에 SetIndexBuffer()로 번호를 매길 필요가 없다는 것입니다. 그러나 내가 확인한 것은 계산에 사용된 버퍼 에 SetIndexBuffer() 함수를 사용하여 숫자가 주어지면 그 값은 iCustom()을 통해 얻을 수 있다는 것입니다.

 
아무것도 이해하지 못했다
 

개발자가 주제를 방문하기 때문에 "미묘함과 트릭"에 대한 질문이 있습니다.

형식화된 인쇄 예: PrintFormat("Bid=%. 5 f", Bid)

질문: 정밀도가 _Digits에 따라 달라지도록 고정 정밀도(여기서는 5 ) 대신 형식 설명에 조건을 설정할 수 있습니까? PrintFormat("Bid=%s", DoubleToString (Bid, _Digits))과 같은 '전처리'를 피하기 위해

 

MQL4에서는 #property strict 상태에 따라 동일한 코드가 다른 결과를 생성할 수 있습니다. 그리고 이것은 두 경우 모두 성공적인 컴파일입니다. 따라서 실행이 "망상"인 경우 엉뚱한 곳에서 이유를 오랫동안 찾을 수 있습니다(엄격).

 
Alexander Puzanov :

질문: 정밀도가 _Digits에 따라 달라지도록 고정 정밀도(여기서는 5 ) 대신 형식 설명에 조건을 설정할 수 있습니까?

아니요 , 예가 있습니다 https://www.mql5.com/en/docs/common/printformat
Документация по MQL5: Общие функции / PrintFormat
Документация по MQL5: Общие функции / PrintFormat
  • www.mql5.com
Общие функции / PrintFormat - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Описание проблемы

MQL4에서 지표를 작성 중입니다. DRAW_HISTOGRAM 스타일의 문서화되지 않은 기능을 발견했습니다.

그래프에 값을 표시하려면 히스토그램의 상위 값과 하위 값의 두 가지 버퍼가 필요합니다. 배열의 표시기 버퍼에 매핑될 때 스타일에 대한 버퍼가 0과 1, 2와 3, 4와 5 등일 경우. 모든 것이 정상적으로 표시됩니다. 그러나 스타일 버퍼에 ODD로 시작하는 값이 할당되면, 즉 1과 2, 3과 4, 5와 6의 경우 데이터 창의 값은 정확하지만 히스토그램 선은 그래프에 올바르게 표시되지 않습니다.

이 기능에 대한 언급을 문서에 추가하거나 수정하십시오. DRAW_HISTOGRAM 스타일의 설명이 짝수 버퍼로 시작되는 경우가 항상 발생하는 것은 아니기 때문입니다!

SD에서.
 

지표가 처음 호출 될 때 모든 데이터가 다시 계산됩니다.


 
Alexey Viktorov :
주문을 마감하기 위해 주문 유형 과 이 유형에 해당하는 가격을 정의할 필요가 없습니다. OrderClosePrice() 가격으로 닫기를 작성하는 것으로 충분합니다.

따라서 해당 OrderSelect 직후에만 OrderClosePrice를 사용할 수 있습니다. 왜냐하면 OrderSelect는 Order(const) 함수에 대한 데이터를 한 번 복사하고 동일한 RefreshRates는 업데이트할 수 없습니다.

저것들. 예를 들어 OrderClosePrice로 닫을 수 없는 경우 다음 시도 전에 OrderSelect를 다시 만들어야 합니다(RefreshRates는 필요하지 않음).

위협 이것은 이미 2005년에 나온 주제입니다! 다음은 개발자의 자세한 주장입니다.

 

불쌍해..

---

이 게시물이 쓸모없게 되지 않게 하려면:

StringGetCharacter("a", 0) 대신 'a' 를 쓸 수 있습니다. 종종 StringSplit을 사용하여 문자열을 부분으로 구문 분석할 때 필요합니다.