automatische Funktion zur Berechnung der Losgröße? - Seite 3

 

Ah, ich sehe das Problem...Sie haben das Skript so eingestellt, dass es eine "BUY"-Order platziert, anstatt die externe Variable in BUY STOP zu ändern...deshalb hat es eine Market-Order platziert.

Aus Ihrem Beitrag:

2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Versuchen Sie BUY STOP.


Ich erhalte 0.12 Lots für EURJPY auf einem Demo-Konto mit $2300 USD

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155713274 buy stop 0.12 EURJPY bei 115.840 sl: 115.689 tp: 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: versucht OP_BUYSTOP 0.12000000 lots @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Current EquityAtRisk = $22.44 und Current Lotsize = 0.12 und Profit Target = $6.69 für ein 0.3:1 Profit:Loss Verhältnis
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max erlaubtes EquityAtRisk = $23.00 und Max berechnete Lotsize = 0.123
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 Eingaben: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
 

Ich habe auch das NZDJPY buystop Beispiel gemacht:

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1: open #155714279 buy stop 0.10 NZDJPY at 64.319 sl: 64.134 tp: 64.460 ok<br / translate="no"> 2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: versucht OP_BUYSTOP 0.10000000 Lots @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Current EquityAtRisk = $22.90 und Current Lotsize = 0.1 und Profit Target = $17.45 für ein 0.8:1 Profit:Loss Verhältnis
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Max erlaubte EquityAtRisk = $23.00 und Max berechnete Lotsize = 0.1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 Eingaben: Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Nun war der versuchte Einstiegskurs von 64,297 zu nahe am aktuellen Marktpreis, so dass die Orderreliable-Routine den Einstiegskurs aus diesem Grund auf 64,319 verschob, aber ich erhalte immer noch eine vernünftige Losgröße von 0,10.

An diesem Punkt muss ich zu dem Schluss kommen, dass in Ihrem Code etwas nicht stimmt, wie Sie die Include-Dateien implementiert haben und/oder wie Sie die Ausgaben verwenden. Sie müssen den Code hochladen, damit ich ihn überprüfen kann, damit ich das weiter verfolgen kann.

 

Ja, es ist ein auf USD lautendes Demokonto mit einem Hebel von 1:100. OK, ich habe es gerade auf EURJPY als BUY STOP laufen lassen, es sieht so aus, als ob wir dieses Mal gute Zahlen bekommen haben. Das Expertenprotokoll sagt:


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: entfernt
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit Grund 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155719095 buy stop 0.11 EURJPY bei 115.843 sl: 115.689 tp: 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: versuchtes OP_BUYSTOP 0.11000000 Lots @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Current EquityAtRisk = $20.95 und Current Lotsize = 0.11 und Profit Target = $5.71 für ein 0.3:1 Profit:Loss Verhältnis
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max erlaubtes EquityAtRisk = $22.73 und Max berechnete Lotsize = 0.1193
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 Eingaben: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1: erfolgreich geladen
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: entfernt
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1: erfolgreich geladen



... und er platzierte die ausstehende Buystop-Order mit 0,11 Lots. perfekt. Ja, ich schätze, da ist etwas in meinem Code "schiefgelaufen", wie Sie sagen... lol. Ich war beim Einfügen deines Codes immer sehr vorsichtig... was könnte es sein? OK, ich werde hier etwas debuggen und dir Bescheid geben. Tut mir leid, dass ich dich belästigt habe, Phillip!


Danke

Shawn

 

Soll ich mit der neueren Version, die Sie gerade gepostet haben, noch einmal von vorne anfangen, Phillip?


Shawn

 

Es macht Sinn, das Neueste zu verwenden, das ich habe.

 

Hallo Phillip, ich war im Begriff, meine EA wieder zu operieren, um auf Ihre neueste Version zu aktualisieren, die Sie vor ein paar Tagen gepostet haben, aber nachdem ich diesen Beitrag noch einmal gelesen habe... habe ich eine ganze Reihe von Fragen. Ich dachte, ich sollte Sie zuerst fragen, bevor ich meinen EA zerreiße:


(1) Sie erwähnen, dass es 2 neue Include-Dateien gibt:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Handel_Position_Verwaltung_2010.10.29.mqh (26.68 KB)


... und was ist mit der alten StopLoss_Manager_2010.05.24.mqh? Wird diese Datei in Ihrer neuen Version überhaupt nicht mehr benötigt?


(2) Wo Sie sagen:


"Schritt 2: Fügen Sie Folgendes oben in Ihren EA ein, damit er Zugriff auf die in den angehängten Dateien enthaltenen Aufruffunktionen hat

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>"


... ist das eine neue Version oder OrderReliable? Ich habe LibOrderReliable.mqh verwendet. Hat sich daran etwas geändert? Müssen wir nicht auch die neue Datei Analyze_Currency_Symbol_2010.10.29.mqh einbinden?


