Le testeur MT4 ne donne pas d'informations sur les autres périodes de temps. - page 4

 
Refaire la tourelle, par exemple l'élan, en l'appelant légèrement différemment, ajouter la variable externe TF = 15, lire sur les données M1 par exemple. Dans Init, définissez le multiplicateur requis coef = 15. Sur chaque barre, nous regardons si cette barre est le début et pour le TF quinze minutes, sur elle dans l'indicateur lire la valeur de Momentum une fois pour cette barre et à 14 autres barres retourner la même valeur. Il est probablement important que les minutes n'aient pas d'écarts, ou bien de lire l'indicateur un peu différemment, en vérifiant le temps de chaque barre. Calcul de la valeur à la barre requise :
    
      j=coef*i;
      MomBuffer[j]=Close[j]*100/Close[j+MomPeriod*coef];
Il ne reste qu'une seule chose à mettre en œuvre.
 

Sych писал(а) >>

essayez d'utiliser la fonction ArrayCopyRates,


respectivement, au lieu de iClose(Symbol(),tf,0), vous devriez écrire arr1[0][4], - cela fonctionne bien et surtout beaucoup plus rapidement, car il n'y a pas de copie, mais seulement une redirection.

Malheureusement, ce nombre ne fonctionne pas avec ArrayCopyRates(), seulement avec le TF où le test est exécuté,
Les adjacents sont silencieux !
Nous devons créer 9 tableaux comme "ArrayCopyRates()" et y charger toutes les données des 9 fichiers.
Je dois combiner votre suggestion avec l'estimé "avatara" et quelque chose va marcher.
Pour l'instant, je vais vérifier comment il va lire les fichiers.

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

Une autre option normale est de créer vos propres barres au fur et à mesure que les données arrivent, il y a quelque chose ici, mais je vais devoir me gratter la tête !
Merci.

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

Testez-vous ce code en mode de test visuel ? Lire l'article Testeur MetaTrader 4 : un must à connaître
 
vladv002 >>:

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


Exactement. J'appelle cela le modelage ;)

Et vous aurez toujours la garantie qu'ils sont corrects.

De plus, vous serez en mesure de réaliser des TF non standard. M3 par exemple... ou H8. H6 est intéressant.

------

Seulement vous devrez faire fonctionner le testeur sur des minutes.

 
vladv002 писал(а) >>

Une autre option normale est de créer vos propres barres au fur et à mesure que les données arrivent, il y a quelque chose ici, mais je vais devoir me gratter la tête !
>> Merci.



Un exemple de fonctionnement normal https://www.mql5.com/ru/code/9603
 
Vinin >>:


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

Dans le testeur ?

 
avatara писал(а) >>

>> Dans le testeur ?


Un indicateur normal fonctionne aussi correctement dans le testeur. Multi-devises et multi-horaires.

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

Comment puis-je vérifier rapidement le comportement de l'indicateur sur l'historique ?

Dans mon exemple, les données relatives aux minutes ne sont pas correctes.

Seront-ils plus corrects dans les tests non visuels ?

Je suis probablement stupide...

 
Vinin >>:


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

Auriez-vous l'amabilité de corriger le code. Il suffit de sortir les bonnes données du 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)));
}

Nous testons sur la m15.
Merci d'avance !
Raison: