Ohne jetzt den Code studiert zu haben: Welcher Fehler genau?
Was erwartetest Du wo und wie und wann, aber Du kriegst dann was?
Ohne jetzt den Code studiert zu haben: Welcher Fehler genau?
Was erwartetest Du wo und wie und wann, aber Du kriegst dann was?
Die Fehler sind laut log [invalid stops]
Im Tester USDJPY M5 Start 2019.01.07 läuft das Programm ohne Fehler.
Im Tester EURUSD M5 Start 2019.01.07 läuft das Programmmit Fehlern in Zeilen 30,31,32
Mit den _Digits bzw. _Point dürfte es nicht zusammenhängen, es werden ja die _Points eingerechnet.
Ich mach es jetzt so, daß ich die Position ohne SL und TP eröffne und SL und TP erst beim nächsten Tick überprüfe bzw. verändere.
Also ich seh da keinen Grund für einen Fehler.
Order und Positionen sind SELL, Preis: 1.14053
Der Take Profit ist mit Preis 1.13953 100 points unter dem Preis(Bid) und auch der Spread ist nicht störend.
Danke für die Lot calc otto
Aber immer gerne! Das ist auch nicht wirklich auf meinem Mist gewachsen.
Wart, ich such mal.......
https://www.mql5.com/de/articles/2281 da stecken
einige Berechnungen drinnen.
Eine wahre Fundgrube!
- www.mql5.com
Problem Gelöst!
Es liegt am Build 2280. Mit 2190 läuft alles einwandfrei!
Auch andere EAs aus der Codebase laufen mit 2280 nicht!
Ich gebe es Metaqoutes schriftlich: IHR SEID PFUSCHER, aber das mit Konsequenz!
Und die Systemlibrary gehört dringend überarbeitet.
Die ist dermaßen Grottenlangsam, daß ich mir die wichtigsten Teile neu schreibe.
Falls sich jemand dafür interessiert:
bool CTradeExt::PositionOpen(string aSymbol,ORDTYPE aOrderType, double aVolume, double aPrice, double aStop, double aTake, string aComment) { ZeroMemory(m_request); ZeroMemory(m_result); m_request.action =TRADE_ACTION_DEAL; m_request.symbol =aSymbol; m_request.magic =NULL; m_request.volume =aVolume; m_request.type =aOrderType; m_request.price =aPrice; m_request.sl =aStop; m_request.tp =aTake; m_request.comment =aComment; m_request.deviation=UINT_MAX; return(OrderSend(m_request,m_result)); } bool CTradeExt::PositionModify(string aSymbol, double aStop, double aTake) { ZeroMemory(m_request); ZeroMemory(m_result); m_request.action =TRADE_ACTION_SLTP; m_request.symbol =aSymbol; m_request.magic =NULL; m_request.sl =aStop; m_request.tp =aTake; m_request.position=PositionGetInteger(POSITION_TICKET); return(OrderSend(m_request,m_result)); }
Und nur weil CTradeExt von CTrade abgeleitet ist verwende ich so vertrottelte Variablennamen die mit m_ beginnen. WOFÜR? Die sind so wie so im Object geschützt!
Die Parameternamen der Funktionen sind allerdings kritisch, da wird nix gemacht.
Detto der gleiche Unfug mit den EXTxxxx Variablennamen. inp_xxx wäre sinnvoller für Eingabeparameter.
Mann bin ich heiß auf die Brüder. Der Scheiss hat mich fast 2 Tage gekostet!
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Seit Stunden kämpfe ich mit nachfolgendem Code, der das Öffnen einer Position vereinfachen sollte und eine Erweiterung von CTrade werden soll.
Die Fehler treten auf unterschiedlichen Währungspaaren unterschiedlich auf (zb USDJPY, EURUSD). Ausserdem hat dieser Code schon funktioniert!
Die Fehler sind auch unterschiedlich bei Trade.Buy() und Trade.PositionOpen(). Prüfroutine Report ist eingebaut, ich kann keine Fehler entdecken.