Diskussion zum Artikel "Arbeiten mit Sockets in MQL, oder Wie man ein Signalprovider wird" - Seite 7

[Gelöscht]  
Wemerson Guimaraes:

Hallo, Dieser Code funktioniert auf MQL4?

Ich versuche, es zu mql4 zu portieren, und wenn die DLL bind() Funktion bei MQL StartServer-Funktion aufgerufen wird, gibt mir die Meldung unten:



 

Ein weiterer sehr nützlicher Artikel!

Diese Option ist viel bequemer als Dateien und DB.

Danke camarad ;)

 
Wemerson Guimaraes:

Hallo, funktioniert gut auf MT4.


Tx Kumpel. Unglaublicher Code!

Hallo, ich versuche, dies auf MQL4 zu ändern, stoße aber auf Probleme wegen der Trade.mqh-Anforderung auf signalclient. Wie haben Sie es gemacht?

Wenn Sie könnten, teilen Sie bitte Ihre MT4-Version als auch, es wird helfen, Neulinge wie mich aus.

Mit freundlichen Grüßen


[Gelöscht]  

Ich habe angefangen, Trades zu kopieren, habe einen Expert Advisor (Server/Client) auf die Charts jedes gehandelten Symbols für Multicurrency Expert Advisor gesetzt, der Expert Advisor hat eine Menge Trades während des Abends-Nachts-Morgens generiert, aber einige Trades sind nach den kopierten Volumina verloren gegangen.

D.h. als Minimum ist es notwendig, eine periodische Überprüfung der Notwendigkeit einer Zwischensynchronisation von Server- und Client-Positionsvolumen hinzuzufügen, ähnlich wie es im Signals-Dienst funktioniert.

Tja, und nach dem Notfall-Neuladen von Terminals sendet der Server aus irgendeinem Grund Nachrichten an die Clients, dass er Nullpositionen hat (obwohl das nicht stimmt), und die Clients schließen gehorsam ihre Positionen. Das sind solche Beobachtungen.

Vielen Dank für den Artikel mit den Beispielen, ich werde auf ihrer Grundlage einen Signaldienst einrichten.

S.Y.:

Очевидно, что данные примеры сервера, рассылающие любому клиенту информацию, не являются оптимальными. К примеру, вы наверняка захотите ограничить доступ к своей информации.  Значит, как минимум, к обязательным требованиям необходимо отнести:

  • Kundenautorisierung (Login/Passwort);
  • Passwortschutz (Verbot/Blockierung von Login oder IP).

Wie kann man das implementieren? Ich habe keine Ahnung davon (selbst wenn man einen Server/Client auf einem lokalen Rechner laufen lässt, ist ein Client mit dem Server verbunden).

 
Aleksandr Volotko:

Wie kann dies implementiert werden? Null Wissen über diese (auch mit einem Server/Client auf dem lokalen Rechner, einige links Client mit dem Server verbunden).

https://www.mql5.com/en/code/15534

Adding password protection to your Indicator / Expert Advisor
Adding password protection to your Indicator / Expert Advisor
  • Stimmen: 19
  • 2016.05.25
  • Claude Beaudoin
  • www.mql5.com
Several methods of protecting your code have been proposed over the past, but were either too simple (less secure), required re-compilation of your code for each new customer (ok if you only plan on having a dozen or so customers) or far too complicated involving a remote host to validate the client terminal. Here I propose a simple password...
[Gelöscht]  
fxsaber:


Danke, ich werde mir das mal ansehen.

[Gelöscht]  
Aleksandr Volotko:

Nun, nach dem Notfall-Neuladen der Terminals sendet der Server aus irgendeinem Grund Nachrichten an die Clients, dass er null Positionen hat (obwohl das nicht stimmt), und die Clients schließen gehorsam ihre Positionen. Solche Beobachtungen.

