MT4 테스터는 다른 시간대의 정보를 제공하지 않습니다. - 페이지 4

 
예를 들어, 모멘텀을 약간 다르게 호출하여 칠면조를 다시 만들고 외부 변수 TF = 15를 추가합니다. 예를 들어 M1 데이터에 의존합니다. Init에서 필요한 승수 계수 = 15를 정의합니다. 각 막대에서 이 막대가 15분 시간 프레임의 시작인지 확인하고 이 막대에 대해 표시기의 운동량 값을 한 번 계산하고 동일한 값을 반환합니다. 14개의 후속 막대에 대한 값입니다. 분에 간격이 없도록 하거나 표시기 판독값을 약간 다르게 읽고 각 막대의 시간을 확인하는 것이 중요할 수 있습니다. 원하는 막대의 값 계산:
    
      j=coef*i;
      MomBuffer[j]=Close[j]* 100 /Close[j+MomPeriod*coef];
구현하는 것이 남아 있습니다.
 

Sych писал(а) >>

ArrayCopyRates 기능을 사용해보십시오.


따라서 iClose(Symbol(),tf,0) 대신 arr1[0][4]를 작성해야 합니다. 모든 것이 명확하게 작동하고 가장 중요하게는 훨씬 더 빠르게 작동합니다. 복사는 없고 리디렉션만 있습니다.

유감스럽게도 그 숫자는 ArrayCopyRates()에서 작동하지 않았고 테스트가 통과한 TF만,
이웃님들은 침묵하세요!
"ArrayCopyRates()"처럼 어떻게든 9개의 배열을 만들고 9개의 파일에서 모든 데이터를 구동해야 합니다.
당신의 제안과 존경받는 "아바타라"를 결합하는 것이 필요합니다. 그러면 뭔가 잘 될 것입니다.
파일에서 읽는 방법을 확인하는 동안.

 
yuripk >> :
Переделать индюк например моментум, обозвав его чуть иначе, добавить внешнюю переменную TF = 15, считаем на данных M1 для примера. В Init определяем нужный множитель coef = 15. На каждом баре смотрим, является ли этот бар началом и для пятнадцатиминтного ТФ, на нём в индикаторе считаем значение моментума один раз для этого бара и при 14 последующих барах возвращаем это же значение. Важно наверное, чтобы минутки не имели пропусков, или несколько иначе считать показания индикатора, проверяя время каждого бара. Подсчёт значения на нужном баре:
Осталось реализовать.

또 다른 일반적인 옵션은 데이터가 도착할 때 자신의 막대를 만드는 것입니다. 여기에 뭔가가 있지만 순무를 긁어야 합니다!
고맙습니다.

 
vladv002 >> :
В процессе познания MQL4, выяснил что, как минимум мой тесер не отдает информацию
с других ТФ. Вот код проверки, его можна на любой эксперт подвесить, у моего тестера
меняются показания только того ТФ на котором тестирую, а другие стоят на месте.

이 코드를 시각적 테스트 모드에서 테스트하고 있습니까? MetaTrader 4 터미널의 테스터 기사 읽기: 알아야 할 사항
 
vladv002 >> :

또 다른 일반적인 옵션은 데이터가 도착할 때 자신의 막대를 만드는 것입니다. 여기에 뭔가가 있지만 순무를 긁어야 합니다!
고맙습니다.


정확히. 나는 그것을 모델링이라고 부른다 ;)

그리고 당신은 항상 그들의 정확성을 보장받을 것입니다.

또한 비표준 TF를 구현할 수 있습니다. 예를 들어 M3... 또는 H8. H6은 흥미롭습니다.

------

1분 동안 테스터를 운전하면 됩니다.

 
vladv002 писал(а) >>

또 다른 일반적인 옵션은 데이터가 도착할 때 자신의 막대를 만드는 것입니다. 여기에 뭔가가 있지만 순무를 긁어야 합니다!
고맙습니다.



정상적인 작업 예 https://www.mql5.com/en/code/9603
 
Vinin >> :


정상적인 작업 예 https://www.mql5.com/ru/code/9603

테스터에서?

 
avatara писал(а) >>

테스터에서?


정상 표시기는 테스터에서도 올바르게 작동합니다. 다중 통화 및 다중 시간 프레임 모두.

 
Rosh >> :
Вы что, проверяете этот код в режиме визуального тестирования? Почитайте статью Тестер в терминале MetaTrader 4: Это необходимо знать

기록에서 표시기의 동작을 빠르게 확인할 수 있는 다른 방법은 무엇입니까?

제 예에서는 회의록 데이터가 정확하지 않습니다.

비시각적 테스트에서 더 정확할까요?

난 아마 바보...

 
Vinin >> :


정상 표시기는 테스터에서도 올바르게 작동합니다. 다중 통화 및 다중 시간 프레임 모두.

코드를 수정하십시오. M1에서 올바른 데이터를 출력하기만 하면 됩니다.

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_style1 0
#property indicator_color1 Orange
#property indicator_width1 2
#property indicator_style2 0
#property indicator_color2 BlueViolet
#property indicator_width2 2
extern bool Test=true;
//03/04/10
//SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);

//---- buffers
double DMA[];string PARA;int hFile,j=0,shift,dayshift;
double Mtimes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()

{PARA=Symbol();
if (Test) hFile=FileOpen("Dt"+Symbol()+Period()+".csv",FILE_CSV |FILE_WRITE,";");
ArrayCopySeries(Mtimes,MODE_CLOSE,Symbol(),PERIOD_M1);
int error=GetLastError();
if(error==4066)
{
//---- делаем еще 2 попытки чтения
for(int i=0;i<2; i++)
{
Sleep(5000);
ArrayCopySeries(Mtimes,MODE_CLOSE,Symbol(),PERIOD_M1);
}
}
if (Test) FileWrite(hFile,"-Begin--",Mtimes[0]);

//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,DMA);
SetIndexShift(0,0);
SetIndexLabel(0,"inv");

return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if (Test) FileClose(hFile);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{

//----
int counted_bars=IndicatorCounted();
int i,N;double Value;
N=Bars-counted_bars;

if(counted_bars<0) return(-1);
//---- last counted bar will be recounted

if (N==0) return(0);
j++;
if (Test){ FileWrite(hFile,j,"--1M15 ",StrTime(iTime(Symbol(),Period(),1)),iClose(PARA,0,1));
FileWrite(hFile,j,"--0M15 ",StrTime(iTime(Symbol(),Period(),0)),iClose(PARA,0,0));
FileWrite(hFile,j,"--0M1 ",StrTime(iTime(Symbol(),Period(),0)),iClose(PARA,1,0));
FileWrite(hFile,j,"--1001M15 ",StrTime(iTime(Symbol(),Period(),1000)),iClose(PARA,0,1001));
}
for (i=N-1; i>=0; i--)
{
Value=iClose(PARA,0,i);

// Print (i,"=",Value);
DMA[i]=Value;
}

return(0);
}
//+------------------------------------------------------------------+
string StrTime(datetime IT){
return(StringConcatenate(TimeYear(IT),".",TimeMonth(IT),".",TimeDay(IT)
, "-",TimeHour(IT),"^",TimeMinute(IT),"^",TimeSeconds(IT)));
}

m15에서 테스트 중입니다.
미리 감사드립니다!