Problem der Mehrfachbestellung - Seite 3

 
luisneves:


Hallo Kronin,

Ja, ich habe eine Menge zu lernen....Verstehe jetzt, dass ein Wert, auf den von außerhalb einer Funktion zugegriffen werden soll, bei Global sein muss.

Das ist nicht wahr und ist auch oft eine schlechte Idee.

Ein Teil des Grundes, einen Teil des Codes in eine Funktion zu verwandeln, besteht darin, diesen Code wiederverwenden zu können. Wenn die Funktion fest kodiert ist, um mit bestimmten globalen Variablen zu arbeiten, kann sie weniger flexibel werden. Sie sollten in Betracht ziehen, Variablen an die benutzerdefinierte Funktion zu übergeben ... verwenden Sie nicht immer global deklarierte Variablen. Zum Beispiel:

//+--------------------------------------------------------------------------------+
//| ToStr function - calls DoubleToString (double, Digits) and returns the string  |
//+--------------------------------------------------------------------------------+
string ToStr(double ValueToString)
   {
   return (DoubleToStr(ValueToString, Digits));
   }

//+--------------------------------------------------------------------------------+

. . . diese Funktion verwendet keine global deklarierte Variable, sondern die Variable, die ihr beim Aufruf übergeben wird . . .

Print("Bid price is: ", ToStr(Bid) );
 
luisneves:


Hallo Kronin,

Ja, ich habe eine Menge zu lernen....Nun verstehen, dass, wenn es eine Notwendigkeit eines Wertes, um von außerhalb einer Funktion, die auf Global sein muss zugegriffen werden.

Die Werte, die auf extern sind, werden mit 10 multipliziert, weil der EA muss auch auf 5 Ziffern Makler laufen. Ich benutze diesen Code-Block, um das automatisch zu bekommen, aber ich bekomme einen Rat von WHRoeder, der nicht mit Metallen kompatibel ist.

Der Spread des Paares könnte variabel sein. Deshalb benutze ich den Code, um aus dem Stop Level herauszukommen.

Zu diesem Thema: "Aber ich habe Ihre Eingabeparameter so angepasst, dass nicht alle Aufträge fast zur gleichen Zeit geöffnet werden. Vielleicht müssen Sie die Standardparameter überprüfen."

Soweit ich sehen kann (sorry, wenn nicht...), OpenDistance pflegen als 2 Pips und ReturnDistance ist jetzt mit 2 als gut. Was ich im Moment sehe, ist, dass die Bestellung öffnet, aber nicht bei 2 Pips Unterschied. Dies läuft mit einem Tester auf einer Plattform eines ECN-Brokers (IC Markets). Könnte dies eine Bedeutung haben?

In der Tat öffnen die Orders nicht zur gleichen Zeit, aber es scheint, dass Open Distance und ReturnDist nicht berücksichtigt werden, um den richtigen Abstand zu den offenen Orders zu erhalten.

Sie haben im Code das;

Ich habe die fettgedruckte Zeile eingefügt, um die Funktion OpenOppositeOrder aufzurufen und bin mir nicht sicher, ob dies richtig ist. Für die andere Seite kann nicht sehen, wo ist der Vergleich der aktuellen Tick mit dem letzten Tick, die 2 Pips vor (OpenDistance) passiert.

Entschuldigung, wenn ich anfange, Sie mit meinen Problemen zu langweilen.

Beste Grüße

Luis



Hallo Kronin,

Ich habe gerade mehr Aufmerksamkeit nehmen, warum haben fragen, was der Spread ist und nur für den Tester, dass etwas falsch ist zu suchen. Hier ist die Spanne 50 (5 Ziffern) also eigentlich 5. Hmmm... Ich werde die Plattform neu starten und bestätigen.

Luis

 
RaptorUK:

Das stimmt nicht und ist auch oft eine schlechte Idee.

Ein Grund dafür, einen Teil Ihres Codes in eine Funktion zu verwandeln, ist die Möglichkeit, diesen Code wiederzuverwenden. Wenn die Funktion fest auf bestimmte globale Variablen programmiert ist, kann sie weniger flexibel sein. Sie sollten in Betracht ziehen, Variablen an die benutzerdefinierte Funktion zu übergeben. Verwenden Sie nicht immer global deklarierte Variablen. Zum Beispiel:

. . . diese Funktion verwendet keine global deklarierte Variable, sondern die Variable, die ihr beim Aufruf übergeben wird . . .


Hallo RaptorUK.

Vielen Dank für Ihr Eingreifen, um mich auf dem richtigen Weg zu halten...

Übrigens, haben Sie irgendetwas von dem gehört, was ich in Bezug auf das Problem mit dem Tester erwähnt habe, d.h. dass in diesem Moment der Spread 50 ist, während er am Freitag nicht war?