(3) In dieser Codezeile, die Sie bei der Verwendung Ihrer neuen Version hinzufügen sollen


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... was ist OpenPrice_ND und StopLossPrice_ND? Sind dies Variablen, die ich deklarieren muss, oder sind sie irgendwo in Ihren Include-Dateien eingebettet? Auch in dieser neuen Version Ihrer LotSize-Funktion hat sich die Anzahl der Parameter und ihre Reihenfolge ziemlich verändert, nicht wahr? Der Aufruf von LotSize in Ihrer vorherigen Version war:


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);


(4) Mir ist aufgefallen, dass ich in meinem Code, den ich in Ihrer vorherigen Version verwendet habe, CurrentOrderType=OP_BUY zugewiesen hatte; in Wirklichkeit handelt es sich um eine Stop-Order zum Kauf. Würde das einen Unterschied machen?



Tut mir leid, dass ich Sie damit belästige, aber ich war einfach etwas verwirrt von diesen Dingen.


Danke

Shawn

 

(1) You mention there's 2 new include files:


Analysieren_Währung_Symbol_2010.10.29.mqh (34.54 KB)

Handelsposition_Verwaltung_2010.10.29.mqh (26.68 KB)


... was ist mit der alten StopLoss_Manager_2010.05.24.mqh? Wird diese Datei in Ihrer neuen Version überhaupt nicht mehr benötigt?


Ich bin mir wirklich nicht sicher, warum ich diesen Teil zu meinem ursprünglichen Beitrag hinzugefügt habe, außer um sicherzustellen, dass der Endbenutzer einen vollständigen Satz von Dateien zur Verfügung hat.

Ich persönlich verwende eine aktualisierte Version dieses Stoploss-Managers, aber das hat nichts mit diesem Thread hier zu tun, Sie sollten die von Ihnen bevorzugten Stoploss-Verfahren implementieren. Der Code, den ich in diesem Thread hochgeladen habe, ist nicht auf eine Stoploss-Include-Datei angewiesen, sondern darauf, dass Sie Ihren Code korrekt einrichten, um den Stoploss-Kurs zu ermitteln, damit Sie ihn an die Equityatrisk-Aufruffunktion senden können.

(2) Wo du sagst:


"Schritt 2: Fügen Sie das Folgende oben in Ihren EA ein, damit er Zugriff auf die in den angehängten Dateien enthaltenen Aufruffunktionen hat

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>"


... ist das eine neue Version oder OrderReliable? Ich habe LibOrderReliable.mqh verwendet. Hat sich daran etwas geändert? Müssen wir nicht auch die neue Datei Analyze_Currency_Symbol_2010.10.29.mqh einbinden?

Es ist eine neue Version, ich habe den Link dazu unten in meinem Beitrag auf der ersten Seite dieses Threads gepostet (ich würde ihn verlinken, aber die Suche ist kaputt, argh!)

Ich habe die neue Version so geändert, dass sie transparent mit Brokern vom Typ ecn funktioniert. Senden Sie Ihre Aufträge durch ordersendreliable und es spielt keine Rolle, ob der Broker SL & TP auf Markt-Aufträge akzeptiert oder nicht, das orderreliable Skript behandelt es für Sie.

(3) In dieser Codezeile, die Sie bei der Verwendung Ihrer neuen Version hinzufügen sollen:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... was ist OpenPrice_ND und StopLossPrice_ND? Sind dies Variablen, die ich deklarieren muss, oder sind sie irgendwo in Ihren Include-Dateien eingebettet? Auch in dieser neuen Version Ihrer LotSize-Funktion hat sich die Anzahl der Parameter und ihre Reihenfolge ziemlich verändert, nicht wahr? Der Aufruf von LotSize in Ihrer vorherigen Version war:

Ja, dies sind Variablen, die Sie an einem bestimmten Punkt in Ihrem Code deklarieren und ihnen die Marktpreise zuweisen müssen, zu denen Sie die neue Position eröffnen möchten (OpenPrice_ND) und den StopLoss-Preis (StopLossPrice_ND).

Alternativ können Sie meine Variablen auch in die Variablen umbenennen, die Sie bereits verwenden. Betrachten Sie diese Variablen als Platzhalter und ersetzen Sie Ihre Variablen, wo es angebracht ist.

(4) Mir ist aufgefallen, dass ich in meinem Code, der Ihre frühere Version verwendet, CurrentOrderType=OP_BUY zugewiesen hatte; in Wirklichkeit führe ich eine Stop-Buy-Order aus. Würde das einen Unterschied machen?
Das macht keinen Unterschied. Wichtig ist nur, dass Sie den Ordertype korrekt an die jeweiligen Aufruffunktionen übergeben. Diese sind bereits so kodiert, dass sie je nach Auftragstyp das Richtige tun. Wenn Sie nicht den richtigen Auftragstyp an die Aufruffunktion senden, werden Sie definitiv ungültige Ergebnisse von den Aufruffunktionen selbst erhalten.

Das sind alles gute Fragen, wenn man nicht fragt, kann man nicht erwarten, dass man etwas lernt ;)
 
1005phillip:

Ich bin mir wirklich nicht sicher, warum ich diesen Teil zu meinem ursprünglichen Beitrag hinzugefügt habe, außer um sicherzustellen, dass der Endbenutzer einen vollständigen Satz von Dateien zur Verfügung hat.

Ich persönlich verwende eine aktualisierte Version dieses Stoploss-Managers, aber das hat nichts mit diesem Thread hier zu tun, Sie sollten die Stoploss-Verfahren implementieren, die Sie verwenden möchten. Der Code, den ich in diesem Thread hochgeladen habe, ist nicht auf eine Stoploss-Include-Datei angewiesen, sondern darauf, dass Sie Ihren Code korrekt einrichten, um den Stoploss-Kurs zu ermitteln, damit Sie ihn an die Equityatrisk-Aufruffunktion senden können.



>>> OK! Ich habe meine eigenen Stoplosses, also brauche ich das nicht - werde es entfernen!



Es ist eine neue Version, ich habe den Link dazu unten in meinem Beitrag auf der ersten Seite dieses Threads gepostet (ich würde ihn verlinken, aber die Suche ist kaputt, argh!)

Ich habe die neue Version so modifiziert, dass sie transparent mit ecn-Brokern funktioniert. Senden Sie Ihre Orders über ordersendreliable und es spielt keine Rolle, ob der Broker SL & TP auf Market-Orders akzeptiert oder nicht, das orderreliable-Skript erledigt das für Sie.


>>> OK, ich verwende bereits OrderSendReliable2Step, also werde ich meinen Code so belassen, wie er ist und meine bestehende LibOrderReliable.mqh verwenden. Müssen wir aber nicht auch die neue Datei Analyze_Currency_Symbol_2010.10.29.mqh einbinden?



Ja, das sind Variablen, die Sie an einem bestimmten Punkt in Ihrem Code deklarieren und ihnen die Marktpreise zuweisen müssen, zu denen Sie die neue Position eröffnen wollen (OpenPrice_ND) und den StopLoss-Preis (StopLossPrice_ND).

Alternativ könnten Sie meine Variablen in die Variablen umbenennen, die Sie bereits verwenden. Betrachten Sie diese Variablen als Platzhalter und ersetzen Sie Ihre Variablen, wo es angebracht ist.


>>> Verstanden, das habe ich mir schon gedacht. Ich glaube, Sie haben meinen Kommentar überlesen --> "Außerdem hat sich in dieser neuen Version Ihrer LotSize-Funktion die Anzahl der Parameter und ihre Reihenfolge ziemlich verändert, nicht wahr?"




Das macht null Unterschied. Wichtig ist nur, dass Sie den Ordertype korrekt an die jeweiligen Aufruffunktionen übergeben. Diese sind bereits so kodiert, dass sie je nach Auftragstyp das Richtige tun. Wenn Sie nicht den richtigen Ordertype an die Call-Funktion senden, dann werden Sie definitiv ungültige Ergebnisse von den Call-Funktionen selbst erhalten.


>>> OK!



Das sind alles gute Fragen, wenn du nicht fragst, kannst du nicht erwarten, dass du etwas lernst ;)


>>> Ich versuche es! Danke Phillip.


Shawn


 

>>> Müssen wir nicht auch die neue Datei Analyze_Currency_Symbol_2010.10.29.mqh einbinden?

Nicht in Ihrem EA, aber Sie brauchen die Datei in Ihrem Include-Verzeichnis, weil sie von der Include-Datei des Trade Position Management aufgerufen wird.

Durch #include <Handelsposition_Management_2010.10.29.mqh> in Ihrem EA haben Sie bereits sowohl Trade_Position_Management_2010.10.29.mqh als auch Analyze_Currency_Symbol_2010.10.29.mqh eingebunden .

>>>Auch in dieser neuen Version Ihrer LotSize Funktion hat sich die Anzahl der Parameter und deren Reihenfolge ziemlich verändert, nicht wahr

Sie müssen weder den CurrentSymbolType noch den CurrentCounterPairForCross als Basis verwenden. Das wird jetzt intern gehandhabt.

Wenn Sie sich die Trade Position-Datei ansehen, sehen Sie den Abschnitt equityatrisk und dort gibt es Kommentare zur Verwendung der Funktion. Sie könnten hilfreich sein, ich bin mir jedoch nicht sicher, wie selbsterklärend sie sind.

 

Ist es ein Fehler, der nur mir passiert ist?
Ich kann keine Datei mit MetaEditor mq4 kompilieren, wenn ich eine Zeile mit # include einfüge.
Ich konnte auch keine mq4-Dateien kompilieren, die eine Zeile # include im Code haben.
Nur Zeilen
# Include <stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>