Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1284

 
Igor Makanu:

https://www.mql5.com/ru/docs/dateandtime/timecurrent verwenden.

zweite Version des Funktionsaufrufs

im Allgemeinen ist eshttps://www.mql5.com/ru/docs/dateandtime/timetostruct

Vielen Dank für die wertvollen Informationen.

Ich weiß, wie die Struktur aussieht und wie sie funktioniert, aber ich habe noch nicht alle Einzelheiten verstanden.

Ich habe die Feinheiten, die damit verbunden sind, noch nicht ganz begriffen. Ich lerne den neuen Stoff viel besser mit Hilfe von anschaulichen Beispielen.
Ich wäre Ihnen sehr dankbar, wenn Sie mir zeigen könnten, wie ich den Code der folgenden Bedingung in mql5
schreiben kann. Ich habe gelernt, wie man einen Auftrag mit der Struktur


if(Stunde()==10)

um einen Auftrag zu eröffnen.

Sie müssen das Muster nicht schreiben, um die Bestellung zu öffnen.... Nur eine Aufzeichnung des Zustands.

Nochmals vielen Dank für Ihre Hilfe.

 
Igor Makanu:

muss die Art und Weise sein, wie Sie den Preis und die Zeit des Taktes bestimmen wollen:

Oder besser gesagt, es sind die Mausklick-Koordinaten in den Zeit- + Preiswerten im Chart, der Balken sollte über iBarShift() definiert werden

Ja, das ist es, wie es weiter verstanden wird. Dankeschön)

 
ANDREY:

Vielen Dank für die wertvollen Informationen.

Ich weiß, was die Struktur ist und wie sie funktioniert, aber ich habe die Einzelheiten noch nicht verstanden.

Ich lerne neuen Stoff besser mit Beispielen. Ich lerne den neuen Stoff viel besser mit Hilfe von anschaulichen Beispielen.
Ich wäre Ihnen sehr dankbar, wenn Sie mir zeigen könnten, wie ich den Code der folgenden Bedingung in mql5
schreiben kann. Ich habe gelernt, wie man einen Auftrag mit der Struktur


if(Stunde()==10)

um einen Auftrag zu eröffnen.

Sie müssen das Muster nicht schreiben, um die Bestellung zu öffnen.... Nur eine Aufzeichnung des Zustands.

Nochmals vielen Dank für Ihre Hilfe.

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

Herzlichen Dank für Ihre Hilfe. Jetzt ist alles klar und verständlich.

 

Guten Tag zusammen!
Ich versuche von mql4 auf mql5 umzusteigen. Ich habe einen einfachen Code erstellt, der Aufträge zum Testen öffnet. Im Testgerät öffnet der EA Aufträge. Ich habe die Funktion Print() am Anfang der void OnTick() Funktion platziert und mein Expert Advisor würde diese Funktion bei jedem Tick eingeben und bei jedem Tick im Journal ausdrucken. Und beim fünften Tick gibt der Expert Advisor keine der Print()-Funktionen ein und druckt nichts in das Car Registration Journal. Visualisierung und Optimierung sind im Expert Advisor deaktiviert.
Wie kann man den Code so ändern, dass Print() bei jedem Häkchen im Journal gedruckt wird, wie im 4.
Vielen Dank im Voraus an diejenigen, die mir helfen.

Hier ist mein Code

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

Ich habe die Einlage von EA auf 100 000 erhöht. Infolgedessen wird bei jedem Tick Print() im Journal gedruckt..... Es wurde jedoch kein einziger Handel eröffnet.

Aber ich brauche es, um Angebote zu öffnen und Print() gedruckt werden.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

Guten Tag zusammen!
Ich versuche von mql4 auf mql5 umzusteigen. Ich habe einen einfachen Code erstellt, der Aufträge zum Testen öffnet. Im Testprogramm öffnet mein EA Aufträge. Ich habe die Funktion Print() am Anfang der Funktion void OnTick() platziert und mein Expert Advisor würde diese Funktion bei jedem Tick eingeben und bei jedem Tick im Journal ausdrucken. Und beim fünften Tick gibt der Expert Advisor keine der Print()-Funktionen ein und druckt nichts in das Car Registration Journal. Visualisierung und Optimierung sind im Expert Advisor deaktiviert.
Wie kann man den Code so ändern, dass Print() bei jedem Häkchen im Journal gedruckt wird, wie im 4.
Vielen Dank im Voraus an diejenigen, die mir helfen.

Hier ist mein Code

Ich habe die Einlage von EA auf 100 000 erhöht. Infolgedessen wird bei jedem Tick Print() im Journal gedruckt..... Es wurde jedoch kein einziger Handel eröffnet.

