Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
j=coef*i; MomBuffer[j]=Close[j]*100/Close[j+MomPeriod*coef];
Rimane solo una cosa da implementare.Sych писал(а) >>
provare ad usare la funzione ArrayCopyRates,
rispettivamente, invece di iClose(Symbol(),tf,0), dovresti scrivere arr1[0][4], - funziona bene e soprattutto è molto più veloce, perché non c'è copia, ma solo reindirizzamento.
Sfortunatamente, questo numero non ha funzionato con ArrayCopyRates(), solo quel TF dove il test è in esecuzione,
Quelli adiacenti sono silenziosi!
Dobbiamo fare 9 array come "ArrayCopyRates()" e caricarvi tutti i dati di 9 file.
Devo combinare il tuo suggerimento con lo stimato "avatara" e qualcosa funzionerà.
Per ora controllerò come si legge dai file.
Переделать индюк например моментум, обозвав его чуть иначе, добавить внешнюю переменную TF = 15, считаем на данных M1 для примера. В Init определяем нужный множитель coef = 15. На каждом баре смотрим, является ли этот бар началом и для пятнадцатиминтного ТФ, на нём в индикаторе считаем значение моментума один раз для этого бара и при 14 последующих барах возвращаем это же значение. Важно наверное, чтобы минутки не имели пропусков, или несколько иначе считать показания индикатора, проверяя время каждого бара. Подсчёт значения на нужном баре:
Осталось реализовать.
Un'altra opzione normale è quella di fare le proprie barre man mano che i dati arrivano, c'è qualcosa qui, ma dovrò grattarmi la testa!
Grazie.
В процессе познания MQL4, выяснил что, как минимум мой тесер не отдает информацию
с других ТФ. Вот код проверки, его можна на любой эксперт подвесить, у моего тестера
меняются показания только того ТФ на котором тестирую, а другие стоят на месте.
Еще нормальный вариант - делать свои бары по ходу поступления данных, тут чтото есть, но надо репу почесать!
Спасибо.
Esattamente. Io lo chiamo modellismo;)
E avrete sempre la garanzia che siano corretti.
Inoltre sarete in grado di realizzare TF non standard. M3 per esempio... o H8. H6 è interessante.
------
Solo che dovrete eseguire il tester a minuti.
Un'altra opzione normale è quella di fare le proprie barre man mano che i dati arrivano, c'è qualcosa qui, ma dovrò grattarmi la testa!
>> Grazie.
Un normale esempio di lavoro https://www.mql5.com/ru/code/9603
Нормальный пример работы https://www.mql5.com/ru/code/9603Nel tester?
>> Nel tester?
Anche un indicatore normale funziona correttamente nel tester. Sia multi-valuta che multi-timeframe.
Вы что, проверяете этот код в режиме визуального тестирования? Почитайте статью Тестер в терминале MetaTrader 4: Это необходимо знать
Come posso controllare rapidamente il comportamento dell'indicatore sulla storia?
Nel mio esempio, i dati dei minuti non sono corretti.
Saranno più corretti nei test non visivi?
Probabilmente sono muto...
Нормальный индикатор корректно работает и в тестере тоже. И Мультивалютный, и мультитаймфреймный.
Sarebbe così gentile da correggere il codice. Basta emettere i dati corretti dall'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)));
}
Grazie in anticipo!