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

 
Seric29:
Wie implementiert man Variablen vom Typ datetame und color in einer C++ dll-Bibliothek? Wie ruft man die Print()-Funktion in der DLL auf, womit kann man sie ersetzen, weil C++ sie nicht hat, und kann man es überhaupt machen, weil es kein Debugging in mql4 gibt und man oft Fehler macht oder es schwer ist, etwas beim ersten Mal zu schreiben, was kann man tun?

Haben Sie versucht, F1 zu drücken?

"Der datetime-Typ wurde entwickelt, um das Datum und die Uhrzeit als die Anzahl der seit dem 01. Januar 1970 verstrichenen Sekunden zu speichern. Sie belegt 8 Bytes im Speicher."

mit Farbtyp - üben Sie es selbst :-)

---

Beim Debuggen von dll, statt der Print-Funktion - in eine Datei drucken und darin suchen.

 
Maxim Kuznetsov:

Haben Sie versucht, F1 zu drücken?

mit Farbtyp - üben Sie es selbst :-)

---

Beim Debuggen von dll, statt Print-Funktion - in eine Datei drucken und in ihr suchen.

Ich verstehe über Print(), danke für den Tipp, und die Konsole ausgegeben werden kann, weil ich nicht mit Dateien in C++ und hier arbeiten können, und wie für datetime, ich verstehe nicht, warum Sie es überhaupt geschrieben?

 
Seric29:

Ich verstehe über print(), danke für den Rat, und die Konsole kann ausgegeben werden, weil ich nicht weiß, wie man mit Dateien in C++ und hier noch arbeiten, und wie für datetime, ich habe nicht verstanden, warum Sie es überhaupt geschrieben?

Es geht um die Darstellung in C/C++

Es handelt sich um eine 8-Byte-Ganzzahl ohne Vorzeichen unixtime, d. h. uint64_t oder time64_t, wie Sie es bevorzugen

 
Maxim Kuznetsov:

und es sagt alles über die Darstellung in C/C++

es handelt sich um eine 8-Byte-Ganzzahl ohne Vorzeichen unixtime, d. h. uint64_t oder time64_t, wie Sie es bevorzugen

weder uint64_t noch time64_t funktioniert nicht, ich habe auch versucht, <uint64_t > zu schreiben. Und wie man mit Farben arbeiten kann, ist auch nicht klar, ich habe auch keine Erklärungen im Netz gefunden, ich beschäftige mich mit dieser Frage im 2-ten Jahr?

 
Seric29:

weder uint64_t noch time64_t funktioniert Ich habe versucht, <uint64_t > zu schreiben, funktioniert auch nicht. Und ich weiß auch nicht, wie man mit Farben arbeitet, ich habe keine Erklärungen im Internet gefunden, ich beschäftige mich seit 2 Jahren mit diesem Problem.

Sie sollten zunächst nur C/C++ lernen, ohne MetaTrader und DLL. Andernfalls werden Sie nichts als Frustration und vergebliche Mühe erleben.

#include <ctime>

// или для uint64_t (что на мой взгляд вернее)

#include <cstdint>

siehe http://www.cplusplus.com/reference/

Reference - C++ Reference
Reference - C++ Reference
  • www.cplusplus.com
The elements of the C language library are also included as a subset of the C++ Standard library. These cover many aspects, from general utility functions and macros to input/output functions and dynamic memory management functions: Containers Input/Output Stream Library Provides functionality to use an abstraction called streams specially...
 
Maxim Kuznetsov:

Sie sollten zunächst nur C/C++ lernen, ohne MetaTrader und DLL. Andernfalls werden Sie frustriert sein und vergeblich arbeiten.

#include <ctime>

// или для uint64_t (что на мой взгляд вернее)

#include <cstdint>

siehe http://www.cplusplus.com/reference/

Wenn ich es richtig verstehe, nimmt es extreme Punkte und zählt sie in Sekunden, aber ich weiß nicht, wie man das übliche Format anzeigt. Ich hätte gerne einige Beispiele. Und wie kann man mit Farben arbeiten?

 

