Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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.
Переделать индюк например моментум, обозвав его чуть иначе, добавить внешнюю переменную 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.
В процессе познания MQL4, выяснил что, как минимум мой тесер не отдает информацию
с других ТФ. Вот код проверки, его можна на любой эксперт подвесить, у моего тестера
меняются показания только того ТФ на котором тестирую, а другие стоят на месте.
Еще нормальный вариант - делать свои бары по ходу поступления данных, тут чтото есть, но надо репу почесать!
Спасибо.
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.
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
Нормальный пример работы https://www.mql5.com/ru/code/9603Im Prüfgerät?
>> Im Prüfgerät?
Ein normaler Indikator funktioniert auch im Testgerät korrekt. Sowohl mehrere Währungen als auch mehrere Zeitrahmen.
Вы что, проверяете этот код в режиме визуального тестирования? Почитайте статью Тестер в терминале 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...
Нормальный индикатор корректно работает и в тестере тоже. И Мультивалютный, и мультитаймфреймный.
Wären Sie so freundlich, den Code zu korrigieren? Geben Sie einfach die richtigen Daten aus dem M1 aus.
#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)));
}
Vielen Dank im Voraus!