MT4-Tester gibt keine Informationen aus anderen Zeitrahmen - Seite 4

 
Überarbeite den Turm z.B. Momentum, nenne ihn ein wenig anders, füge die externe Variable TF = 15 hinzu, lese z.B. die M1-Daten ein. In Init definieren Sie den erforderlichen Multiplikator coef = 15. Auf jedem Balken schauen wir, ob dieser Balken der Anfang und für den fünfzehnminütigen TF ist, darauf im Indikator den Wert von Momentum einmal für diesen Balken lesen und bei weiteren 14 Balken den gleichen Wert zurückgeben. Es ist wahrscheinlich wichtig, dass die Minutenbalken keine Lücken haben, oder etwas anders lesen Sie den Indikator, die Überprüfung der Zeit der einzelnen Bar. Berechnen des Wertes am gewünschten Takt:
    
      j=coef*i;
      MomBuffer[j]=Close[j]*100/Close[j+MomPeriod*coef];
Es gibt nur noch eine Sache, die umgesetzt werden muss.
 

Sych писал(а) >>

versuchen Sie, die Funktion ArrayCopyRates zu verwenden,


bzw. anstelle von iClose(Symbol(),tf,0) sollten Sie arr1[0][4] schreiben, - das funktioniert einwandfrei und vor allem viel schneller, weil nicht kopiert, sondern nur umgeleitet wird.

Leider funktionierte diese Nummer nicht mit ArrayCopyRates(), sondern nur mit der TF, in der der Test läuft,
Die benachbarten sind still!
Wir müssen 9 Arrays wie "ArrayCopyRates()" erstellen und alle Daten aus 9 Dateien dorthin laden.
Ich muss Ihren Vorschlag mit dem geschätzten "Avatara" kombinieren, dann klappt das schon.
Zunächst werde ich prüfen, wie die Dateien gelesen werden können.

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

Eine andere normale Möglichkeit ist es, eigene Balken zu erstellen, wenn die Daten eintreffen. Hier gibt es etwas, aber ich muss mir den Kopf zerbrechen!
Ich danke Ihnen.

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

Testen Sie diesen Code im visuellen Testmodus? Lesen Sie den Artikel MetaTrader 4 Tester: Ein Muss
 
vladv002 >>:

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


Ganz genau. Ich nenne es modellieren;)

Und Sie haben immer die Garantie, dass sie korrekt sind.

Außerdem werden Sie in der Lage sein, nicht standardisierte TFs zu realisieren. M3 zum Beispiel... oder H8. H6 ist interessant.

------

Nur müssen Sie den Tester auf Minuten laufen lassen.

 
vladv002 писал(а) >>

Eine andere normale Möglichkeit ist es, eigene Balken zu erstellen, wenn die Daten eintreffen. Hier gibt es etwas, aber ich muss mir den Kopf zerbrechen!
>> Danke.



Ein normales Arbeitsbeispiel https://www.mql5.com/ru/code/9603
 
Vinin >>:


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

Im Prüfgerät?

 
avatara писал(а) >>

>> Im Prüfgerät?


Ein normaler Indikator funktioniert auch im Testgerät korrekt. Sowohl mehrere Währungen als auch mehrere Zeitrahmen.

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

Wie kann ich sonst noch schnell das Verhalten des Indikators in der Historie überprüfen?

In meinem Beispiel sind die Minutenangaben nicht korrekt.

Werden sie bei nicht visuellen Tests korrekter sein?

Ich bin wahrscheinlich dumm...

 
Vinin >>:


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

Wären Sie so freundlich, den Code zu korrigieren? Geben Sie einfach die richtigen Daten aus dem M1 aus.

#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)));
}

Wir testen auf m15.
Vielen Dank im Voraus!