ordersend errror 3
Liste der Anhänge anzeigen (Anzahl: 2)
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 |
Hallo Berlin,
hier ein paar Anmerkungen zu deinem Code: Die zweite If-Abfrage wird nie True werden, da dies sonst der ersten If-Abfrage widersprechen würde: if(TimeCurrent() >= rangeStart1) { drawRange1(); //reset range variables if(TimeCurrent() < rangeStart1) { rangePoints1 = 0; rangeHigh1 = 0; rangeLow1 = 0; } 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() |
nochmal von vorne :)
Liste der Anhänge anzeigen (Anzahl: 1)
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() 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:
|
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... :cool: Dürfte auch nicht allzu schwierig sein... :confused: 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 |
Ähm - könntest Du mal Deinen ganzen Code genau erklären? Wie das ganze Gerät arbeiten soll? :confused:
|
Zitat:
es ist eine rangebreakout ea der wie folgt arbeitet: 1. es entsteht eine box innerhalb einer vordefinierten zeit 8:45-8:59 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. 10-20min nach platzierung der stop orders das ganze ding funktioniert mit einer box wunderbar. ich möchte allerdings bis zu 8 boxen in eine ea unterbringen. um das zu ermöglichen arbeite ich gerade daran erstmal 2 boxen ohne gegenseitige korrelation laufen zu lassen. wie ersichtlich stosse ich da auf schwierigkeiten im ea. um überschneidungen zu vermeiden habe ich alle parameter und aus meiner sicht box relevante funktionen so umbenannt, dass es theoretisch keine überschneidungen mehr gibt. da die boxen einzeln eingeschaltet sauber funktionieren kann ich mir den ordersend error 3 bisher noch nicht erklären. aktuell bin ich auf der suche nach lernmaterial wie ich am besten auf fehlersuche gehe. ansonsten denke ich kann dir ein blick in den code bestimmt die reihenfolge/funktionsweise verdeutlichen. vielen dank und lieben gruss, berlin |
Lad bitte noch mal die neueste Version hoch. Am besten mit Erklärungen drin. :rolleyes:
|
Zitat:
Code:
Print(" executeLong2:" |
verlauf dokumentiert
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe den verlauf mal mit dem tester dokumentiert indem ich bei den einzelnen schritten einen screenshot vom chart und vom journal gemacht habe.
im anhang: -5seitige pdf > auf der letzten seite habe ich dann nochmal die box 2 einzeln geprüft um zu checken ob am code was falsch ist. der fehler muss im zusammenführen der boxen zu einen ea liegen - der aktuelle code > habe die klammerreglen von timo da schon übernommen die pdf ist mir irgendwie abhanden gekommen. hat jetzt eine ewigkeit gedauert...********. die screenshots hab ich noch und werde sie nachher nachreichen. |
Zitat:
vielen dank! |
Zitat:
werde wenn ich die pdf neu gemacht habe aber nochmal den code mit kommentaren hochladen... |
Liste der Anhänge anzeigen (Anzahl: 2)
so, jetzt die pdf mit der screenshot doku und der code mit kommentaren...
vielen dank! lieben gruss und einen schönen abend in die runde :) |
Liste der Anhänge anzeigen (Anzahl: 1)
1.
Was hat irgendwelche Order-Sucherei in der Init-Funktion zu suchen? :confused: 2. Wenn ich das richtig verstehe, willst Du bei bestimmten Highs/Lows Stop-Orders platzieren. 3. Ist das Ganze irgendwie ganz schön unübersichtlich und zum Teil zu kompliziert geschrieben. Versuch mal, Alles so einfach und übersichtlich zu halten, wies geht. 4. Habs nich genau gesehn, aber einige Bedingungen werden anscheinend global fest gelegt und sind dann die ganze Ausführung lang gültig, egal was kommt. Kann mich da aber auch irren. :rolleyes: Edit:Hab jetzt erst mal nur eine "Vereinfachung" vor genommen: Code:
extern bool TRAILINGSTOP=false; Halte Code möglichst einfach und übersichtlich, aber so eindeutig, dass es zu keinen Missverständissen kommen kann. ;) |
Zitat:
|
Zitat:
traderdoc |
yea, ich hab den fehler gefunden :) :) :)
der geltungsbereich für den delete orders bereich habe ich jetzt eingeschränkt zwischen if((TimeCurrent() >= tradingEnd) && (TimeCurrent() <= rangeStart2)) deleteAll() das wird jetzt zwischen jeder box geschrieben und am ende bei der letzten box die orginal zeile. hab mir jetzt ein bild von edison über den schreibtisch gehängt um mir zu verdeutlcihen das die nadel ja irgendwo im heuhaufen sein muss :) wünsche euch ein schönes weekend! |
Alle Zeitangaben in WEZ +2. Es ist jetzt 23:54 Uhr. |
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum