O testador MT4 não fornece informações de outros períodos de tempo - página 4

 
Refazer a torre, por exemplo, o momento, chamando-a de forma ligeiramente diferente, adicionar a variável externa TF = 15, ler nos dados M1, por exemplo. No Init, defina o coeficiente multiplicador necessário = 15. Em cada barra, verificamos se esta barra é o início e para o TF de quinze minutos, sobre ela no indicador lemos uma vez o valor de Momentum para esta barra e a mais 14 barras retornam o mesmo valor. É provavelmente importante que as atas não tenham lacunas, ou de alguma forma lerem de forma diferente o indicador, verificando o tempo de cada barra. Cálculo do valor na barra necessária:
    
      j=coef*i;
      MomBuffer[j]=Close[j]*100/Close[j+MomPeriod*coef];
Resta apenas uma coisa a ser implementada.
 

Sych писал(а) >>

tente usar a função ArrayCopyRates,


respectivamente, ao invés de iClose(Symbol(),tf,0), você deve escrever arr1[0][4], - funciona bem e, mais importante, muito mais rápido, porque não há cópia, mas apenas redirecionamento.

Infelizmente, este número não funcionou com o ArrayCopyRates(), apenas aquele TF onde o teste está sendo executado,
Os adjacentes são silenciosos!
Devemos fazer 9 arrays como "ArrayCopyRates()" e carregar ali todos os dados de 9 arquivos.
Preciso combinar sua sugestão com a estimada "avatara" e algo vai dar certo.
Por enquanto, vou verificar como será lido a partir dos arquivos.

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

Outra opção normal é fazer suas próprias barras conforme os dados chegam, há algo aqui, mas eu terei que coçar a cabeça!
Obrigado.

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

Você está testando este código em modo de teste visual? Leia o artigo MetaTrader 4 Tester: Um dever saber
 
vladv002 >>:

Еще нормальный вариант - делать свои бары по ходу поступления данных, тут чтото есть, но надо репу почесать!
Спасибо.


Exatamente. Eu o chamo de modelagem;)

E você sempre terá a garantia de que eles estão corretos.

Além disso, você será capaz de realizar TFs não-padrão. M3, por exemplo... ou H8. O H6 é interessante.

------

Somente você terá que fazer o teste em minutos.

 
vladv002 писал(а) >>

Outra opção normal é fazer suas próprias barras conforme os dados chegam, há algo aqui, mas eu terei que coçar a cabeça!
>> Obrigado.



Um exemplo de trabalho normal https://www.mql5.com/ru/code/9603
 
Vinin >>:


Нормальный пример работы https://www.mql5.com/ru/code/9603

No testador?

 
avatara писал(а) >>

>> No testador?


Um indicador normal também funciona corretamente no testador. Tanto em várias moedas quanto em vários prazos.

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

De que outra forma posso verificar rapidamente o comportamento do indicador no histórico?

No meu exemplo, os dados mínimos não estão corretos.

Eles serão mais corretos em testes não-visuais?

Eu provavelmente sou burro...

 
Vinin >>:


Нормальный индикатор корректно работает и в тестере тоже. И Мультивалютный, и мультитаймфреймный.

Teria a gentileza de corrigir o código. Basta emitir os dados corretos a partir da 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)));
}

Estamos testando no m15.
Obrigado de antemão!