Es gibt also eine Funktion für die Zeitmessung der Öffnung einer Bar (auch wenn die Bar in der Zukunft liegt)
//+---------------------------------------------------------------------------+//| Получение точного времени открытия |//|Input: |//|1) Время, которое необходимо округлить до ближайшего времени открытия бара |//|2) Переменная для вывода результата |//|3) Период ТФ |//|4) Отклонение влево-вправо |//|Возврат: количество элементов(1), 0 если не скопировано, (-1) если ошибка |//+---------------------------------------------------------------------------+int GetSingleBarOpenTime(datetime Time,datetime &Output,ENUM_TIMEFRAMES nPeriod,int Shift=0) export
{
datetime OpenTime[1];
int Count=0;
// если бар существует то используем стандартную процедуру поиска времени открытияif(Time<=TimeCurrent() && Shift==0)
{
Count=CopyTime(Symbol(),nPeriod,Time,1,OpenTime);
if(Count==0)
{
Print("GetCorrectOpenTime CopyTime elements=0");
return(0);
}
elseif(Count<0)
{
Print("GetCorrectOpenTime error "+(string)GetLastError());
return(Count);
}
else
{
Output=OpenTime[0];
return(Count);
}
}
//если бар находится в будущем то используем следующую процедуруelse
{
MqlDateTime sTime;
// NumOfUnits - количество стандартных единицint NumOfUnits=0;
int ToRnd;
TimeToStruct(Time,sTime);
//Единица измерения(1-минута, 2 - час, 3 - день, 4 - неделя(но используются дни), 5 - месяц)short Unit=0;
//в зависимости от ТФ инициализируются параметрыswitch(nPeriod)
{
casePERIOD_M1: {Unit=1;NumOfUnits=1;break;}
casePERIOD_M2: {Unit=1;NumOfUnits=2;break;}
casePERIOD_M3: {Unit=1;NumOfUnits=3;break;}
casePERIOD_M4: {Unit=1;NumOfUnits=4;break;}
casePERIOD_M5: {Unit=1;NumOfUnits=5;break;}
casePERIOD_M6: {Unit=1;NumOfUnits=6;break;}
casePERIOD_M10: {Unit=1;NumOfUnits=10;break;}
casePERIOD_M12: {Unit=1;NumOfUnits=12;break;}
casePERIOD_M15: {Unit=1;NumOfUnits=15;break;}
casePERIOD_M20: {Unit=1;NumOfUnits=20;break;}
casePERIOD_M30: {Unit=1;NumOfUnits=30;break;}
casePERIOD_H1: {Unit=2;NumOfUnits=1;break;}
casePERIOD_H2: {Unit=2;NumOfUnits=2;break;}
casePERIOD_H3: {Unit=2;NumOfUnits=3;break;}
casePERIOD_H4: {Unit=2;NumOfUnits=4;break;}
casePERIOD_H6: {Unit=2;NumOfUnits=6;break;}
casePERIOD_H8: {Unit=2;NumOfUnits=8;break;}
casePERIOD_H12: {Unit=2;NumOfUnits=12;break;}
casePERIOD_D1: {Unit=3;NumOfUnits=1;break;}
casePERIOD_W1: {Unit=4;NumOfUnits=7;break;}
casePERIOD_MN1: {Unit=5;NumOfUnits=1;break;}
default: {Print("Period is unknown"); break;}
}
// Если ТФ - минуты, тоif(Unit==1)
{
sTime.sec=0;
//Остаток от деления
ToRnd=(int)fmod(sTime.min,NumOfUnits);
Time=StructToTime(sTime);
// Округление до ближайшего времени открытия(пример: если сейчас 14:25, и тф 2min, то ближайщее время открытия бара - 14:24)
Time-=(ToRnd*60);
Time+=(NumOfUnits*Shift*60);
}
elseif(Unit==2)
{
sTime.sec=0;
sTime.min=0;
ToRnd=(int)fmod(sTime.hour,NumOfUnits);
Time=StructToTime(sTime);
Time-=(ToRnd*60*60);
Time+=(NumOfUnits*Shift*60*60);
}
elseif(Unit==3)
{
sTime.hour=0;
sTime.min=0;
sTime.sec=0;
ToRnd=(int)fmod(sTime.day,NumOfUnits);
Time=StructToTime(sTime);
int hds;
hds=sTime.day_of_week;
if (hds==0) hds=7;
hds=floor((hds+Shift)/7)*2;
int ti=Shift+hds;
while (hds>7)
{
hds=(floor(hds/7))*2;
ti+=hds;
}
Print(ti);
Time-=(ToRnd*60*60*24);
Time+=(NumOfUnits*Shift*60*60*24);
}
elseif(Unit==4)
{
sTime.hour=0;
sTime.min=0;
sTime.sec=0;
ToRnd=(int)fmod(sTime.day,NumOfUnits);
Time=StructToTime(sTime);
Time-=(ToRnd*60*60*24);
Time+=(NumOfUnits*Shift*60*60*24);
}
elseif(Unit==5)
{
sTime.sec=0;
sTime.min=0;
sTime.hour=0;
sTime.day=1;
sTime.mon=sTime.mon-(int)fmod(sTime.mon,NumOfUnits)+(NumOfUnits*Shift);
while(sTime.mon<1)
{
sTime.year--;
sTime.mon=12+sTime.mon;
}
while(sTime.mon>12)
{
sTime.year++;
sTime.mon=sTime.mon-12;
}
if(sTime.sec<0)
Print("GetSingleBarOpenTime seconds error");
if(sTime.min<0)
Print("GetSingleBarOpenTime minutes error");
if(sTime.hour<0)
Print("GetSingleBarOpenTime hours error");
if(sTime.day<1)
Print("GetSingleBarOpenTime days error");
if(sTime.mon<0)
Print("GetSingleBarOpenTime months error");
if(sTime.year<1970)
Print("Year < 1970");
Time=StructToTime(sTime);
}
Output=Time;
return(1);
}
}
Das Problem mit Shift ist, dass es jetzt nicht mehr nach der Anzahl der Balken, sondern nach der Anzahl der Tage verschoben wird (es ist egal, ob auf D1 oder D1; die Hauptsache ist, D1 zu verstehen). Also ich denke, ich habe es in meinem Kopf, dass ich die Anzahl der daysTotal von Schicht (Anzahl der Wochentage) und den aktuellen Tag der Woche überprüfen können, aber welche Formel zu verwenden - ich kann nicht bestimmen.
Anmerkung: in Unit=3 versucht, es zu tun (bisher erfolglos)
voidOnTick()
{
MqlTick last_tick={0}; // предопределенная структура для получения текущих данных рынкаSymbolInfoTick("EURUSD",last_tick); // инструмент: указывать обязательноdouble Bid = last_tick.bid; // Текущая цена BidMqlTradeRequest request={0};
MqlTradeResult result={0};
request.action=TRADE_ACTION_DEAL;
request.magic=555;
request.symbol="EURUSD";
request.volume=1.0;
request.deviation=0;
request.type=ORDER_TYPE_BUY;
request.sl=Bid-300*_Point; // Уровень Stop Loss ордера
request.tp=Bid+1000*_Point; // Уровень Take Profit ордераOrderSend(request,result);
Comment("retcode = ",result.retcode);
}
2. Beginnen wir mit der Tatsache, dass Ihr Antrag nicht das obligatorische Feld request.price enthält (das Fehlen eines solchen Feldes ist nur für den Marktausführungsmodus zulässig). Es stellt sich also heraus, dass, solange request.price==0.
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
die Handelsabfrage ergibt den Fehler 10016 ("falsche Stops"). Was machen sie falsch?
request.sl=Bid-300*_Point; // Stop Loss Level der Order
request.tp=Bid+1000*_Point; // Höhe der Take Profit Order
Sie sind nämlich nicht normalisiert. (verwenden Sie die Schaltfläche SRC, um den Code einzufügen).
request.sl=NormalizeDouble(Bid-300*_Point,_Digits); // Уровень Stop Loss ордера
request.tp=NormalizeDouble(Bid+1000*_Point,_Digits); // Уровень Take Profit ордера
2. Beginnen wir mit der Tatsache, dass Ihr Antrag nicht das Pflichtfeld request.price enthält (das Fehlen eines solchen Feldes ist nur im Marktausführungsmodus zulässig). Es stellt sich also heraus, dass, solange request.price==0.
Ich danke Ihnen. Setzen Sie den Preis ein, es funktioniert.
Ich habe zum Beispiel den Zeitpunkt der Kerze Nr. 3 angegeben. In diesem Fall erhalte ich die Kurse der Leuchter Nr. 3 und Nr. 4 zurück. Aber wie bekommt man die Kurse der Leuchter Nr. 3 und Nr. 2, wenn man eine offene Zeit des Leuchters Nr. 3 hat. Die negative Zahl wird nicht verdaut.
Ich hatte die Idee, einen Index von Sorten zu finden, aber um das zu tun, muss ich alle Elemente aus dem aktuellen kopieren, aber, Donnerwetter, wenn ich M1 und eine Bar 10 Jahre alt habe, dann ist das Array zu groß.
Könnten Sie bitte erklären, in welchen Einheiten der Datenverkehr auf der Registerkarte "Dienste" von MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712) gemessen wird? Wird es in KiloBytes|MegaBytes oder KiloBytes|MegaBytes gemessen?
Leute, könnt ihr mir sagen, ob es einen Indikator oder ein Objekt in der Basis gibt, mit dem man die Charts anderer Währungen auf dem Hauptchart anzeigen kann?
p.s. Ich habe meine eigene für mt4 geschrieben, aber vielleicht gibt es eine fertige hier...
Leute, könnt ihr mir sagen, ob es einen Indikator oder ein Objekt in der Basis gibt, mit dem man die Charts anderer Währungen auf dem Hauptchart anzeigen kann?
p.s. Ich habe meine eigene für mt4 geschrieben, aber vielleicht gibt es eine fertige hier...
Ich habe es gefunden, sie haben es bereits geschrieben, z**** , ich brauche es zumindest nicht selbst zu schreiben. https://www.mql5.com/ru/code/1055
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Es gibt also eine Funktion für die Zeitmessung der Öffnung einer Bar (auch wenn die Bar in der Zukunft liegt)
Das Problem mit Shift ist, dass es jetzt nicht mehr nach der Anzahl der Balken, sondern nach der Anzahl der Tage verschoben wird (es ist egal, ob auf D1 oder D1; die Hauptsache ist, D1 zu verstehen). Also ich denke, ich habe es in meinem Kopf, dass ich die Anzahl der daysTotal von Schicht (Anzahl der Wochentage) und den aktuellen Tag der Woche überprüfen können, aber welche Formel zu verwenden - ich kann nicht bestimmen.
Anmerkung: in Unit=3 versucht, es zu tun (bisher erfolglos)
Bitte um Hilfe.
1. Fügen Sie den Code korrekt ein (Strg+Alt+M).
2. Beginnen wir mit der Tatsache, dass Ihr Antrag nicht das obligatorische Feld request.price enthält (das Fehlen eines solchen Feldes ist nur für den Marktausführungsmodus zulässig). Es stellt sich also heraus, dass, solange request.price==0.die Handelsabfrage ergibt den Fehler 10016 ("falsche Stops"). Was machen sie falsch?
Sie sind nämlich nicht normalisiert. (verwenden Sie die Schaltfläche SRC, um den Code einzufügen).
Überprüfung der Funktionalität des automatischen Einfügens von Links
1. Вставляйте код правильно (Ctrl+Alt+M).
1. Fügen Sie den Code korrekt ein (Strg+Alt+M).
2. Beginnen wir mit der Tatsache, dass Ihr Antrag nicht das Pflichtfeld request.price enthält (das Fehlen eines solchen Feldes ist nur im Marktausführungsmodus zulässig). Es stellt sich also heraus, dass, solange request.price==0.Ich danke Ihnen. Setzen Sie den Preis ein, es funktioniert.
Bitte helfen Sie mir, ich kann nichts verstehen.
|9|8|7|6|5|4|3|2|1|0| <-- Zeitreihe Raten
CopyRates(Symbol(),Zeitraum(),Zeit,2,Ergebnis);
Ich habe zum Beispiel den Zeitpunkt der Kerze Nr. 3 angegeben. In diesem Fall erhalte ich die Kurse der Leuchter Nr. 3 und Nr. 4 zurück. Aber wie bekommt man die Kurse der Leuchter Nr. 3 und Nr. 2, wenn man eine offene Zeit des Leuchters Nr. 3 hat. Die negative Zahl wird nicht verdaut.
Ich hatte die Idee, einen Index von Sorten zu finden, aber um das zu tun, muss ich alle Elemente aus dem aktuellen kopieren, aber, Donnerwetter, wenn ich M1 und eine Bar 10 Jahre alt habe, dann ist das Array zu groß.
Vielen Dank im Voraus
Guten Tag!
Könnten Sie bitte erklären, in welchen Einheiten der Datenverkehr auf der Registerkarte "Dienste" von MetaTrader 5 Strategy Tester (MetaTester 5 Agents Managers build 712) gemessen wird? Wird es in KiloBytes|MegaBytes oder KiloBytes|MegaBytes gemessen?
Ich danke Ihnen.
Leute, könnt ihr mir sagen, ob es einen Indikator oder ein Objekt in der Basis gibt, mit dem man die Charts anderer Währungen auf dem Hauptchart anzeigen kann?
p.s. Ich habe meine eigene für mt4 geschrieben, aber vielleicht gibt es eine fertige hier...
Leute, könnt ihr mir sagen, ob es einen Indikator oder ein Objekt in der Basis gibt, mit dem man die Charts anderer Währungen auf dem Hauptchart anzeigen kann?
p.s. Ich habe meine eigene für mt4 geschrieben, aber vielleicht gibt es eine fertige hier...
Gefunden, es ist bereits geschrieben, z**** , Sie müssen es nicht selbst schreiben. https://www.mql5.com/ru/code/1055