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

 

Liebe Genießerinnen und Genießer!

Ich hoffe, ich stelle eine Frage in der richtigen Branche!

Die Frage ist: ist es möglich, #define zu verwenden, um ein Konstrukt zu definieren, das sich zu folgendem Code entfalten würde:

if(a) printf("%s(%04d)", __FUNCTION__, __LINE__) +printf("%s", _Symbol);

Dies ist zum Verständnis... Die richtige Konstruktion könnte anders sein. Idealerweise würde ich gerne eine Lösung finden, so dass jedes printf() am Anfang der Ausgabezeichenfolge mit dem Konstrukt "Function(string in function)" vor der Zeichenfolge gedruckt wird, wenn die Bedingung erfüllt ist. Dies alles dient der Verkürzung der schriftlichen Anweisungen

Und ich möchte, dass das rot hervorgehobene Konstrukt durch das folgende (ähnliche) ersetzt wird:

#define P(a) if(Variable>=a) printf("%s(%04d)", __FUNCTION__, __LINE__)

Ich habe etwas in Inet gefunden, das ein bisschen ähnlich ist, aber ich habe noch nicht mit Klassen gearbeitet, daher kann ich die Arbeitscodes noch nicht ausarbeiten. Ich habe versucht, das untere Konstrukt in der folgenden Form anzuwenden

P(3)+printf("%s(%s) Accuracy=%d", Symbol, (Command==0? "Buy": "Sell"), Accuracy);

Aber jeder derartige Eintrag im Code verursacht den 'Print'-Fehler - Ausdruck vom Typ 'void' ist illegal ...

 

Hallo!

Bitte erklären Sie den Unterschied zwischen

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}

и

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}

Ich danke Ihnen!

 
ski1973:

Hallo!

Bitte erklären Sie den Unterschied zwischen

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;}

и

if(OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)==false){PrintFormat("OrderSelect error %d",GetLastError());return;}

Danke!

Es gibt keinen logischen Unterschied. Der Unterschied liegt nur darin, wie dieser logische Vergleich formuliert ist.

Das "!"-Zeichen steht für "NOT". Das heißt, if(!Select()) ist dasselbe wie if(Select()==false). Auf Russisch sieht es so aus: if(NOT Select()).

Sie können den Wert einer booleschen Variablen schnell "invertieren":

bool var = true;
Print("1. var=",(string)var);
var=!var;
Print("2. var=",(string)var);
 

Ich habe eine weitere Frage. Im Folgenden finden Sie ein Beispiel für ein Programm.

double Lots=0.01;

int Schlupf=30;

int Subr1()

{

int result=-1;

int_result=OrderSend(_symbol,OP_BUY,Lots,Slippage,0,0);

if(int_res<0){PrintFormat("OrderSend error = ",GetError());}

return int_result;

}

void OnTick()

{

int numer=-10;
if(OrdersTotal()==0)numer=Subr1();

if(OrdersTotal()>0)Subr2(numer);

Rückkehr;

}

void Subr2(int order)

{

if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());

}

Antwort: OrderSelect-Fehler 4051. Wenn ich es durch SELECT_BY_POS ersetze, hat OrderSelect den Fehler 1. Die Reaktion ist die gleiche für den Strategietester und den "Run on Real Data". Ich habe versucht, MODE_TRADES für den Fall von SELECT_BY_TICKET zu entfernen: Es gibt keinen Unterschied. Wo liegt das Problem und wie kann man es beheben? Ich danke Ihnen!

 
ski1973:

Antwort: OrderSelect-Fehler 4051. Wenn ich es durch SELECT_BY_POS ersetze, hat OrderSelect den Fehler 1. Die Reaktion ist die gleiche für Strategietester und "auf echten Daten laufen". Ich habe versucht, MODE_TRADES für den Fall von SELECT_BY_TICKET zu entfernen: Es gibt keinen Unterschied. Wo liegt das Problem und wie kann man es beheben? Ich danke Ihnen!

SELECT_BY_POS ist die Auswahl eines Auftrags "nach Priorität" in der Liste der Aufträge und in Ihrem Entwurf:

void Subr2(int order)
{
if(!OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES)){PrintFormat("OrderSelect error %d",GetLastError());return;} else PrintFormat("Ok, OrderTicket = ",OrderTicket());
}

Sie versuchen, einen Auftrag auszuwählen, der in der Auftragswarteschlange steht ... und Sie verwenden hier die Ticketnummer und Sie haben nur 1 Bestellung und die Ticketnummer 10023444 .... Na und? Hier brauchen Sie eine Zahl von 1 bis 2,3 ... also, wie viele Aufträge Sie auf dem Markt haben, ... korrigiert die Zahl von 0,1,2 ... - Die Nummerierung beginnt mit 0 und geht bis zuOrdersTotal()-1...