Aber ich brauche Trades geöffnet wurden und Print() gedruckt wurde.

Schauen Sie sich die Protokolle an, schauen Sie sich an, was gedruckt wird, die Informationen werden dort bei jedem Schritt eingetragen. Höchstwahrscheinlich ist etwas mit dem Öffnen von Aufträgen nicht in Ordnung und der EA funktioniert nicht.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

Wir haben bereits diskutiert, ob es notwendig ist, wiederholt auf Terminaldaten von MQL4 zuzugreifen, dann OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

Ich denke, dass es möglich ist, es auch 100500 Mal pro Tick zu verwenden, da die Ausgabe Millionen Mal pro Sekunde erhöht wird.


Je mehr Symbole sich im Marktbeobachtungsfenster befinden, desto größer ist die Last auf dem Terminal selbst, und wenn Sie Daten von vielen verschiedenen Symbolen abrufen, kommt es zu Verzögerungen

d.h. wenn Sie das Terminal vernünftig benutzen, wird nichts einfrieren - im Marktbeobachtungsfenster gibt es zehn Symbole, die Sie benutzen


Ich habe nicht überprüft,wie viele Charts Sie gleichzeitig öffnen können, aber ich denke, wenn Sie die Historie auf 1000 Balken begrenzen, dann wird das Terminal wahrscheinlich ein paar Dutzend Chart-Fenster ohne Probleme öffnen

100

 
Valeriy Yastremskiy:

Schauen Sie sich die Protokolle an, um zu sehen, was gedruckt wird; bei jedem Schritt werden Informationen aufgezeichnet. Wahrscheinlich ist etwas mit den Eröffnungsaufträgen nicht in Ordnung und der EA funktioniert nicht.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

Danke für den Hinweis.

Es funktioniert wirklich nicht. Dort steht.

2020.10.27 06:40:45.311 Tester EURUSD: Verlaufsdaten beginnen mit 2018.01.02 00:00

2020.10.27 06:40:45.312 Core 1 Verbindung zu 127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 verbunden

2020.10.27 06:40:45.320 Core 1 autorisiert (Agent Build 2650)

2020.10.27 06:40:45.323 Tester EURUSD,M1 (Alpari-MT5-Demo): Test von experts\GRAAL.ex5 vom 2020.09.01 00:00 bis 2020.09.03 00:00

2020.10.27 06:40:45.327 Core 1 Gemeinsame Synchronisierung abgeschlossen

2020.10.27 06:40:45.328 Tester Qualität der analysierten Historie ist 100%

2020.10.27 06:40:45.348 Core 1 test experts\GRAAL.ex5 on EURUSD,M1 thread finished

2020.10.27 06:40:45.348 Core 1

2020.10.27 06:40:45.348 Core 1 Anmeldung (build 2650)

2020.10.27 06:40:45.348 Core 1 Kontoinformationen mit Währung USD gefunden

2020.10.27 06:40:45.348 Core 1 1482 Bytes Testerparameter geladen

2020.10.27 06:40:45.348 Core 1 1724 Bytes Eingabeparameter geladen

2020.10.27 06:40:45.348 Core 1 Gewinn in Pips berechnen, Ersteinzahlung 10000, Hebelwirkung 1:100

2020.10.27 06:40:45.348 Core 1 erfolgreich initialisiert

2020.10.27 06:40:45.348 Core 1 731 Byte Gesamtinitialisierungsdaten empfangen

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz, 7883 MB

2020.10.27 06:40:45.348 Core 1 EURUSD: zu synchronisierendes Symbol

2020.10.27 06:40:45.348 Core 1 EURUSD: Symbol bereits synchronisiert, 18 Bytes empfangen

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: history cached from 2019.01.02 06:00

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): jeder Tick erzeugt

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: Test von experts\GRAAL.ex5 von 2020.09.01 00:00 bis 2020.09.03 00:00 mit Eingaben gestartet:

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 Kern 1 Los=0.1

2020.10.27 06:40:45.348 Core 1 Endstand 10000.00 pips

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 Ticks, 2880 Bars generiert. Test bestanden in 0:00:00.019.

2020.10.27 06:40:45.348 Kern 1 270 Mb Speicher verwendet, davon 35 Mb Verlaufsdaten, 64 Mb Tickdaten

2020.10.27 06:40:45.348 Core 1 Protokolldatei "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" geschrieben

2020.10.27 06:40:45.371 Core 1 Verbindung geschlossen

