El probador de MT4 no da información de otros plazos - página 4

 
Rehacer la torreta, por ejemplo, el impulso, llamándola un poco diferente, añadir la variable externa TF = 15, leer en los datos M1, por ejemplo. En Init definir el multiplicador requerido coef = 15. En cada barra, miramos si esta barra es el inicio y para el TF de quince minutos, en ella en el indicador leer el valor de Momentum una vez para esta barra y en otras 14 barras devolver el mismo valor. Probablemente sea importante que las barras de minutos no tengan omisiones, o que se lea de forma algo diferente el indicador, comprobando la hora de cada barra. Cálculo del valor en la barra requerida:
    
      j=coef*i;
      MomBuffer[j]=Close[j]*100/Close[j+MomPeriod*coef];
Sólo queda una cosa por aplicar.
 

Sych писал(а) >>

intente utilizar la función ArrayCopyRates,


respectivamente, en lugar de iClose(Symbol(),tf,0), debe escribir arr1[0][4], - funciona bien y lo más importante mucho más rápido, porque no hay copia, sino sólo redirección.

Desafortunadamente, este número no funcionó con ArrayCopyRates(), sólo con el TF donde se ejecuta la prueba,
Los adyacentes son silenciosos.
Debemos hacer 9 arrays como "ArrayCopyRates()" y cargar todos los datos de 9 archivos allí.
Tengo que combinar tu sugerencia con la estimada "avatara" y algo se solucionará.
Por ahora voy a comprobar cómo se lee de los archivos.

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

Otra opción normal es hacer tus propias barras a medida que llegan los datos, aquí hay algo, ¡pero tendré que rascarme la cabeza!
Gracias.

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

¿Está probando este código en modo de prueba visual? Leer el artículo MetaTrader 4 Tester: Un conocimiento imprescindible
 
vladv002 >>:

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


Exactamente. Yo lo llamo modelar;)

Y siempre tendrá la garantía de que son correctos.

Además, podrás realizar TFs no estándar. M3 por ejemplo... o H8. H6 es interesante.

------

Sólo que tendrás que ejecutar el probador en minutos.

 
vladv002 писал(а) >>

Otra opción normal es hacer tus propias barras a medida que llegan los datos, aquí hay algo, ¡pero tendré que rascarme la cabeza!
>> Gracias.



Un ejemplo de funcionamiento normal https://www.mql5.com/ru/code/9603
 
Vinin >>:


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

¿En el probador?

 
avatara писал(а) >>

>> ¿En el probador?


Un indicador normal también funciona correctamente en el probador. Tanto en multidivisa como en multihorario.

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

¿Cómo puedo comprobar rápidamente el comportamiento del indicador en el historial?

En mi ejemplo, los datos de los minutos no son correctos.

¿Serán más correctos en las pruebas no visuales?

Probablemente sea un tonto...

 
Vinin >>:


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

Sería tan amable de corregir el código. Sólo hay que dar salida a los datos correctos de la 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 probando en m15.
Gracias de antemano.