Mit freundlichen Grüßen

Luis

 
luisneves:


Hallo RaptorUK.

Vielen Dank für Ihr Eingreifen, um mich in die richtige Richtung zu lenken...

Mit freundlichen Grüßen

Luis

Ja, die Idee mit der Funktion war nicht wirklich gemeint, sie alle als void.... zu deklarieren. Ich habe gerade die Deklaration in Ihrer void MM() für LotSize entfernt, um den EA wieder handeln zu lassen... - ich dachte, wir sprechen später nochmal darüber... :-)

Auf der "nicht offen auf 2 Pips Ebene Punkt
Ich habe zum Beispiel keine Tickdaten zum Testen, außerdem ist der Spread mehr als 2 Pips (ich könnte ihn anpassen, aber was nützt das, wenn ich keine Tickdaten habe?) All das macht es schwierig, etwas zu testen, bei dem geschlossene Stopps zuverlässig sind.


16:21:09 _help_53198_markettorderdecnqv80 inputs: EquityPercent=1; FixedLotSize=0.01; Multiplier=2; LotDigits=2; StopLoss=50; TakeProfit=20; TrailingStop=2; MinimumProfit=3; Slippage=3; OpenDistance=2; ReturnDist=1; MinStop=1; MagicNumber=8012013; MaxOrders=7;
EURUSD,M1: Eröffnung #1 Kauf 0.01 EURUSD bei 1.43310 ok
EURUSD,M1: Inital Buy Auftrag platziert # 1
EURUSD,M1: modify #1 buy 0.01 EURUSD at 1.43310 sl: 1.42810 tp: 1.43510 ok
EURUSD,M1: Eröffnen #2 verkaufen 0,01 EURUSD bei 1,43257 ok
EURUSD,M1: Gegenläufige Verkaufsorder platziert # 2
EURUSD,M1: ändern #2 verkaufen 0,01 EURUSD bei 1,43257 sl: 1,43757 tp: 1,43057 ok
EURUSD,M1: eröffnen #3 kaufen 0,01 EURUSD bei 1,43283 ok
EURUSD,M1: Gegenläufige Buy-Order platziert # 3
EURUSD,M1: ändern #3 kaufen 0,01 EURUSD bei 1,43283 sl: 1,42783 tp: 1,43483 ok
EURUSD,M1: eröffnen #4 verkaufen 0.01 EURUSD bei 1.43230 ok
EURUSD,M1: Gegenläufige Verkaufsorder platziert # 4
EURUSD,M1: ändern #4 verkaufen 0.01 EURUSD bei 1.43230 sl: 1.43730 tp: 1.43030 ok
EURUSD,M1: eröffnen #5 buy 0.01 EURUSD bei 1.43280 ok
EURUSD,M1: Gegenläufige Buy-Order platziert # 5
EURUSD,M1: ändern #5 buy 0.01 EURUSD bei 1.43280 sl: 1.42780 tp: 1.43480 ok
EURUSD,M1: eröffnen #6 verkaufen 0.01 EURUSD bei 1.43200 ok
EURUSD,M1: Gegenläufige Verkaufsorder platziert # 6
EURUSD,M1: ändern #6 verkaufen 0.01 EURUSD bei 1.43200 sl: 1.43700 tp: 1.43000 ok
EURUSD,M1: eröffnen #7 kaufen 0.01 EURUSD bei 1.43250 ok
EURUSD,M1: Gegenläufige Buy-Order platziert # 7
EURUSD,M1: ändern #7 buy 0.01 EURUSD bei 1.43250 sl: 1.42750 tp: 1.43450 ok
EURUSD,M1: ändern #7 buy 0.01 EURUSD bei 1.43250 sl: 1.43267 tp: 1.43450 ok
EURUSD,M1: ändern #7 kaufen 0,01 EURUSD bei 1,43250 sl: 1,43283 tp: 1,43450 ok
EURUSD,M1: ändern #3 kaufen 0,01 EURUSD bei 1,43283 sl: 1,43300 tp: 1,43483 ok
EURUSD,M1: ändern #5 kaufen 0,01 EURUSD bei 1,43280 sl: 1,43300 tp: 1,43480 ok
EURUSD,M1: Änderung #7 buy 0.01 EURUSD bei 1.43250 sl: 1.43300 tp: 1.43450 ok
Tester: Stop-Loss #3 bei 1,43300 (1,43300 / 1,43340)
Tester: Stop-Loss #5 bei 1,43300 (1,43300 / 1,43340)
Tester: Stop-Loss #7 bei 1,43300 (1,43300 / 1,43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: Order mit Ticketnr: 7 hat SL getroffen! Alle offenen Orders schließen
EURUSD,M1: close #6 sell 0.01 EURUSD at 1.43200 sl: 1.43700 tp: 1.43000 at price 1.43340
EURUSD,M1: close #4 sell 0.01 EURUSD at 1.43230 sl: 1.43730 tp: 1.43030 at price 1.43340
EURUSD,M1: close #2 sell 0.01 EURUSD at 1.43257 sl: 1.43757 tp: 1.43057 at price 1.43340
EURUSD,M1: close #1 buy 0.01 EURUSD at 1.43310 sl: 1.42810 tp: 1.43510 at price 1.43300

