이제 나는 무언가를 이해하지 못합니다. 지표에서 다른 기간의 고점과 저점을 갖기 위해 2 개의 버퍼를 만들어야합니까?????
그리고 기사에서
함수가 잘못 작동하는 이유, 예를 들어
//+------------------------------------------------------------------+
//| 주어진 막대 번호에 대해 높음 가져 오기|
//+------------------------------------------------------------------+
doubleiHigh(stringsymbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
intcopied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
"잘못"이란 무엇을 의미하나요? "모든 것이 나쁘다"라는 일반적인 진술 대신 구체적인 예를 제시해야 합니다.
CopyHigh() 섹션에서 예제를 실행해 보세요:
//+------------------------------------------------------------------+
//|HighAndLow.mq5 |
//| 저작권 2009, MetaQuotes Software Corp.
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
#property description "High[i] 및 Low[i] 값 출력 예시"
#property description "무작위로 선택된 바의 경우".
double High[],Low[];
//+------------------------------------------------------------------+
//|| 주어진 바 번호에 대해 낮은 값 가져오기 |||
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double low=0;
ArraySetAsSeries(Low,true);
int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
return(low);
}
//+------------------------------------------------------------------+
//| 주어진 바 번호에 대해 높이 올리기 |
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
double high=0;
ArraySetAsSeries(High,true);
int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High);
if(copied>0 && index<copied) high=High[index];
return(high);
}
//+------------------------------------------------------------------+
//| 전문가 틱 기능|
//+------------------------------------------------------------------+
void OnTick()
{
//--- 각 틱에 인덱스가 있는 막대의 높음 및 낮음 값을 표시합니다,
//--- 틱 도착의 초와 같습니다.
datetime t=TimeCurrent();
int sec=t%60;
printf("High[%d] =%G Low[%d] =%G",
sec,iHigh(Symbol(),0,sec),
sec,iLow(Symbol(),0,sec));
}
//+------------------------------------------------------------------+
이것이 제가 얻은 결과입니다. 모든 것이 올바르게 표시됩니다.
"잘못"이란 무엇을 의미하나요? "모든 것이 나쁘다"라는 일반적인 진술 대신 구체적인 예를 제시해야 합니다.
CopyHigh() 섹션에서 예제를 실행해 보세요:
이것이 제가 얻은 결과이며 모든 것이 올바르게 표시됩니다.
주장이 구체적이지 않은 점에 대해 사과드립니다.
함수가 작성되면 다른 매개 변수에서 작동한다는 것을 암시하는 것 같습니다. 그렇지 않으면 의미가 없습니다.
TimeFrame 매개 변수를 추가해 보겠습니다. 그리고 현재 매개변수와 같은 다른 매개변수(예: 일봉 차트에서 PERIOD_D1로 설정)로 프로그램을 테스트해 봅시다.
//+------------------------------------------------------------------+ //|HighAndLow.mq5 | //| 저작권 2009, MetaQuotes Software Corp. //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property description "High[i] 및 Low[i] 값 출력 예시" #property description "무작위로 선택된 바의 경우". double High[],Low[]; input ENUM_TIMEFRAMES TimeFrame; //+------------------------------------------------------------------+ //|| 주어진 바 번호에 대해 낮은 값 가져오기 ||| //+------------------------------------------------------------------+ double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double low=0; ArraySetAsSeries(Low,true); int copied=CopyLow(symbol,timeframe,0,Bars(symbol,timeframe),Low); if(copied>0 && index<copied) low=Low[index]; return(low); } //+------------------------------------------------------------------+ //| 주어진 바 번호에 대해 높이 올리기 | //+------------------------------------------------------------------+ double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) { double high=0; ArraySetAsSeries(High,true); int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); if(copied>0 && index<copied) high=High[index]; return(high); } //+------------------------------------------------------------------+ //| 전문가 틱 기능| //+------------------------------------------------------------------+ void OnTick() { //--- 각 틱에 인덱스가 있는 막대의 높음 및 낮음 값을 표시합니다, //--- 틱 도착의 초와 같습니다. datetime t=TimeCurrent(); int sec=t%60; printf("High[%d] =%G Low[%d] =%G", sec,iHigh(Symbol(),TimeFrame,sec), sec,iLow(Symbol(),TimeFrame,sec)); } //+------------------------------------------------------------------+
주장이 구체적이지 않은 점에 대해 사과드립니다.
함수를 작성하면 다른 매개 변수에서 작동한다는 것을 암시하는 것 같습니다. 그렇지 않으면 의미가 없습니다.
TimeFrame 매개 변수를 추가해 보겠습니다. 그리고 현재 매개 변수와 같은 다른 매개 변수, 예를 들어 일별 차트에서 PERIOD_D1로 설정하여 프로그램을 테스트해 보겠습니다.
귀하의 변형을 확인했습니다. 그것도 올바르게 작동합니다. 매개 변수 H1 및 D1을 사용하여 D1 주기에 스크립트로 실행했습니다. 값은 정확했습니다(마지막 세 개의 막대를 확인했습니다).
귀하의 변형을 확인했는데 제대로 작동합니다. 매개 변수 H1 및 D1을 사용하여 D1 차트주기에서 스크립트로 실행했습니다. 값은 정확했습니다(마지막 세 개의 막대를 확인했습니다).
방금 배우기 시작했습니다. 다운로드하여 D:/\MetaTrader 5/ MQL5/ Indicators 폴더에 넣었습니다.
컴파일하고 차트에 넣었는데 일부 지표는 아무것도 표시되지 않습니다 ((.
원래 이래야 하는 건가요? 아니면 제가 뭔가 잘못한 건가요?
지표 CrossMa.mq5, Toned_WPR.mq5 및 HistogramSample.mq5가 표시되지 않습니다.
다른 것들은 작동합니다.
"잘못"이란 무엇을 의미하나요? "모든 것이 나쁘다"라는 일반적인 진술 대신 구체적인 예를 제시해야 합니다.
CopyHigh() 섹션에서 예제를 실행해 보세요:
이것이 제가 얻은 결과입니다. 모든 것이 올바르게 표시됩니다.
전체 데이터 배열을 복사합니까???
하나의 요소를 복사하는 것은 매우 비경제적이라고 생각합니다.
Prival:
원래 이렇게 해야 하나요? 아니면 제가 뭔가 잘못한 건가요?
안녕하세요, 세르게이. 이 글은 첫 번째 공개 빌드를 위해 급하게 작성된 글입니다. 그 이후로 많은 변화가 있었으며 일부 지표를 개선해야 할 수도 있습니다.
시간이 되는 대로 수정하겠습니다.

- 2010.02.25
- MetaQuotes Software Corp.
- www.mql5.com
이 문제를 해결하기 위해 INDICATOR_DATA로 플래그가 지정된 버퍼 하나만 정의하고 다른 모든 버퍼를 INDICATOR_CALCULATIONS로 이동하면 CopyBuffer/GetData가 올바른 복사된 항목을 대상 배열로 반환할 수 있습니다.
새로운 기고글 새로운 기능: MQL5의 커스텀 인디케이터 가 게재되었습니다:
메타트레이더5와 MQL5의 새로운 기능 전체를 나열하지는 않겠습니다. 종류도 많은 데다가, 별도의 설명이 필요한 기능들도 있거든요. 객체 지향 프로그래밍을 이용한 코드 작성법 또한 다음에 알아보도록 하겠습니다. 다른 기능들과 함께 설명하기에는 조금 어려운 이야기일 수 있으니까요. 이 글에서는 인디케이터와 인디케이터의 구조, 드로잉 타입과 프로그래밍 디테일을 MQL4와 비교해 볼게요. 초보자 분들께 많은 도움이 되면 좋겠고 기존에 사용하시던 개발자 분들도 뭔가 새로운 걸 얻어 가실 수 있길 바랍니다.
다음은 최대 개수의 컬러를 이용한 톤 시각화의 예입니다.
전반적으로 그릴 수 있는 게 많아졌어요. 정말 좋죠.
작성자: TheXpert