Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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.
Переделать индюк например моментум, обозвав его чуть иначе, добавить внешнюю переменную 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.
В процессе познания MQL4, выяснил что, как минимум мой тесер не отдает информацию
с других ТФ. Вот код проверки, его можна на любой эксперт подвесить, у моего тестера
меняются показания только того ТФ на котором тестирую, а другие стоят на месте.
Еще нормальный вариант - делать свои бары по ходу поступления данных, тут чтото есть, но надо репу почесать!
Спасибо.
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.
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
Нормальный пример работы https://www.mql5.com/ru/code/9603Dans le testeur ?
>> Dans le testeur ?
Un indicateur normal fonctionne aussi correctement dans le testeur. Multi-devises et multi-horaires.
Вы что, проверяете этот код в режиме визуального тестирования? Почитайте статью Тестер в терминале 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...
Нормальный индикатор корректно работает и в тестере тоже. И Мультивалютный, и мультитаймфреймный.
Auriez-vous l'amabilité de corriger le code. Il suffit de sortir les bonnes données du 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)));
}
Merci d'avance !