Ich verstehe, dass alle Arten von Missverständnissen mit Positionen auftreten, weil die Momente, wenn das Terminal gestartet hat, aber noch nicht mit dem Trading-Server verbunden, und die Sockets werden sofort angehoben und entweder der Server sendet Informationen über das Fehlen von Positionen an die Kunden und sie decken die Positionen, die sie haben, oder der Kunde erhält Informationen vom Server über Positionen und bis er seine eigenen sieht - eilt, um sie zu öffnen, die Sicherung der verfügbaren Volumina. Ich gehe davon aus, dass eine vorherige Überprüfung der Terminalverbindung mit dem Handelsserver diese Missverständnisse beseitigen wird.

Ansonsten ist die Stabilität der Sockets erfreulich.

Hinzugefügt:

Eine verdammte takki slip von den Server-Nachrichten mit Null Volumen von Positionen, die nicht wahr ist, verstehe ich nicht, wie dies geschieht und wo diese Nullen genommen werden.

2018.02.10 17:42:49.549 signalclient (USDCHF,M15)       connect OK
2018.02.10 17:42:49.555 signalclient (USDCAD,M15)       connect OK
2018.02.10 17:42:49.555 signalclient (NZDUSD,M15)       connect OK
2018.02.10 17:42:49.555 signalclient (USDJPY,M15)       connect OK
2018.02.10 17:42:49.581 signalclient (AUDUSD,M15)       connect OK
2018.02.10 17:42:49.582 signalclient (GBPUSD,M15)       connect OK
2018.02.10 17:42:49.596 signalclient (EURUSD,M15)       connect OK
2018.02.10 17:42:50.562 signalclient (USDCHF,M15)       received msg from server: <<USDCHF|0.00>>
2018.02.10 17:42:50.562 signalclient (NZDUSD,M15)       received msg from server: <<NZDUSD|0.00>>
2018.02.10 17:42:50.562 signalclient (NZDUSD,M15)       server position: NZDUSD|0.00
2018.02.10 17:42:50.562 signalclient (USDJPY,M15)       received msg from server: <<USDJPY|0.00>>
2018.02.10 17:42:50.562 signalclient (USDCHF,M15)       server position: USDCHF|0.00
2018.02.10 17:42:50.562 signalclient (USDCAD,M15)       received msg from server: <<USDCAD|0.00>>
2018.02.10 17:42:50.562 signalclient (USDJPY,M15)       server position: USDJPY|0.00
2018.02.10 17:42:50.562 signalclient (USDCAD,M15)       server position: USDCAD|0.00
2018.02.10 17:42:50.574 signalclient (USDCAD,M15)       full close position
2018.02.10 17:42:50.575 signalclient (USDJPY,M15)       nothing change
2018.02.10 17:42:50.575 signalclient (NZDUSD,M15)       full close position
2018.02.10 17:42:50.577 signalclient (USDCHF,M15)       nothing change
2018.02.10 17:42:50.593 signalclient (AUDUSD,M15)       received msg from server: <<AUDUSD|0.00>>
2018.02.10 17:42:50.593 signalclient (AUDUSD,M15)       server position: AUDUSD|0.00
2018.02.10 17:42:50.594 signalclient (GBPUSD,M15)       received msg from server: <<GBPUSD|0.00>>
2018.02.10 17:42:50.594 signalclient (GBPUSD,M15)       server position: GBPUSD|0.00
2018.02.10 17:42:50.600 signalclient (GBPUSD,M15)       full close position
2018.02.10 17:42:50.601 signalclient (AUDUSD,M15)       full close position
2018.02.10 17:42:50.609 signalclient (EURUSD,M15)       received msg from server: <<EURUSD|0.00>>
2018.02.10 17:42:50.609 signalclient (EURUSD,M15)       server position: EURUSD|0.00
2018.02.10 17:42:50.613 signalclient (EURUSD,M15)       nothing change
2018.02.10 17:42:50.701 signalclient (USDCAD,M15)       CTrade::OrderSend: market sell 3.54 USDCAD [market closed]
2018.02.10 17:42:50.701 signalclient (NZDUSD,M15)       CTrade::OrderSend: market sell 2.50 NZDUSD [market closed]
2018.02.10 17:42:50.705 signalclient (GBPUSD,M15)       CTrade::OrderSend: market sell 0.10 GBPUSD [market closed]
2018.02.10 17:42:50.705 signalclient (AUDUSD,M15)       CTrade::OrderSend: market buy 1.27 AUDUSD [market closed]