SELECT_BY_TICKET sollte funktionieren, aber nur bis zu dem Moment, in dem Sie die Ticketnummer haben, d.h. den Auftrag, den Sie auf dem Markt haben, und darüber haben Sie eine Prüfung, um den Auftrag zu senden, und wenn der Auftrag nicht gesendet wird, das Ticket = -1 !

Und alles in allem ist Ihr Entwurf für die Arbeit mit Aufträgen nicht korrekt. Wenn Sie sich entschieden haben, MQL zu studieren, finden Sie hier fertige Beispiele für die Arbeit mit Aufträgenhttps://www.mql5.com/ru/forum/131859

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Vitaly Muzichenko:

Sie sprechen über Arrays und Sie sprechen über Forex. Was für ein Paradoxon!

Und ein Dummkopf weiß, dass alle Grundfelder in MT4/MT4 gepuffert sind.

Nicht das gleiche Niveau der Programmierer in MT4/MT5, um den Benutzern die Arbeit mit grundlegenden Arrays zu ermöglichen.

Außerdem haben die Basis-Arrays in MT4/MT5 eine eigene Erweiterung (.hts oder .hss - ich weiß es nicht mehr genau, aber so ähnlich).

Sie kommen also nicht in einem Textformat (mit der Erweiterung .txt) zum Terminal, sondern in ihrem eigenen Format.

Und in MT4/MT5 werden die Basis-Arrays dekodiert und in Arrays ausgewählter Zeitrahmen (1-Minute, 5-Minute, 15-Minute usw.) umgewandelt, und erst danach werden sie dupliziert und gepuffert.

Warum sind sie gepuffert?

Zum Vergleich. Damit keine Daten verloren gehen. Eines dieser Arrays wird ständig neu berechnet (von Zeit zu Zeit), und das zweite (vom ersten kopiert) wird verwendet, wenn wir unsere Benutzerdaten hineinkopieren.

Mit anderen Worten: Das Verfahren zur Bereitstellung der Daten für die Nutzer ist recht komplex.

Hier geht es um Arrays, falls Sie daran interessiert sind.

Übrigens haben die grundlegenden MT4/MT5-Arrays von Android und Windows die gleiche Erweiterung.

--------------------------------------------------------------------------------------------------------------------------------

Was den Import von DYNAMIC-Daten in MT4/MT5 aus Drittquellen betrifft, so ist ein solcher Import meines Wissens nicht vorgesehen.

Es gibt also kein Client/Server-Verfahren in C++Builder in MT4/MT5.

--------------------------------------------------------------------------------------------------------------------------------

Ich frage mich, ob dieses Verfahren in der Bibliothek zu finden sein wird.

http://tol64.blogspot.com/2015/12/easy-and-fast-gui-mql.html

Höchstwahrscheinlich wird sie auch dort nicht zu finden sein.

Das heißt, Sie können versuchen, dynamische Arrays in MT4/MT5 nur im Basisformat zu importieren, wo sie automatisch die Standarddatenverarbeitung durchlaufen.

Библиотека "Easy And Fast GUI" для создания графических интерфейсов на MQL
  • tol64.blogspot.com
С этой статьи я начинаю еще одну серию, относящуюся к разработке графических интерфейсов. На текущий момент нет ни одной библиотеки кода, которая позволяла бы легко и быстро создавать качественные графические интерфейсы в MQL-приложениях. Я имею в виду графические интерфейсы, к которым мы все привыкли в известных операционных системах. Цель проекта — дать конечному пользователю такую возможность и научить это делать с помощью моей библиотеки. Я постарался сделать ее максимально понятной в изучении, с возможностями дальнейшего развития.
 
neverness:

Und ein Dummkopf weiß, dass alle Grundfelder in MT4/MT4 gepuffert sind.

Die Programmierer in MT4/MT5 sind nicht auf demselben Niveau wie die Programmierer in MT4/MT5, die es den Benutzern ermöglichen, mit einfachen Arrays zu arbeiten.

Außerdem haben die Basis-Arrays in MT4/MT5 eine eigene Erweiterung (.hts oder .hss - ich weiß es nicht mehr genau, aber so ähnlich).

Sie kommen also nicht in einem Textformat (mit der Erweiterung .txt) zum Terminal, sondern in ihrem eigenen Format.

Und in MT4/MT5 werden die Basis-Arrays dekodiert und in Arrays ausgewählter Zeitrahmen (1-Minute, 5-Minute, 15-Minute usw.) umgewandelt, und erst danach werden sie dupliziert und gepuffert.

Warum sind sie gepuffert?

Zum Vergleich. Damit keine Daten verloren gehen. Eines dieser Arrays wird ständig neu berechnet (von Zeit zu Zeit), und wir verwenden das zweite (aus dem ersten kopierte) beim Kopieren in unsere Benutzerdaten.

Mit anderen Worten: Das Verfahren zur Bereitstellung der Daten für die Nutzer ist recht komplex.

Hier geht es um Arrays, falls Sie daran interessiert sind.

Übrigens haben die grundlegenden MT4/MT5-Arrays von Android und Windows die gleiche Erweiterung.

