//+------------------------------------------------------------------+//| 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[])
{
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)if (rates_total< 4 ) return0 ;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.if (limit> 1 )
// если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории// если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,// при подгрузке истории и на первом запуске - перерасчёт всей истории
{
limit=rates_total- 1 ;
// здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
}
//--- Расчёт индикатораfor ( int i=limit; i>= 0 && ! IsStopped (); i--)
{
// необходимые действия по расчёту индикатора
}
//--- return value of prev_calculated for next callreturn (rates_total);
}
//+------------------------------------------------------------------+
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
마지막 답변을 하고 나서 그림이 정리되기 시작했고 가장 분명한 것은 프로그래머가 되는 것이 내 운명이 아니라는 것 :-)
지금까지 가장 간단한 목록으로 시작했으며 결과는 다음과 같습니다.
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[0] = 85.72 2018.10.19 00:00:00
어떤 경우에는 어떤 이유로 가격이 임의의 방향에서 한 점 뒤의 두 유효 숫자의 차원을 초과합니다.
그리고 이것은 계산 오류 없이 발생하며 차트 기반 tmp1[i]=close[i]의 가격 값 출력일 뿐입니다.
이것은 어떻게든 극복할 수 있습니까 아니면 그냥 무시할 수 있습니까?
그것에서 5와 관련된 모든 것을 버리고 4를 위한 템플릿을 얻을 수 있습니다.
이것은 5가 4와 어떻게 다른지 아는 사람들에게 쓸 수 있으며 그것은 확실히 내가 아닙니다 :-)
숫자 4는 어디에서 왔습니까? 신성한 의미는 무엇입니까?
이것은 5가 4와 어떻게 다른지 아는 사람들에게 쓸 수 있으며 그것은 확실히 내가 아닙니다 :-)
숫자 4는 어디에서 왔습니까? 신성한 의미는 무엇입니까?
당신은 확실히 듣지 않고 읽지 않습니다 ... 그것은 동일했습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론
Artyom Trishkin , 2018.10.18 09:26
마지막 답변을 하고 나서 그림이 정리되기 시작했고 가장 분명한 것은 프로그래머가 되는 것이 내 운명이 아니라는 것 :-)
지금까지 가장 간단한 목록으로 시작했으며 결과는 다음과 같습니다.
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[0] = 85.72 2018.10.19 00:00:00
어떤 경우에는 어떤 이유로 가격이 임의의 방향에서 한 점 뒤의 두 유효 숫자의 차원을 초과합니다.
그리고 이것은 계산 오류 없이 발생하며 차트 기반 tmp1[i]=close[i]의 가격 값 출력일 뿐입니다.
이것은 어떻게든 극복할 수 있습니까 아니면 그냥 무시할 수 있습니까?
모든 것이 정상입니다. 분수를 인쇄하려면 필요한 정밀도로 DoubleToString()을 사용 하면 됩니다. 이 경우 필요한 정밀도는 Digits()여야 합니다.
마지막 답변을 하고 나서 그림이 정리되기 시작했고 가장 분명한 것은 프로그래머가 되는 것이 내 운명이 아니라는 것 :-)
지금까지 가장 간단한 목록으로 시작했으며 결과는 다음과 같습니다.
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,일일: tmp1[0] = 85.72 2018.10.19 00:00:00
어떤 경우에는 어떤 이유로 가격이 임의의 방향에서 한 점 뒤의 두 유효 숫자의 차원을 초과합니다.
그리고 이것은 계산 오류 없이 발생하며 차트 기반 tmp1[i]=close[i]의 가격 값 출력일 뿐입니다.
이것은 어떻게든 극복할 수 있습니까 아니면 그냥 무시할 수 있습니까?
이것은 실수에 대한 일반적인 값입니다. 프로그램 작성 방법을 배울 수 있습니다. 모두가 이것으로 시작합니다. 많이 읽고 자신의 코드를 작성하고 작성하려고 노력하면 됩니다.
실수의 정확성, 사마귀 및 그것이 모두 메모리에 저장되는 방식에 대해 인터넷에서 Google을 검색할 수 있습니다. 저장 원칙은 어디에서나 동일합니다.
아름다운 출력을 원하면 DoubleToStr()을 사용하십시오
이것은 실수에 대한 일반적인 값입니다. 프로그램 작성 방법을 배울 수 있습니다. 모두가 이것으로 시작합니다. 많이 읽고 자신의 코드를 작성하고 작성하려고 노력하면 됩니다.
실수의 정확성, 사마귀 및 그것이 모두 메모리에 저장되는 방식에 대해 인터넷에서 Google을 검색할 수 있습니다. 저장 원칙은 어디에서나 동일합니다.
아름다운 출력을 원하면 DoubleToStr() 을 사용하십시오
호환되는 기능을 사용할 수 있는 경우 사용할 수 있도록 제공하는 것이 좋습니다. 그리고 이 서사시가 다시 시작됩니다. 이 경우: DoubleToString()
동일한 도구에 대한 고문의 출시를 어떻게 금지할 수 있습니까?
예를 들어, 어드바이저는 eur/usd 창에서 작업하고 eur/usd에 대해 다른 창에서 실행하면 일부 경고 메시지가 표시됩니다. 도움을 주시면 감사하겠습니다.
동일한 도구에 대한 고문의 출시를 어떻게 금지할 수 있습니까?
예를 들어, 어드바이저는 eur/usd 창에서 작업하고 eur/usd에 대해 다른 창에서 실행하면 일부 경고 메시지가 표시됩니다. 도움을 주시면 감사하겠습니다.
포럼을 검색하여 한 고문에서 다른 고문으로 데이터를 전송해야 합니다.
또는 터미널의 전역 변수를 사용합니다(이것이 가장 쉬운 방법입니다). 첫 번째 Expert Advisor가 거기에 값을 쓸 수 있으며 Expert Advisors의 후속 복사본은 이 값을 읽고 https://www로 시작되지 않습니다. mql5.com/en/docs/globals
포럼을 검색하여 한 고문에서 다른 고문으로 데이터를 전송해야 합니다.
또는 터미널의 전역 변수를 사용합니다(이것이 가장 쉬운 방법입니다). 첫 번째 Expert Advisor가 거기에 값을 쓸 수 있으며, Expert Advisors의 후속 복사본은 이 값을 읽고 https://www로 시작되지 않습니다. mql5.com/en/docs/globals
어드바이저는 동일합니다. 동일한 도구에서 실행되지 않도록 금지해야 합니다.
그리고? 2 분 안에 당신은 인증서를 공부할 수 없습니다
문자열을 전역 변수 로 전송하는 방법에 관한 것이라면 유일한 방법은 전역 변수 이름을 만드는 것입니다. 귀하의 경우 EURUSD에 대한 고문을 시작했으며 다음을 확인하십시오.
if(GlobalVariableCheck(_Symbol)) .....
그러한 변수가 없으면 다음과 같은 변수를 만드십시오.
if(GlobalVariableSet(_Symbol,Magic)==0) Print("글로벌 변수 # 쓰기 오류 ",GetLastError());
그런 다음 EA가 종료되면 전역 변수를 삭제해야 합니다.
어쩐지 터미널이 가까이에 있지 않고 검색 방향을 표시 한 것 같습니다