Wenn nicht geschlossen Marktpositionen würde aus irgendeinem Grund zusammengebrochen sein....

H.Y.: und es passiert hin und wieder, wenn man die Terminals neu lädt - ist alles normal, wie es sein sollte, und das andere Mal schließt es alles auf Null....

Alexey ( @o_o ), wenn du weißt, wo du graben kannst, bitte.

Ich habe die Terminals danach neu gebootet und es gab keine Probleme, alles funktionierte wie es sollte....

2018.02.10 17:51:17.896 signalclient (EURUSD,M15)       close socket
2018.02.10 17:51:17.896 signalclient (AUDUSD,M15)       close socket
2018.02.10 17:51:17.896 signalclient (USDJPY,M15)       close socket
2018.02.10 17:51:17.898 signalclient (USDCAD,M15)       close socket
2018.02.10 17:51:17.899 signalclient (NZDUSD,M15)       close socket
2018.02.10 17:51:17.900 signalclient (GBPUSD,M15)       close socket
2018.02.10 17:51:17.901 signalclient (USDCHF,M15)       close socket
2018.02.10 17:52:02.337 signalclient (AUDUSD,M15)       connect OK
2018.02.10 17:52:02.340 signalclient (USDCHF,M15)       connect OK
2018.02.10 17:52:02.340 signalclient (USDCAD,M15)       connect OK
2018.02.10 17:52:02.432 signalclient (EURUSD,M15)       connect OK
2018.02.10 17:52:02.481 signalclient (GBPUSD,M15)       connect OK
2018.02.10 17:52:02.481 signalclient (NZDUSD,M15)       connect OK
2018.02.10 17:52:02.665 signalclient (USDJPY,M15)       connect OK
2018.02.10 17:52:03.350 signalclient (AUDUSD,M15)       received msg from server: <<AUDUSD|-1.27>>
2018.02.10 17:52:03.350 signalclient (USDCHF,M15)       received msg from server: <<USDCHF|0.00>>
2018.02.10 17:52:03.350 signalclient (USDCHF,M15)       server position: USDCHF|0.00
2018.02.10 17:52:03.350 signalclient (USDCAD,M15)       received msg from server: <<USDCAD|3.54>>
2018.02.10 17:52:03.350 signalclient (AUDUSD,M15)       server position: AUDUSD|-1.27
2018.02.10 17:52:03.350 signalclient (USDCAD,M15)       server position: USDCAD|3.54
2018.02.10 17:52:03.360 signalclient (AUDUSD,M15)       nothing change
2018.02.10 17:52:03.360 signalclient (USDCAD,M15)       nothing change
2018.02.10 17:52:03.360 signalclient (USDCHF,M15)       nothing change
2018.02.10 17:52:03.444 signalclient (EURUSD,M15)       received msg from server: <<EURUSD|0.00>>
2018.02.10 17:52:03.444 signalclient (EURUSD,M15)       server position: EURUSD|0.00
2018.02.10 17:52:03.449 signalclient (EURUSD,M15)       nothing change
2018.02.10 17:52:03.492 signalclient (GBPUSD,M15)       received msg from server: <<GBPUSD|0.10>>
2018.02.10 17:52:03.492 signalclient (NZDUSD,M15)       received msg from server: <<NZDUSD|2.50>>
2018.02.10 17:52:03.492 signalclient (NZDUSD,M15)       server position: NZDUSD|2.50
2018.02.10 17:52:03.492 signalclient (GBPUSD,M15)       server position: GBPUSD|0.10
2018.02.10 17:52:03.498 signalclient (NZDUSD,M15)       nothing change
2018.02.10 17:52:03.498 signalclient (GBPUSD,M15)       nothing change
2018.02.10 17:52:03.679 signalclient (USDJPY,M15)       received msg from server: <<USDJPY|0.00>>
2018.02.10 17:52:03.679 signalclient (USDJPY,M15)       server position: USDJPY|0.00
2018.02.10 17:52:03.683 signalclient (USDJPY,M15)       nothing change
 