Es ist nicht klar, wie man ein Datum in diesem Format 2008.09.23 00:00 erzeugt, wenn die Variable time_t Sekunden speichert?

time_t Data()
{ return 100;} Что функции в с++ так выглядят
 

Alle Beispiele, die ich im Internet finde, lassen sich nicht einmal kompilieren, hier eines davon

int main()
{ 
  time_t rawtime;
  struct tm * ptm;
  time( &rawtime );                                     // определить текущую дату в секундах
  ptm = gmtime( &rawtime ); 
return 0;}
Offensichtlich ist es unmöglich, etwas auf diese Weise zu verstehen.
 

Hallo.

Können Sie mir sagen, warum ich beim Öffnen eines Verkaufsstopps eine Variable in den Preis-Parameter einfüge, die den gewünschten Preis speichert, und dann flucht.


int ZeroBufer;              // ticket zero
struct Order_Data_S // Структура которая заполняется по мере поступления данных.
  {
   int               ticket;
   double            price;
  };
Order_Data_S OrderBufer_S[100];

void OnTick()
  {
  double prise_s = MarketInfo(Symbol(), MODE_BID);
  double zero = prise_s;
  OrderSelect(OrderBufer_B[0].ticket,SELECT_BY_TICKET,MODE_TRADES);  //return value of 'OrderSelect' should be checked  

   if(OrderType() == 0) // открыт bay ордер
     {
      ZeroBufer = OrderSend(Symbol(),OP_SELLSTOP,lots,OrderBufer_S[0].price),3,0,0,"bs2",2,0,clrRed);  // sell stop на шаг сетки.  // 'OrderSend' - wrong parameters count. 
      //',' - unexpected token. И еще 100500 ошибок на эту строку. OrderBufer_S[0].price не пустой. Там уже находится нужная цена.
      
      if(OrderSelect(ZeroBufer,SELECT_BY_TICKET,MODE_TRADES) != true)
        {
         ZeroBufer = OrderSend(Symbol(),OP_SELLSTOP,lots,zero),3,0,0,"bs2",2,0,clrRed);
        }  // повторить, пока не откроет
     }
     }
     
     // Если вместо "OrderBufer_S[1].price" воткнуть другую переменную "zero" - в которой хранится цена, то он снова ругается, но гораздо меньше.
     // Его не устраивает эта переменная

Was sollte ich in diesem Fall tun?

Und noch eine Frage. Wie kann ich am besten überprüfen, ob die Bestellung als nächstes geöffnet wird? D.h., wenn dies der erste Auftrag ist, dann genügt der aktuelle Code für die Auswahl von Geschäften aus dem Stapel und die Überprüfung ihres Typs. Später kam jedoch der Gedanke auf, dass es zu einer gewissen Verwirrung kommen könnte. Wenn es mehr als einen Auftrag gibt, woher wissen wir dann, ob dieser Auftrag gerade erst eröffnet wurde oder schon lange besteht? Ich habe im Forum nachgesehen und dort wird empfohlen, den Preis als Grundlage zu verwenden. Wir sollten versuchen zu ermitteln, ob es einen Auftrag zu diesem Preis +/- Abweichung gibt. Aber auch hier die gleiche Frage. Woher wissen wir, ob es sich um eine neue oder eine alte Ordnung handelt? Entweder wird der Auftrag aus einem schwebenden Auftrag heraus eröffnet oder der Auftrag bestand bereits und der Preis ist einfach auf seinem Niveau.

 
Gilmor:

Hallo.

Können Sie mir sagen, warum ich beim Öffnen eines Verkaufsstopps eine Variable im Preisparameter angeben muss, die den gewünschten Preis speichert, damit er flucht.


Was sollte ich in diesem Fall tun?

Achten Sie auf die Paarung der Klammern.

ZeroBufer = OrderSend(Symbol(),OP_SELLSTOP,lots,OrderBufer_S[0].price),3,0,0,"bs2",2,0,clrRed);