Ich teste es einen Tag lang. Das bedeutet, dass Expert Advisor 1440 Aufträge öffnen sollte. Möglicherweise ist das ein Problem. Möglicherweise gibt es Beschränkungen für die Anzahl der gleichzeitig offenen Aufträge.
Wenn ich es überprüft habe, kann es daran liegen, dass mein EA, als ich 10.000 auf dem Depot hatte, nur 300 Aufträge eröffnete und den Rest aus irgendeinem Grund, der mit Geld zu tun hat, verpasste (wie ich aus den Journaleinträgen verstanden habe). Später habe ich die Einlage von EA auf 100 000 erhöht, und er hatte kein Recht mehr, etwas zu überspringen. Und es wurden überhaupt keine Aufträge mehr eröffnet.

Aber dann habe ich die Einlage des EA wieder auf 10 000 gesenkt. Allerdings öffnet mein Expert Advisor immer noch nichts und schreibt immer die Werte, die ich oben angegeben habe.

Ich habe einen weiteren EA erstellt. Ich habe denselben Code heruntergeladen. Ich habe eine Anzahlung von 10 000. Ich habe das gleiche Problem: Ich habe keine Aufträge eröffnet.
Bitte beraten Sie mich, wie ich meinen EA richtig zum Laufen bringen kann. Es sendet die gleiche Nachricht, nur dass meine hervorgehobene gelbe Zeile 271 statt 270 mb anzeigt.
Ich habe Windows 10. Ich habe ein 64bit Betriebssystem und 8GB RAM.
Ich danke Ihnen.

 
ANDREY:

Danke für den Hinweis.

Es funktioniert wirklich nicht. Dort steht.


2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 Ticks, 2880 Bars generiert. Test bestanden um 0:00:00.019.

2020.10.27 06:40:45.348 Core 1 270 Mb Speicher verwendet, davon 35 Mb History-Daten, 64 Mb Tick-Daten

2020.10.27 06:40:45.348 Core 1 Protokolldatei "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" geschrieben

2020.10.27 06:40:45.371 Core 1 Verbindung geschlossen

Ich teste es einen Tag lang. Das bedeutet, dass Expert Advisor 1440 Aufträge öffnen sollte. Möglicherweise ist das ein Problem. Möglicherweise gibt es Beschränkungen für die Anzahl der gleichzeitig geöffneten Aufträge.
Wenn ich es überprüft habe, kann es daran liegen, dass mein EA, als ich 10.000 auf dem Depot hatte, nur 300 Aufträge eröffnete und den Rest aus irgendeinem Grund, der mit Geld zu tun hat, ausließ (wie ich aus den Journaleinträgen verstanden habe). Später habe ich die Einlage von EA auf 100 000 erhöht, und er hatte kein Recht mehr, etwas zu überspringen. Und es wurden überhaupt keine Aufträge mehr eröffnet.

Aber dann habe ich die Einlage des EA wieder auf 10.000 reduziert. Der Expert Advisor öffnet immer noch nichts und schreibt immer das, worauf ich oben hingewiesen habe.
Bitte beraten Sie mich, wie ich meinen EA normal zum Laufen bringen kann.
Ich werde immer versuchen, es wieder so hinzubekommen, wie es vorher war.

Wenn es 1440 Orders pro Tag gibt, sollte der Expert Advisor auf den Beginn der Minute oder, einfacher, auf das Erscheinen des Ein-Minuten-Balkens achten. Und sie öffnet sich in diesem Moment. Sie haben es nicht, und deshalb eröffnet der EA bei jedem Tick eine Position, was nach unserem Symbol bei der aktuellen Notierung selbst eine schwierige Bedingung ist. Diese Bedingung kann nicht erfüllt sein, und die Zecken werden übersehen. Und irgendwann wird ein kritischer Fehler auftreten.

Auch die Art der Auftragsausführung (Auftrag zur Erstellung einer Position) Alles oder nichts.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

Können Sie mir das bitte sagen!

Warum wird die Serverzeit nicht aktualisiert, wenn neue Ticks eintreffen?

In dem Moment, in dem EA startet, funktioniert alles wie es sollte, aber dann geht die Zeit, aber der neue Wert der aktuellen Minute kommt nicht in die Variable.

D.h. der Expert Advisor arbeitet in Abhängigkeit von der in der Variablen int M = TimeMinute(TimeCurrent()) erhaltenen Zahl;

Diese Codezeile stammt aus der Referenz, und sie funktioniert nicht.

Ich starte sie z.B. um 12 Uhr-die vom Server zurückgegebeneaktuelle Zeit entspricht der Zeit in der Variablen, aber dann bleibt die Variable auf 12 stehen, obwohl es schon 15-20 Minuten auf der Uhr sind

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...