im Server graben. wo er feststellt, wie viele Lots er pro Symbol offen hat

Fügen Sie Fehlerprüfungen für MQL-Positionsabfragefunktionen usw. hinzu.

Fügen Sie einen Ausdruck dort zu sehen, dass es MQL, die Nullen zurückgegeben und nicht die Steckdose, die dumm war.

[Gelöscht]  

Ich habe OnTrade() aus OnInit()- und OnTrade() entfernt, vielleicht ist das das Ende des Schlamassels.

H.Y.: Es ist noch nicht vorbei. Aber ein paar Prüfungen der Terminalverbindung mit dem Handelsserver scheinen das Problem gelöst zu haben.

 

Hallo zusammen,


Ich bin auf MQL5 kompilieren und ich halte den Fehler erhalten:

cannot cast 'sockaddr_in' to 'ref_sockaddr'

in der Zeile:

ref_sockaddr ref=(ref_sockaddr)addrin;

EDIT:

Für diejenigen, die es interessiert, habe ich das Problem durch manuelles Kopieren der Felder von einer Struktur in eine andere gelöst.

Hier ist der Code:

...
  // NICHT ARBEITEN
  // ref_sockaddr ref = (ref_sockaddr) addrin;
  // my WA - ARBEITEN
  ref_sockaddr ref = {0};
  sockaddrIn2RefSockaddr( addrin, ref );
...

// ------------------------ 
// Umwandlung (Kopieren) einer struct sockaddr_in in eine struct ref_sockaddr
// ------------------------
void sockaddrIn2RefSockaddr( sockaddr_in& sai, ref_sockaddr& rsa ) {
  // Familie
  rsa.ref[ 0] = (char) (( sai.sin_family      ) & 0xff );
  rsa.ref[ 1] = (char) (( sai.sin_family >> 8 )) ;
  // Hafen
  rsa.ref[ 2] = (char) (( sai.sin_port        ) & 0xff) ;
  rsa.ref[ 3] = (char) (( sai.sin_port >>  8  ) );
  // Adresse
  rsa.ref[ 4] = (char) (( sai.sin_addr        ) & 0xff );
  rsa.ref[ 5] = (char) (( sai.sin_addr >>  8  ) & 0xff );
  rsa.ref[ 6] = (char) (( sai.sin_addr >> 16  ) & 0xff );
  rsa.ref[ 7] = (char) (( sai.sin_addr >> 24  ) & 0xff );
  rsa.ref[ 8] = (char) (( sai.sin_addr >> 32  ) & 0xff );
  rsa.ref[ 9] = (char) (( sai.sin_addr >> 40  ) & 0xff );
  rsa.ref[10] = (char) (( sai.sin_addr >> 48  ) & 0xff );
  rsa.ref[11] = (char) (( sai.sin_addr >> 56  ) & 0xff );
  // Null
  rsa.ref[12] = 0;
  rsa.ref[13] = 0;
  rsa.ref[14] = 0;
  rsa.ref[15] = 0;
}
Ich möchte hinzufügen, dass ich viele Kompilierungsfehler bei einigen WSA-Fehlercodes hatte, die ich manuell aus winsock.h importieren musste, und bei der Funktion:
WSAErrorDescript