Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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.
Переделать индюк например моментум, обозвав его чуть иначе, добавить внешнюю переменную 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.
В процессе познания MQL4, выяснил что, как минимум мой тесер не отдает информацию
с других ТФ. Вот код проверки, его можна на любой эксперт подвесить, у моего тестера
меняются показания только того ТФ на котором тестирую, а другие стоят на месте.
Еще нормальный вариант - делать свои бары по ходу поступления данных, тут чтото есть, но надо репу почесать!
Спасибо.
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.
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
Нормальный пример работы https://www.mql5.com/ru/code/9603¿En el probador?
>> ¿En el probador?
Un indicador normal también funciona correctamente en el probador. Tanto en multidivisa como en multihorario.
Вы что, проверяете этот код в режиме визуального тестирования? Почитайте статью Тестер в терминале 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...
Нормальный индикатор корректно работает и в тестере тоже. И Мультивалютный, и мультитаймфреймный.
Sería tan amable de corregir el código. Sólo hay que dar salida a los datos correctos de la M1.
#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)));
}
Gracias de antemano.