|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
ordersend errror 3
moin zusammen,
ich habe einen Ea der boxen anhand von einem vorgegebenen zeitrahmen definiert. an den rändern werden pending orders platziert > also klasischer range handel. jetzt bin ich dabei ihn so umzuschreiben, dass er mehrere boxen tradet. nach vielen versuchen, bin ich jetzt soweit das er die boxen einzeichnet und auch trades eingeht. das problem ist das er die pending orders ständig öffnet und schliesst und damit dann auch aufhört bevor die ablaufzeit rum ist. um das problem zu verdeutlichen packe ich in den anhang mal ein screenshot vom chart und die mq4 datei. vielleicht findet sich hier ja jemand der mir helfen kann das problem zu lösen. vielen dank schon mal im voraus. berlin |
|
|||
nochmal von vorne :)
timo, vielen dank für deine antwort.
ich habe das ganze noch einmal neu aufgesetzt und folgendes der übersichthalber verändert. 1. aus der ersten if,if anweisung hab ich else if gemacht. 2. mit void box1() und void box2() den void tick bereich übersichtlicher gemacht 3. die boxen ein und ausschaltbar true/false gemacht damit ist aus meiner sicht jede box deutlich von einander getrennt und es sollte aus meinem bescheidenen verständnis keine korrelationen zwischen den boxen entstehen. wenn ich die boxen einzeln teste (also jeweils die andere ausschalte) funktioniert es wunderbar. sind aber beide auf true kommt der ordersend error 3 wieder und er bearbeitet immer nur die erste box sauber. nach abschluss des tages setzt er wohl alles wieder richtig zurück und startet am nächsten tag sauber mit der ersten box und macht dann bei der zweiten box wieder die fehler. woran liegt das? im anhang ist die aktualisierte version. vielen dank und lieben gruss berlin |
|
|||
In dieser If-Abfrage musst du die Einzelteile in Klammern setzten, sonst wird es nicht so funktionieren, wie du dir das vorstellst. Dies gilt für auch für den Rest von deinem Code
Code:
if(checkTime1() && inRange && rangePoints1 >= MinRangePoints && rangePoints1 <= MaxRangePoints && counterLong + counterShort < MaxTrades) aber es ist doch in klammern und innerhalb der klammer mit && getrennt. wenn du den neuen ea mal in den tester haust und eine box ausstellst siehst du das es genau so funktioniert wie es soll. |
|
||||
Leider nicht zwingend, hängt auch mal gerne von der Interpretationsqualität des Compilers ab.
Nehmen wir mal nur den diesen Bereich hier: MaxRangePoints && counterLong + counterShort < MaxTrades (MaxRangePoints && counterLong) -> Boolsches Und und ergibt ein True/False (counterShort < MaxTrades) -> Ergibt auch ein True/False aber was ist dann mit dem + ? Der Compiler könnte hieraus also (True/False) + (True/False) machen... Du MUSST sauber programmieren, also so das es keinen Spielraum für Interpretationen gibt. Ich mache eher zu viele Klammern, aber so ist die richtige Funktion immer vorgegeben: Code:
if(checkTime1() && inRange && (rangePoints1 >= MinRangePoints) && (rangePoints1 <= MaxRangePoints) && ((counterLong + counterShort) < MaxTrades)) |
|
||||
OrderSend Error 3 bedeutet: ERR_INVALID_TRADE_PARAMETERS
Du hast also beim Senden der Order falsche Parameter übergeben. Bei PendingOrders ist das mal schnell der Fall, wenn der Preis über den Level liegt, bei welchem die PendingOrder eigentlich erst ausläsen sollte. Schau dir also einfach ins Detail an, wann der Error entsteht und lass dir die OrderParameter mit ausgeben. Gruß Timo |
|
|||
@ berlin
Nen Haufen Pending Orders platzieren, interessante Idee... Dürfte auch nicht allzu schwierig sein... Erzähl mal genau wie Du Dir das vorstellst. Allerdings ist es nicht gerade von Vorteil, dass der Broker jeden Price, SL, TP usw. sehn kann. |
|
|||
Zitat:
1. es entsteht eine box innerhalb einer vordefinierten zeit 2. sie bildet ein lokales high und low 3. zum ende der box wird am high eine buystop order und am low eine sellstop order platziert. 4. nach eine definierten zeitraum werden die nicht abgeholten orders gelöscht. folglich > klassischer range handel - wenn der ea läuft und nur eine box eingeschaltet ist funktioniert es auch wunderbar. - wenn aber beide boxen eingeschaltet sind gibt es bei der zweiten box das problem "ordersend error 3" und äussert sich so das er ständig stoporders eröffnet und sofort wieder schliesst. siehe screeshot aus meinem ersten beitrag. in der zwischenzeit habe ich ihn neu geschrieben/umstrukturiert siehe meinen 2ten beitrag datei "range multibox" das der broker meine parameter nach platzierung der orders sehen kann, stellt für mich kein problem dar. |
|
|||
Zitat:
vielen dank dafür! |
|
|||
Zitat:
wie müsste die abfrage genau aussehen? ich habe folgendes geschrieben: Print("executeLong2=", rangePoints2,sl,tp,rangeHigh2); bekomme das zurück: executeLong2=5225.011570.6511659.4811622.9 das ist nicht so aussagekräftig vielen dank und lieben gruss |
Lesezeichen |
|
|