Meiner Meinung nach macht es, was Sie wollen. Ich habe nie Ihre Berechnung für OpenOpposite geändert oder die Initalorder geöffnet.

 
kronin:

Ja, die Idee mit der Funktion war nicht wirklich, sie alle als void zu deklarieren.... Ich habe gerade die Deklaration in deiner void MM() für LotSize entfernt, um den EA wieder handeln zu lassen... - ich dachte, wir sprechen später nochmal darüber... :-)

Zu dem Punkt "nicht bei 2 Pips öffnen".
Ich habe zum Beispiel keine Tickdaten zum Testen, außerdem ist der Spread mehr als 2 Pips (ich könnte ihn anpassen, aber was nützt das, wenn ich keine Tickdaten habe?). All das macht es schwierig, etwas zu testen, bei dem geschlossene Stopps zuverlässig sind.


16:21:09 _help_53198_markettorderdecnqv80 Eingaben: EquityPercent=1; FixedLotSize=0.01; Multiplier=2; LotDigits=2; StopLoss=50; TakeProfit=20; TrailingStop=2; MinimumProfit=3; Slippage=3; OpenDistance=2; ReturnDist=1; MinStop=1; MagicNumber=8012013; MaxOrders=7;
EURUSD,M1: Eröffnung #1 Kauf 0.01 EURUSD bei 1.43310 ok
EURUSD,M1: Inital Buy Auftrag platziert # 1
EURUSD,M1: modify #1 buy 0.01 EURUSD at 1.43310 sl: 1.42810 tp: 1.43510 ok
EURUSD,M1: Eröffnen #2 verkaufen 0,01 EURUSD bei 1,43257 ok
EURUSD,M1: Gegenläufige Verkaufsorder platziert # 2
EURUSD,M1: ändern #2 verkaufen 0,01 EURUSD bei 1,43257 sl: 1,43757 tp: 1,43057 ok
EURUSD,M1: eröffnen #3 kaufen 0.01 EURUSD bei 1.43283 ok
EURUSD,M1: Gegenläufige Buy-Order platziert # 3
EURUSD,M1: ändern #3 kaufen 0,01 EURUSD bei 1,43283 sl: 1,42783 tp: 1,43483 ok
EURUSD,M1: eröffnen #4 verkaufen 0.01 EURUSD bei 1.43230 ok
EURUSD,M1: Gegenläufige Verkaufsorder platziert # 4
EURUSD,M1: ändern #4 verkaufen 0.01 EURUSD bei 1.43230 sl: 1.43730 tp: 1.43030 ok
EURUSD,M1: eröffnen #5 buy 0.01 EURUSD bei 1.43280 ok
EURUSD,M1: Gegenläufige Buy-Order platziert # 5
EURUSD,M1: ändern #5 buy 0.01 EURUSD bei 1.43280 sl: 1.42780 tp: 1.43480 ok
EURUSD,M1: eröffnen #6 verkaufen 0.01 EURUSD bei 1.43200 ok
EURUSD,M1: Gegenläufige Verkaufsorder platziert # 6
EURUSD,M1: ändern #6 verkaufen 0.01 EURUSD bei 1.43200 sl: 1.43700 tp: 1.43000 ok
EURUSD,M1: eröffnen #7 kaufen 0.01 EURUSD bei 1.43250 ok
EURUSD,M1: Gegenläufige Buy-Order platziert # 7
EURUSD,M1: ändern #7 buy 0.01 EURUSD bei 1.43250 sl: 1.42750 tp: 1.43450 ok
EURUSD,M1: ändern #7 buy 0.01 EURUSD bei 1.43250 sl: 1.43267 tp: 1.43450 ok
EURUSD,M1: ändern #7 kaufen 0,01 EURUSD bei 1,43250 sl: 1,43283 tp: 1,43450 ok
EURUSD,M1: Ändern #3 kaufen 0,01 EURUSD bei 1,43283 sl: 1,43300 tp: 1,43483 ok
EURUSD,M1: ändern #5 kaufen 0,01 EURUSD bei 1,43280 sl: 1,43300 tp: 1,43480 ok
EURUSD,M1: Änderung #7 buy 0.01 EURUSD bei 1.43250 sl: 1.43300 tp: 1.43450 ok
Tester: Stop-Loss #3 bei 1,43300 (1,43300 / 1,43340)
Tester: Stop-Loss #5 bei 1,43300 (1,43300 / 1,43340)
Tester: Stop-Loss #7 bei 1,43300 (1,43300 / 1,43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: Order mit Ticketnr: 7 hat SL getroffen! Alle offenen Orders schließen
EURUSD,M1: close #6 sell 0.01 EURUSD at 1.43200 sl: 1.43700 tp: 1.43000 at price 1.43340
EURUSD,M1: close #4 sell 0.01 EURUSD at 1.43230 sl: 1.43730 tp: 1.43030 at price 1.43340
EURUSD,M1: close #2 sell 0.01 EURUSD at 1.43257 sl: 1.43757 tp: 1.43057 at price 1.43340
EURUSD,M1: close #1 buy 0.01 EURUSD at 1.43310 sl: 1.42810 tp: 1.43510 at price 1.43300

