Karputov Vladimir , 귀하의 코드를 이해하지 못합니다. 저는 이 사업의 초보자이기 때문에 이전에 OnCalculate 함수를 전혀 사용하지 않았기 때문에여기서 rate_total 이 계산된 것을 이해할 수 없으며 가장 중요한 것은 어디에 나중에 반품하려면? 이 모든 것을 별도의 함수로 변환하는 방법을 여전히 이해하지 못합니다. 주석 없이는 어렵습니다.
-Aleks- : Karputov Vladimir , 귀하의 코드를 이해하지 못합니다. 저는 이 사업의 초보자이기 때문에 이전에 OnCalculate 함수를 전혀 사용하지 않았기 때문에여기서 rate_total 이 계산된 것을 이해할 수 없으며 가장 중요한 것은 어디에 나중에 반품하려면? 이 모든 것을 별도의 함수로 변환하는 방법을 여전히 이해하지 못합니다. 주석 없이는 어렵습니다.
표시기의 전체 MQL4 코드는 다음과 같습니다.
//+------------------------------------------------------------------+//| Start day.mq4 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_window//--- input parametersinputint timer= 10 ; // seconds//--- parameterbool IsDefineTime= true ; // true -> you can define time//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//--- indicator buffers mappingEventSetTimer (timer);
//---
IsDefineTime= true ;
//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| 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[])
{
//---int temp_day;
MqlDateTime dt_struct;
TimeToStruct (time[ 0 ],dt_struct);
temp_day=dt_struct.day;
if (IsDefineTime)
{
for ( int i= 0 ;i<rates_total- 1 ;i++)
{
TimeToStruct (time[i],dt_struct);
if (dt_struct.day<temp_day)
{
Print ( "Start day " ,time[i- 1 ]);
IsDefineTime= false ;
break ;
}
}
}
//--- return value of prev_calculated for next callreturn (rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer ()
{
//---
IsDefineTime= true ; // true -> you can define time
}
//+------------------------------------------------------------------+
작동 알고리즘: 표시기가 시작되면 타이머의 시간 간격(예: 10초)을 설정합니다. 이는 타이머가 10초마다 실행됨을 의미합니다.
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer ()
{
//---
IsDefineTime= true ; // true -> you can define time
}
IsDefineTime 변수는 true 로 설정됩니다. 무엇을 위한 것입니까? IsDefineTime=true이면 OnCalculate()에서 하루의 시작 시간을 결정하기 위한 루프를 입력할 수 있습니다.
if (IsDefineTime)
{
for ( int i= 0 ;i<rates_total- 1 ;i++)
{
TimeToStruct (time[i],dt_struct);
if (dt_struct.day<temp_day)
{
Print ( "Start day " ,time[i- 1 ]);
IsDefineTime= false ;
break ;
}
}
}
이 루프에서 가장 오른쪽 막대(인덱스는 "0"과 같음)에서 time[] 배열(이 배열은 여는 시간의 값을 저장함)을 탐색하기 시작합니다. 하루의 시작을 찾으면 그 값을 출력하고 IsDefineTime 변수를 false 로 설정합니다. 이렇게 하면 타이머가 다시 작동할 때까지 시작 루프에 들어가는 것을 방지할 수 있습니다.
도와주세요! (MQL4)
지표의 경우 각 막대를 고려하여 M15 차트 에서 하루의 시작 시간을 가져와야 합니다.
현재 막대(0)를 고려하여 초 단위로 계산하기로 결정했지만 실수를 했습니다.
D_Shift=(Open_time-pos*15*60-(Open_time-Open_timeTF))/1440*60;
지표의 경우:
하지만: 이 코드는 OnCalculate()를 입력할 때마다 실행됩니다. 여기에서 필요에 따라 bool 플래그를 추가하거나 코드를 별도의 함수로 이동합니다.
지표의 경우:
하지만: 이 코드는 OnCalculate()를 입력할 때마다 실행됩니다. 여기에서 필요에 따라 bool 플래그를 추가하거나 코드를 별도의 함수로 이동합니다.
감사합니다. 하지만 매 틱마다 다시 계산하는 것은 좋지 않습니다. 코드를 이해해야 하지만, 내 코드가 작동하지 않는 이유를 이해하고 싶지만 이상한 숫자가 로그에 반환됩니다.
오늘의 첫 번째 막대와 현재 막대 사이에 479개의 막대 차이가 있는 것으로 나타났습니다. 그 이유는 무엇입니까?
감사합니다. 하지만 매 틱마다 다시 계산하는 것은 좋지 않습니다. 코드를 이해해야 하지만, 내 코드가 작동하지 않는 이유를 이해하고 싶지만 이상한 숫자가 로그에 반환됩니다.
오늘의 첫 번째 막대와 현재 막대 사이에 479개의 막대 차이가 있는 것으로 나타났습니다. 그 이유는 무엇입니까?
결국, 나는 내가 심령이 아니므로 다음과 같이 표시했습니다.
하지만: 이 코드는 OnCalculate()를 입력할 때마다 실행됩니다 . 여기에서 필요에 따라 bool 플래그를 추가 하거나 코드를 별도의 함수로 이동합니다 .
결국, 나는 내가 심령이 아니므로 다음과 같이 표시했습니다.
Karputov Vladimir , 귀하의 코드를 이해하지 못합니다. 저는 이 사업의 초보자이기 때문에 이전에 OnCalculate 함수를 전혀 사용하지 않았기 때문에 여기서 rate_total 이 계산된 것을 이해할 수 없으며 가장 중요한 것은 어디에 나중에 반품하려면? 이 모든 것을 별도의 함수로 변환하는 방법을 여전히 이해하지 못합니다. 주석 없이는 어렵습니다.
표시기의 전체 MQL4 코드는 다음과 같습니다.
작동 알고리즘: 표시기가 시작되면 타이머의 시간 간격(예: 10초)을 설정합니다. 이는 타이머가 10초마다 실행됨을 의미합니다.
IsDefineTime 변수는 true 로 설정됩니다. 무엇을 위한 것입니까? IsDefineTime=true이면 OnCalculate()에서 하루의 시작 시간을 결정하기 위한 루프를 입력할 수 있습니다.
이 루프에서 가장 오른쪽 막대(인덱스는 "0"과 같음)에서 time[] 배열(이 배열은 여는 시간의 값을 저장함)을 탐색하기 시작합니다. 하루의 시작을 찾으면 그 값을 출력하고 IsDefineTime 변수를 false 로 설정합니다. 이렇게 하면 타이머가 다시 작동할 때까지 시작 루프에 들어가는 것을 방지할 수 있습니다.
Karputov Vladimir , 설명 감사합니다. 그러나 이것이 어떻게 문제를 해결합니까?
대략적으로 말하면, 하루의 시작의 막대에 해당하는 현재 TF의 막대를 찾는 것이 필요합니다. 각 막대에서 찾아서 그에 따라 표시기의 계산 및 그리기를 수행하십시오.
Karputov Vladimir , 설명 감사합니다. 그러나 이것이 어떻게 문제를 해결합니까?
대략적으로 말하면, 하루의 시작의 막대에 해당하는 현재 TF의 막대를 찾는 것이 필요합니다. 각 막대에서 찾아서 그에 따라 표시기의 계산 및 그리기를 수행하십시오.
요청한대로 그들은 당신에게 대답했습니다 :). 그리고 이 날의 첫 번째 막대의 시간이 필요하지 않고 이 막대의 인덱스가 필요한 경우 하루의 시작을 인쇄할 때 다음과 같습니다.
인덱스 [i-1]을 사용합니다. 이것은 오늘의 첫 번째 막대 번호입니다.
요청한대로 그들은 당신에게 대답했습니다 :). 그리고 이 날의 첫 번째 막대의 시간이 필요하지 않고 이 막대의 인덱스가 필요한 경우 하루의 시작을 인쇄할 때 다음과 같습니다.
인덱스 [i-1]을 사용합니다. 이것은 오늘의 첫 번째 막대 번호입니다.
동의 - 혼란스럽게 물었다.
응용 프로그램에 내가 만든 표시기가 있지만 올바르게 계산되지 않습니다. 나는 매우 어리석고 이해가 되지 않습니다. 당신 쪽에서 설명을 들어도 하루 시작의 첫 번째 막대에 해당하는 인덱스를 올바르게 결정하도록 만들 수 있습니다.
뻔뻔하게 해서 죄송합니다. 하지만 귀하의 코드와 제 코드를 결합하는 방법을 알려주실 수 있습니까?
-Aleks- :
하루 시작의 첫 번째 막대에 해당하는 인덱스를 올바르게 결정하도록 하려면 어떻게 해야 합니까?
어떻게 든 FSE가 실행 중입니다) 다음과 같습니다.