retcode=10013 deal=0 order=0 OrderSend error 4756 failed prices for GBPUSD 0 [Invalid request] bei Position Modify via MQLRequest
Hallo da ich mich noch mit MqlRequest beschäftige und ich ein TrailingStop auf dieser Basis gestalten wollte kommt der Fehler im Journal:
retcode=10013 deal=0 order=0
OrderSend error 4756
failed prices for GBPUSD 0 [Invalid request]
Kann mir jemand erkären warum die Fehlermeldungen kommen?
Bei Beispiel 1 geht ja Magicnummer etc dabei flöten.
Deshalb soll jetzt diese Möglichkeit herhalten, um die Magicnummer etc bei zu behalten.
Dir fehlt PositionSelectByTicket
ohne den wirds nicht funktionieren
den part versteh ich nicht, muss ich aber auch nicht
if(PrevStopLoss<NewStopLoss-ts*_Point)
Dir fehlt PositionSelectByTicket
ohne den wirds nicht funktionieren
den part versteh ich nicht, muss ich aber auch nicht
if(PrevStopLoss<NewStopLoss-ts*_Point)Vergleicht ja den neuen Wert mit den alten damit der dann den Wert auf ts= TrailingStop Distanz ändert wenn dieser unter dem vom soll ist.
Ahhh okay... daher also. Vergleicht ja den neuen Wert mit den alten damit der dann den Wert auf ts= TrailingStop Distanz ändert wenn dieser unter dem vom soll ist.
Warum stellst dann nicht gleich den new sl richtig?
Warum stellst dann nicht gleich den new sl richtig?
Hast auch wieder recht, man lernt nie aus.
Bisher hab ich die SelectByTicket noch nicht genutzt... erst mal darüber belesen und schauen wie das am besten möglich ist.
Leider seh ich immer noch nicht durch....
for(int i=PositionsTotal()-1; i>=0; i--) { string symbol=PositionGetSymbol(i); if((_Symbol==symbol) && (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)) { double NewStopLoss=NormalizeDouble(ask-sl*_Point,_Digits); ulong PositionTicket=PositionGetInteger(POSITION_TICKET); double PrevStopLoss=PositionGetDouble(POSITION_SL); double PositionPreis=NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits); ulong Positionmagic=PositionGetInteger(POSITION_MAGIC); string Kommentar=PositionGetString(POSITION_COMMENT); string mSymbol=PositionGetString(POSITION_SYMBOL); int Digit=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); double Volumen=PositionGetDouble(POSITION_VOLUME); ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); PrintFormat("#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]", PositionTicket, mSymbol, EnumToString(type), Volumen, DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),Digit), DoubleToString(sl,Digit), DoubleToString(tp,Digit), Positionmagic); PositionSelectByTicket(PositionTicket); if(PrevStopLoss<NewStopLoss) { request.action=TRADE_ACTION_MODIFY; request.position=PositionTicket; request.sl=NewStopLoss*_Point; request.tp=PositionPreis+tp*_Point; request.magic=Positionmagic; request.comment=Kommentar; request.deviation=5; PrevStopLoss=NewStopLoss; } //--- Anfrage senden if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen //--- Details zur Transaktion PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); //--- die Werte der Anfrage und des Ergebnisses auf Null setzen ZeroMemory(request); ZeroMemory(result); } } }
PositionByTicket is ja vom typ bool laut der Referenz
" PositionSelectBy Wählt eine offene Position nach dem angegebenen Ticket für die weitere Arbeit aus. Gibt true bei einem erfolgreichen Beenden der Funktion zurück. Gibt false zurück, wenn das Beenden der Funktion fehlgeschlagen ist. Rufen Sie die Funktion GetLastError() auf, um Details zum Fehler zu bekommen." PositionSelectByTicketMit der Zuweisung PositionTicket sollte das also erledingt sein.
oder muss ich bei Anfrage auf Änderung (request.) dann das Ticket Selectieren?
Was für mich mehr Sinn machen würde.
request.position=PositionSelectByTicket(PositionTicket)
failed modify order #0 buy 0 GBPUSD at market sl: 0.00000 tp: 0.00000 -> market, sl: 0.00001 tp: 1.39663 [Invalid request] Wieso sl / tp 0??? Hab ich doch alles angegeben?
OrderSend error 4756
retcode=10013 deal=0 order=0
Hast auch wieder recht, man lernt nie aus.
Bisher hab ich die SelectByTicket noch nicht genutzt... erst mal darüber belesen und schauen wie das am besten möglich ist.
Leider seh ich immer noch nicht durch....
PositionByTicket is ja vom typ bool laut der Referenz
" PositionSelectBy Wählt eine offene Position nach dem angegebenen Ticket für die weitere Arbeit aus. Gibt true bei einem erfolgreichen Beenden der Funktion zurück. Gibt false zurück, wenn das Beenden der Funktion fehlgeschlagen ist. Rufen Sie die Funktion GetLastError() auf, um Details zum Fehler zu bekommen." PositionSelectByTicketMit der Zuweisung PositionTicket sollte das also erledingt sein.
oder muss ich bei Anfrage auf Änderung (request.) dann das Ticket Selectieren?
Was für mich mehr Sinn machen würde.
failed modify order #0 buy 0 GBPUSD at market sl: 0.00000 tp: 0.00000 -> market, sl: 0.00001 tp: 1.39663 [Invalid request] Wieso sl / tp 0??? Hab ich doch alles angegeben?
OrderSend error 4756
retcode=10013 deal=0 order=0
Als beispiel
double OldestPositionPriceShort(const string symbol, const int MagicNumber) //Gewinn der Gesamtposition { double price = -1; datetime endtime= D'31.12.2999'; int i = PositionsTotal(); while(i-->0) { //--- Parameter der Order ulong _ticket=PositionGetTicket(i);// das Ticket der Position PositionSelectByTicket(_ticket); string _symbol =PositionGetString(POSITION_SYMBOL); // Symbol ulong _magic =PositionGetInteger(POSITION_MAGIC); // MagicNumber der Position double _lot =PositionGetDouble(POSITION_VOLUME); datetime time =(datetime)PositionGetInteger(POSITION_TIME); int dir =(int)PositionGetInteger(POSITION_TYPE); double _price =PositionGetDouble(POSITION_PRICE_OPEN); //--- wenn die MagicNumber übereinstimmt, sind Stop Loss und Take Profit nicht gesetzt if(_symbol==symbol && MagicNumber==_magic && time < endtime && dir == POSITION_TYPE_SELL ) { endtime = time; price = _price; } } return(price); }
Als beispiel
Gut habs gemacht wie Du, Suche in offenen Positionen das Ticket, übergebe Positionsnummer / index an i
frage Ticket für i ab und speichere das in PositionTicket.
SelectByTicket bekommt das Ticket von PositionTicket. Hole Infos zur Position, , anschließend prüfe die Magicnummer und wenn das passt gebe es in Journal aus.
dann frage ob sl < neuer sl ist wenn ja, Anfrage Änderung, anfrage zu Ticket , Informationen zuweisen etc. Was übersehe ich?
void CheckTrailingStopAsk(double ask, int sl, int ts, int tp,ulong Magic) { //--- die Anfrage und das Ergebnis deklarieren und initialisieren MqlTradeRequest request= {0}; MqlTradeResult result= {0}; for(int i=PositionsTotal()-1; i>=0; i--) { ulong PositionTicket=PositionGetTicket(i); string mSymbol=PositionGetString(POSITION_SYMBOL); PositionSelectByTicket(PositionTicket); double NewStopLoss=NormalizeDouble(ask-sl*_Point,_Digits); string symbol=PositionGetSymbol(POSITION_SYMBOL); double PrevStopLoss=PositionGetDouble(POSITION_SL); double PositionPreis=NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits); ulong Positionmagic=PositionGetInteger(POSITION_MAGIC); string Kommentar=PositionGetString(POSITION_COMMENT); int Digit=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); double Volumen=PositionGetDouble(POSITION_VOLUME); ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); if((Positionmagic==Magic) && (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)) { PrintFormat("#%I64u %s %s %.2f %s sl: %s tp: %s [%I64d]", PositionTicket, mSymbol, EnumToString(type), Volumen, DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),Digit), DoubleToString(sl,Digit), DoubleToString(tp,Digit), Positionmagic); if(PrevStopLoss<NewStopLoss) { request.action=TRADE_ACTION_MODIFY; request.position=PositionTicket; request.sl=NewStopLoss*_Point; request.tp=PositionPreis+tp*_Point; request.magic=Positionmagic; request.comment=Kommentar; request.deviation=5; PrevStopLoss=NewStopLoss; } //--- Anfrage senden if(!OrderSend(request,result)) PrintFormat("OrderSend error %d",GetLastError()); // wenn die Anfrage konnte nicht gesendet werden, den Fehlercode anzeigen //--- Details zur Transaktion PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); //--- die Werte der Anfrage und des Ergebnisses auf Null setzen ZeroMemory(request); ZeroMemory(result); } } }
Was geht jetzt nicht?
Ich würde in Deiner Situation durch das Programm mit dem Debugger (mit hist. Kursen) Zeile für Zeile durch gehen. So sieht man am schnellsten warum es nicht tut, was es eigentlich tun soll.
Was geht jetzt nicht?
Ich würde in Deiner Situation durch das Programm mit dem Debugger (mit hist. Kursen) Zeile für Zeile durch gehen. So sieht man am schnellsten warum es nicht tut, was es eigentlich tun soll.
Ausdruck: double Wert: Expression could not be evaluated Typ: 0 zb bei allen egal ob string oder double... werd da echt nicht schlau draus... wobei ich mit den debugger nicht wirklich gut umgehen kann.
Bitte die Fehler genau dokumentieren! Wo erscheint Expression could not be evaluated?
Debugger?
Setz mal am Anfang jeder Funktion einen Haltepunkt (F9) und dann starte den Debugger (Strg+F5) und gehe mit F11 von Anweisung zu Anweisung - ist alles unter dem Menüpunkt Debug zu sehen und zu benutzen.
Den Anfangspunkt und das Symbol mit den hist. Kursen muss man aber woanders setzen: Extras => Optionen => Fehlersuche/Profiling
Bitte die Fehler genau dokumentieren! Wo erscheint Expression could not be evaluated?
Debugger?
Setz mal am Anfang jeder Funktion einen Haltepunkt (F9) und dann starte den Debugger (Strg+F5) und gehe mit F11 von Anweisung zu Anweisung - ist alles unter dem Menüpunkt Debug zu sehen und zu benutzen.
Den Anfangspunkt und das Symbol mit den hist. Kursen muss man aber woanders setzen: Extras => Optionen => Fehlersuche/Profiling
in den Einstellungen bei Extras->Optionen->Fehlersuche/Profiling hab ich auch einstellungen vorgenommen.
- 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.
Hallo da ich mich noch mit MqlRequest beschäftige und ich ein TrailingStop auf dieser Basis gestalten wollte kommt der Fehler im Journal:
retcode=10013 deal=0 order=0
OrderSend error 4756
failed prices for GBPUSD 0 [Invalid request]
Kann mir jemand erkären warum die Fehlermeldungen kommen?
Bei Beispiel 1 geht ja Magicnummer etc dabei flöten.
Deshalb soll jetzt diese Möglichkeit herhalten, um die Magicnummer etc bei zu behalten.