Du hast so ein Durcheinander in deinem Kopf, dass ich nicht einmal über die

Sie haben in MQL einiges durcheinander gebracht - Arrays, Dateien, Zeitreihen und Indikatorpuffer.

Wenn Sie es schaffen, die Informationen, die ich in einer Zeile gegeben habe, zu verdauen, gebe ich Ihnen einige Denkanstöße: MT4 und MT5 speichern historische Daten auf unterschiedliche Weise, in MT4 hat ein Benutzer Zugriff auf.hst-Dateien https://docs.mql4.com/ru/files/fileopenhistory

In MT5 gibt es keinen direkten Zugang zu History-Dateien, aber es gibt die Arbeit mit benutzerdefinierten Symbolenhttps://www.mql5.com/ru/docs/customsymbols

FileOpenHistory - Файловые операции - Справочник MQL4
FileOpenHistory - Файловые операции - Справочник MQL4
  • docs.mql4.com
[in]  Режим открытия. Это может быть одна величина или их комбинация: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE. Клиентский терминал может подключаться к серверам разных брокерских компаний. Исторические данные (файлы HST) каждой брокерской компании хранятся в соответствующей подпапке папки истории...
 
Igor Makanu:

Du hast ein solches Durcheinander in deinem Kopf, dass ich nicht einmal daran vorbeikomme.

Was Sie in MQL gemacht haben, sind Arrays, Dateien und Indikatorpuffer

Wenn Sie es schaffen, die Informationen, die ich in einer Zeile gegeben habe, zu verdauen, werde ich Ihnen einige Denkanstöße geben: MT4 und MT5 speichern historische Daten auf unterschiedliche Weise, in MT4 hat ein Benutzer Zugang zu.hst-Dateien https://docs.mql4.com/ru/files/fileopenhistory

In MT5 gibt es keinen direkten Zugang zu History-Dateien, aber es gibt die Arbeit mit benutzerdefinierten Symbolenhttps://www.mql5.com/ru/docs/customsymbols

Ich habe in meinem Beitrag kein einziges Wort über historische Akten verloren.

Sie haben schon wieder etwas verwechselt, und schon wieder ist das Thema verfehlt.

Ich habe von DYNAMISCHEN Datensätzen gesprochen. Das ist ein ganz anderes Thema. Spüren Sie den Unterschied.

 
neverness:

Ich habe in meinem Beitrag überhaupt kein Wort über die Geschichtsdateien verloren.

Sie sind schon wieder verwirrt, und wieder vom Thema abgekommen.

Ich sprach von dynamischen Datenarrays. Das ist ein ganz anderes Thema.

Außerdem haben die grundlegenden Arrays in MT4/MT5 sogar eine eigene Erweiterung (.hts oder .hss - ich weiß es nicht mehr genau, aber so ähnlich).

OK, fahren Sie fort, ich verstehe nicht, warum Sie in diesem Forumsthread sind

Unvergänglichkeit:

Ich habe von DYNAMISCHEN Datensätzen gesprochen. Dies ist ein völlig anderes Thema. Spüren Sie den Unterschied.

gefühlt, sollten Sie auch verstehen, dass in allen Programmiersprachen dynamische Arrays einfach dynamische Arrays sind undZeitreihenZeitreihensindund ein Teil der Arbeit (Zugriff) mitZeitreihen wie die Arbeit mit Arrays organisiert ist...
 
Igor Makanu:

OK, fahren Sie fort, ich verstehe nicht, warum Sie in diesem Forumsthread sind

Ich denke, Sie sollten auch verstehen, dass in allen Programmiersprachen dynamische Arrays nur dynamische Arrays sind undZeitreihenZeitreihensindund ein Teil der Arbeit (Zugriff) mitZeitreihen als Arbeit mit Arrays organisiert ist...

Hier wird die Frage der Datenbildung im Terminal sehr ausführlich diskutiert:

http://profitraders.com/Python/hstRead.html

Ich möchte die Leser darauf aufmerksam machen, dass es in diesem Artikel NICHT um historische Daten geht. Diese finden Sie unter: MT4->Service->Zahlenarchiv,

und direkt über die DYNAMISCHEN Daten des Terminals im .hst-Format, die direkt in den Prozess der Gewinnung und Verarbeitung von Marktpreisen involviert sind.

------------------------------------------------------------------------------------------

Vielleicht habe ich mich nicht klar genug ausgedrückt. Andere Autoren lesen. Ich hoffe, es wird klarer.

Чтение файла HST истории котировок Metatrader 4 — ProfiTraders.com
  • profitraders.com
Файлы истории котировок Metatrader 4 имеют расширение и находятся в папке данных торгового терминала, в каталоге . Они сгруппированы в подкаталогах, имена которых совпадают с названиями серверов, например: или . Имена файлов начинаются с наименования торгового инструмента, далее указывается таймфрейм (количество минут), например, для часового...
Grund der Beschwerde: