Artyom Trishkin : 템플릿이 완전하지 않습니다. 마법사에서 계산된 데이터가 기록될 표시기 버퍼를 지정하지 않았을 가능성이 큽니다.
그러나 대부분의 지표에 대한 기본 원칙은 다음과 같습니다.
//+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate ( constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[]) { //--- if (rates_total< 1 ) return ( 0 ); // проверка достаточности данных для расчёта индикатора, если не достаточно - выходим // если для расчёта требуются некое количество баров слева от индекса цикла, ... // ... то проверять нужно это количество, а не 1
//--- Действия для полного перерасчёта индикатора int limit=rates_total-prev_calculated; // количество посчитанных уже баров if (limit> 1 ) { // если количество больше 1, значит имеем новые данные, и нужно полностью пересчитать индикатор limit=rates_total- 1 ; // задаём количество требуемых для расчёта баров равным количеству баров в истории, // если для расчёта требуются некое количество баров слева от индекса цикла, ... // ... то это количество тоже нужно вычесть из rates_total чтобы не выйти за пределы массива // так же тут нужно при необходимости произвести инициализацию буферов индикатора }
//--- Основной цикл индикатора for ( int i=limit; i>= 0 ; i--) { // тут выполняем нужные расчёты и записываем их результат в нужные буферы, например: ExtMapBuffer[i]=(open[i]+high[i]+low[i]+close[i])/ 4.0 ; // Выведем на график среднюю цену каждой свечи (OHLC/4.0) }
//--- return value of prev_calculated for next call return (rates_total); } //+------------------------------------------------------------------+
당연히 그럴 것이다. 글쎄, 나는 그것을 "불도저에서" 썼다. 그리고 예제를 작성하기 전에 템플릿에 외부 변수를 설정하지 않았으며(필요하지도 않음) 화면에 표시기 계산 을 표시하기 위한 버퍼를 설정하지 않았다고 말했습니다. 물론 버퍼 출력을 사용하지 않는 표시기가 있지만 귀하의 경우에는 그렇지 않습니다.
그래서 이 버퍼에 직접 입력했습니다. 템플릿을 다시 만들어야 하지만 여전히 이 가장 간단한 작업에 보다 책임감 있게 접근하고 "지표 생성 마법사가 나에게 무엇에 대해 묻고 무엇을 필요로 합니까?"라는 질문을 스스로에게 물어보고 그가 묻는 내용을 읽으십시오. "다음" 버튼만 클릭하지 마세요.
안녕하세요! 약 4개월 전에 Kovalev의 교과서를 사용하여 MQL4를 공부하기 시작했습니다. 게다가 그들은 비디오를 가지고 있습니다. 나는 비디오를보고, 교과서를 공부하고, 거기에 사용되는 코드를 반복합니다. 물론 이론상으로는 많이 배웠지만, 혼자서는 코드를 작성할 수 없습니다. 나는 아이디어가 있고 알고리즘에 대해 알고 있습니다. 꼼꼼히 다 공부해요 혹시 제가 서두르는 걸까요? 나는 이것이 매우 심각한 문제이고 그것을 숙달하는 데 시간이 걸린다는 것을 이해합니다. 하지만 연습이 필요하다는 것을 압니다. 간단한 작업이 필요하고 작성하여 예를 들어 다른 사람이 확인하도록 하면 이동할 수 있습니다! 또 다른 문제는 업데이트가 있기 전에 책과 비디오가 업데이트되었다는 것입니다. 책을 읽은 후에도 코드를 반복하고 컴파일하고 오류가 발생합니다. 새 게이트에서 양처럼 보입니다 ...... 장군, 그런 슬픔!
FOTOGRAF14 : 안녕하세요! 약 4개월 전에 Kovalev의 교과서를 사용하여 MQL4를 공부하기 시작했습니다. 게다가 그들은 비디오를 가지고 있습니다. 나는 비디오를보고, 교과서를 공부하고, 거기에 사용되는 코드를 반복합니다. 물론 이론상으로는 많이 배웠지만, 혼자서는 코드를 작성할 수 없습니다. 나는 아이디어가 있고 알고리즘에 대해 알고 있습니다. 꼼꼼히 다 공부해요 혹시 제가 서두르는 걸까요? 나는 이것이 매우 심각한 문제이고 그것을 숙달하는 데 시간이 걸린다는 것을 이해합니다. 하지만 연습이 필요하다는 것을 압니다. 간단한 작업이 필요하고 작성하여 예를 들어 다른 사람이 확인하도록 하면 이동할 수 있습니다! 또 다른 문제는 업데이트가 있기 전에 책과 비디오가 업데이트되었다는 것입니다. 책을 읽은 후에도 코드를 반복하고 컴파일하고 오류가 발생합니다. 새 게이트에서 양처럼 보입니다 ...... 장군, 그런 슬픔!
문서를 한 번 읽어보십시오. 교과서가 구식입니다. 문서가 도움이 될 것입니다. 작업에 관해서는 - 교과서에 설명 된 것과 동일한 작업을 해결하십시오. 문제를 읽고, 솔루션을 보고, 반복하세요. 그리고 그것이 작동하기 시작할 때까지 계속됩니다. 자신을 구현하는 방법을 배우려는 작업에 가능한 한 가깝게 작업을 수행하는 것이 좋습니다.
문서를 한 번 읽어보십시오. 교과서가 구식입니다. 문서가 도움이 될 것입니다. 작업에 관해서는 - 교과서에 설명 된 것과 동일한 작업을 해결하십시오. 문제를 읽고, 솔루션을 보고, 반복하세요. 그리고 그것이 작동하기 시작할 때까지 계속됩니다. 자신을 구현하는 방법을 배우려는 작업에 가능한 한 가깝게 작업을 수행하는 것이 좋습니다.
현재 가격을 얻는 방법에는 여러 가지가 있습니다.
1. 모든 기호의 경우: 보장된 현재 가격을 얻으려면 사용하기 전에 필요한 식별자와 함께 SymbolInfoDouble() 함수를 호출하십시오 .
2. 현재 기호의 경우 미리 정의된 Bid 및 Ask 변수를 통해 현재 가격을 얻을 수도 있습니다. 그것이 그들이 구식이 될 수있는 방법이므로 OnTick() 함수가 오랫동안 실행되면 RefreshRates()를 사용하여 업데이트해야합니다.
"유형 변환으로 인한 데이터 손실 가능성"
이 경고를 극복하는 방법?
컴파일러 경고:
"유형 변환으로 인한 데이터 손실 가능성"
이 경고를 극복하는 방법?
함수가 반환하는 값의 유형을 정확히 알고 명시적 캐스트를 사용해야 합니다. https://www.mql5.com/ru/docs/basis/types/casting
템플릿이 완전하지 않습니다. 마법사에서 계산된 데이터가 기록될 표시기 버퍼를 지정하지 않았을 가능성이 큽니다.
그러나 대부분의 지표에 대한 기본 원칙은 다음과 같습니다.
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if (rates_total< 1 ) return ( 0 ); // проверка достаточности данных для расчёта индикатора, если не достаточно - выходим
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то проверять нужно это количество, а не 1
//--- Действия для полного перерасчёта индикатора
int limit=rates_total-prev_calculated; // количество посчитанных уже баров
if (limit> 1 ) { // если количество больше 1, значит имеем новые данные, и нужно полностью пересчитать индикатор
limit=rates_total- 1 ; // задаём количество требуемых для расчёта баров равным количеству баров в истории,
// если для расчёта требуются некое количество баров слева от индекса цикла, ...
// ... то это количество тоже нужно вычесть из rates_total чтобы не выйти за пределы массива
// так же тут нужно при необходимости произвести инициализацию буферов индикатора
}
//--- Основной цикл индикатора
for ( int i=limit; i>= 0 ; i--) {
// тут выполняем нужные расчёты и записываем их результат в нужные буферы, например:
ExtMapBuffer[i]=(open[i]+high[i]+low[i]+close[i])/ 4.0 ; // Выведем на график среднюю цену каждой свечи (OHLC/4.0)
}
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Artem, 컴파일러에서 오류 생성: 'ExtMapBuffer' - 선언되지 않은 식별자
그래서 이 버퍼에 직접 입력했습니다. 템플릿을 다시 만들어야 하지만 여전히 이 가장 간단한 작업에 보다 책임감 있게 접근하고 "지표 생성 마법사가 나에게 무엇에 대해 묻고 무엇을 필요로 합니까?"라는 질문을 스스로에게 물어보고 그가 묻는 내용을 읽으십시오. "다음" 버튼만 클릭하지 마세요.
안녕하세요! 약 4개월 전에 Kovalev의 교과서를 사용하여 MQL4를 공부하기 시작했습니다. 게다가 그들은 비디오를 가지고 있습니다. 나는 비디오를보고, 교과서를 공부하고, 거기에 사용되는 코드를 반복합니다. 물론 이론상으로는 많이 배웠지만, 혼자서는 코드를 작성할 수 없습니다. 나는 아이디어가 있고 알고리즘에 대해 알고 있습니다. 꼼꼼히 다 공부해요 혹시 제가 서두르는 걸까요? 나는 이것이 매우 심각한 문제이고 그것을 숙달하는 데 시간이 걸린다는 것을 이해합니다. 하지만 연습이 필요하다는 것을 압니다. 간단한 작업이 필요하고 작성하여 예를 들어 다른 사람이 확인하도록 하면 이동할 수 있습니다! 또 다른 문제는 업데이트가 있기 전에 책과 비디오가 업데이트되었다는 것입니다. 책을 읽은 후에도 코드를 반복하고 컴파일하고 오류가 발생합니다. 새 게이트에서 양처럼 보입니다 ...... 장군, 그런 슬픔!
문서를 한 번 읽어보십시오. 교과서가 구식입니다. 문서가 도움이 될 것입니다. 작업에 관해서는 - 교과서에 설명 된 것과 동일한 작업을 해결하십시오. 문제를 읽고, 솔루션을 보고, 반복하세요. 그리고 그것이 작동하기 시작할 때까지 계속됩니다. 자신을 구현하는 방법을 배우려는 작업에 가능한 한 가깝게 작업을 수행하는 것이 좋습니다.
물론 모두 IMHO입니다.
모든 것이 나를 위해 잘 컴파일됩니다.
좋아, 하지만 왜 그러한 객체가 다르지 않은지 설명하고 싶은 욕구가 있습니까?
개체 유형을 바꾸면 속성이 2개의 레이블 또는 추세선으로 축소됩니다.
문서를 한 번 읽어보십시오. 교과서가 구식입니다. 문서가 도움이 될 것입니다. 작업에 관해서는 - 교과서에 설명 된 것과 동일한 작업을 해결하십시오. 문제를 읽고, 솔루션을 보고, 반복하세요. 그리고 그것이 작동하기 시작할 때까지 계속됩니다. 자신을 구현하는 방법을 배우려는 작업에 가능한 한 가깝게 작업을 수행하는 것이 좋습니다.
물론 모두 IMHO입니다.
감사하다!
좋아, 하지만 왜 그러한 객체가 다르지 않은지 설명하고 싶은 욕구가 있습니까?
개체 유형을 바꾸면 속성이 2개의 레이블 또는 추세선으로 축소됩니다.