Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   ordersend errror 3 (http://www.expert-advisor.com/forum/showthread.php?t=6885)

berlin 12.01.21 13:25

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

Indikator-Trading 13.01.21 09:12

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()
        && inRange
        && rangePoints1 >= MinRangePoints && rangePoints1 <= MaxRangePoints
        && counterLong + counterShort < MaxTrades)

Gruß Timo

berlin 13.01.21 16:15

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

berlin 13.01.21 16:21

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)

Gruß Timo[/QUOTE]

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.

Indikator-Trading 13.01.21 22:48

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))


Indikator-Trading 13.01.21 22:51

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

MA-EA 14.01.21 11:54

@ 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. :(

berlin 14.01.21 13:36

Zitat:

Zitat von MA-EA (Beitrag 44964)
@ 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. :(

nein, die idee ist:
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.

berlin 14.01.21 13:50

Zitat:

Zitat von Indikator-Trading (Beitrag 44957)
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))


ah, verstehe. hab geltungsbereiche bis jetzt vorwiegend aus der perspektive von geschweiften klammern gesehen. aber mit einer präziseren klammersetzung werden unnötige missverständnisse vermieden.

vielen dank dafür!

berlin 14.01.21 19:53

Zitat:

Zitat von Indikator-Trading (Beitrag 44958)
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

hey timo,

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:29 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