Meiner Meinung nach macht es, was Sie wollen. Ich habe nie Ihre Berechnung für OpenOpposite oder öffnen Sie die inital Ordnung geändert.


Hallo Kronin,

Ich lade gerade eine andere Plattform von einem anderen Broker herunter und werde warten, um sie erneut zu testen und Sie über die Ergebnisse zu informieren.

Nochmals vielen Dank

Luis

 

Hallo Kronin,

Ich habe gerade bestätigt, dass im Tester der Spread auf 5 Pips (50) gesprungen ist. Also heute im Tester zeigt Ihr Code, dass er gut funktioniert, jetzt habe ich ihn in ein ECN-Demokonto gesetzt und werde sehen.

Beste Grüße

Luis

 

Hallo Kronin,

ein Problem;

Wenn der EA startet, sollte er dann nicht warten, bis der Preis um 2 Pip abweicht, bevor er die erste Order öffnet?

Wenn die zweite Order die Bedingung zum Öffnen hat, öffnet sie sich an der richtigen Stelle.

Mit freundlichen Grüßen

Luis

 
luisneves:

Hallo Kronin,

ein Problem;

Wenn der EA startet, sollte er dann nicht warten, bis der Preis um 2 Pip abweicht, bevor er die erste Order öffnet?

Wenn die zweite Order die Bedingung zum Öffnen hat, öffnet sie sich an der richtigen Stelle.

Mit freundlichen Grüßen

Luis

Hallo Luis

Nun, wahrscheinlich sollte es laut der Strategie so sein, aber natürlich ist es laut dem Code nicht so...

if(OpenDistance*pt && BuyAllowed) //<-- this doesn't make any sense.

Das obige wird als if(2*0.0001 && true) gelesen. Jeder numerische Ausdruck, der von 0 verschieden ist, wird als wahr interpretiert. Der Ausdruck ist also immer wahr, wenn BuyAllowed wahr ist.

Es tut mir leid, ich habe nicht auf die erste Eröffnung einer Serie geachtet und da es nur 2 Pips sind, habe ich nichts Ungewöhnliches bemerkt.

Versuchen Sie dies:

//global scope
double BuyTrigger,SellTrigger;

//init function
BuyTrigger=Ask+OpenDistance*pt;
SellTrigger=Bid-OpenDistance*pt;

//start function
  OTCurrentTick=OrdersTotal();                   //reinit OrderTotal   <<-- this is already there, place the 4 lines below after this line
  if(OTCurrentTick==0&&OTLastTick>0){
     BuyTrigger=Ask+OpenDistance*pt;
     SellTrigger=Bid-OpenDistance*pt;
  }

if(Ask>BuyTrigger && BuyAllowed)                // <-- use this instead of if(OpenDistance*pt && BuyAllowed)

if(Bid<SellTrigger && SellAllowed)
 

Hallo Kronin,

Es tut mir leid, dass ich dich mit meinem begrenzten Verständnis des Codes gelangweilt habe, dennoch ist es nicht zu spät, um zu lernen und ich versuche mein Bestes, um in den Code zu kommen, den du freundlicherweise zur Verfügung gestellt hast.

Bin gerade dabei die besten Einstellungen zu testen und werde deinen letzten Code aktualisiert vorstellen.

Vielen Dank im Voraus zu halten unterstützen mich in diesen Fragen( Abenteuer...Ich meine....)

Luis

 

Hallo Kronin,

Ihre Änderung funktioniert. Du hast die maximale Anzahl der Aufträge begrenzt, aber ist es möglich, sie stattdessen alle zu schließen?

Ich habe versucht, das mit dem folgenden Code zu tun, aber scheint nicht zu funktionieren.

if(LastClosedTicket>0|| OrdersTotal()>= MaxOrders)

Mit besten Grüßen

Luis

Grund der Beschwerde: