Da ich, bisher nichts zum aktivierungscheck von PeningOrders in MQL5 finden konnte, frage ich hier:
Bisher habe ich in MQL4 dazufolgendes verwendet.
Da es hier aber speziell um eine Pending Order geht, bin ich unsicher ob folgendes funktionieren könnte.
( 2te Frage:Bzw wird eine Pending Order bei aktivierung in ORDER_TYPE_BUY / ORDER_TYPE_SELL umgewandelt?)
(3te Frage: Zeigt ORDER_STATE_FILLED an ob eine Pendingorder vollständig gesetzt oder auch "aktiviert" wurde?)
Danke euch für alle Antworten :)
Was meinstdu mit aktivierungscheck?
Du bekommst ja einen retcode, den kannst du abfragen
retcode 10009= pending gesetzt
amando:
Du bekommst ja einen retcode, den kannst du abfragen
retcode 10009= pending gesetzt
retcode 10009 ????????????????????????
Ich würde es mit OnTradeTransaction() machen. F1 - da gibt es viel zu lesen und lernen.
void OrderDelete(const ulong ticket) { if(ticket>0) { MqlTradeRequest m_request={0}; MqlTradeResult result; //--- setting request m_request.action =TRADE_ACTION_REMOVE; m_request.order =ticket; //--- action and return the result //return(OrderSend(m_request,result)); if(!OrderSend(m_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); } }Otto Pauser
retcode 10009 ????????????????????????
Ich würde es mit OnTradeTransaction() machen. F1 - da gibt es viel zu lesen und lernen.
Jede trade transaction gibt dir einen retcode zurück Otto.
Steht dann auch im tab experten
https://www.mql5.com/de/docs/constants/errorswarnings/enum_trade_return_codes
- www.mql5.com
retcode 10009 ????????????????????????
Ich würde es mit OnTradeTransaction() machen. F1 - da gibt es viel zu lesen und lernen.
if (OnTradeTransaction(trans,request,result)
Wo bekomme ich
trans,request,result
her, wenn ich die order über
trade.BuyStop()
eröffnet habe?
und für beide der von euch gennanten Optionen muss ich die Position auswählen,
soll ich sie als Position oder als Order auswählen?
(Mir wäre nur der Fall für eine Position bekannt)
if (OnTradeTransaction){ for(int i=PositionsTotal();i>0;i--;){ if(PositionGetSymbol(i)){Comment"Position" if(CheckResultRetcode()==TRADE_RETCODE_DONE){...}
So geht's sicher nicht! Du kannst das nicht mit if abfragen. Das ist eine Ereignisbehandlungsfunktion und wird automatisch vom System aufgerufen, wie zB OnTick() .
Setze den Cursor auf OnTradeTransaction drücke F1 und kopier dir das Beispiel aus der Reference und probier es aus. Einfach auf irgendeinen Chart ziehen.
Im EA musst du OnTradeTransaction(....) definieren. Siehe Beispiel.
void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { // hier dein code }
Dieses Ereignis wird an ALLE Charts gesendet!
Leute ihr müsst die Reference verwenden!!!!!!! Und am besten die englische Version. Die deutschen Überstzungen sind oft unverständlich.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Es geht aber viel einfacher:
bool posExists; void OnTrade() { posExists=PositionSelect(_Symbol); }
Wurde die pending Order in eine Position umgewandelt, oder die bestehende Position vom TP oder SL 'gefressen',
ändert sich der Zustand von posExists.
So geht's sicher nicht! Du kannst das nicht mit if abfragen. Das ist eine Ereignisbehandlungsfunktion und wird automatisch vom System aufgerufen, wie zB OnTick() .
Setze den Cursor auf OnTradeTransaction drücke F1 und kopier dir das Beispiel aus der Reference und probier es aus. Einfach auf irgendeinen Chart ziehen.
Im EA musst du OnTradeTransaction(....) definieren. Siehe Beispiel.
Dieses Ereignis wird an ALLE Charts gesendet!
Leute ihr müsst die Reference verwenden!!!!!!! Und am besten die englische Version. Die deutschen Überstzungen sind oft unverständlich.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Es geht aber viel einfacher:
Wurde die pending Order in eine Position umgewandelt, oder die bestehende Position vom TP oder SL 'gefressen',
ändert sich der Zustand von posExists.
Das Ticket bekommst du dann (bei bestehender Position) mit:
long PosTicket=PositionGetInteger(POSITION_TICKET);
Wurde die Position per TP oder SL geschlossen erhältst du Information darüber so:
//+------------------------------------------------------------------+ //| Trading functions | //+------------------------------------------------------------------+ bool LastDealsInfo(string _symbol, ulong &deal_ticket, ENUM_DEAL_TYPE &deal_type, long &deal_magic, double &deal_volume, double &deal_price, double &deal_profit, ENUM_DEAL_REASON &deal_reason, int back=3600) { datetime limit=TimeCurrent(); datetime start=limit-back; // 3600=seconds of 1 hour, 86400=seconds of 1 day if(!HistorySelect(start,limit)) // select history return(false); // no history available uint idx, idxMax=HistoryDealsTotal()-1; //ulong deal_ticket; string deal_symbol; ENUM_DEAL_ENTRY deal_entry; //ENUM_DEAL_REASON deal_reason; double deal_commiss; double deal_swap; double deal_rawprof; for(idx=idxMax; idx>0; idx--) { deal_ticket = HistoryDealGetTicket(idx); // get ticket deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL); // get symbol if(deal_symbol==_symbol) // check symbol { deal_entry = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY); deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON); if(deal_entry==DEAL_ENTRY_OUT) // check entrytype //if(deal_reason==DEAL_REASON_SL) // check reason { deal_type = (ENUM_DEAL_TYPE)HistoryDealGetInteger(deal_ticket,DEAL_TYPE); deal_magic = HistoryDealGetInteger(deal_ticket,DEAL_MAGIC); deal_volume = HistoryDealGetDouble (deal_ticket,DEAL_VOLUME); deal_price = HistoryDealGetDouble (deal_ticket,DEAL_PRICE); deal_commiss = HistoryDealGetDouble (deal_ticket,DEAL_COMMISSION); deal_swap = HistoryDealGetDouble (deal_ticket,DEAL_SWAP); deal_rawprof = HistoryDealGetDouble (deal_ticket,DEAL_PROFIT); deal_profit = deal_commiss+deal_swap+deal_rawprof; return(true); } } } return(false); } double LastDealsProfit(string _symbol, int back=3600) { datetime limit=TimeCurrent(); datetime start=limit-back; // 3600=seconds of 1 hour, 86400=seconds of 1 day if(!HistorySelect(start,limit)) // select history return(NULL); // no history available uint idx, idxMax=HistoryDealsTotal()-1; ulong deal_ticket; string deal_symbol; long deal_entry; long deal_reason; double deal_commiss; double deal_swap; double deal_profit; double deal_result; for(idx=idxMax; idx>0; idx--) { deal_ticket = HistoryDealGetTicket(idx); // get ticket deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL); // get symbol if(deal_symbol==_symbol) // check symbol { deal_entry = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY); deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON); if(deal_entry==DEAL_ENTRY_OUT) // check entrytype //if(deal_reason==DEAL_REASON_SL) // check reason { deal_commiss = HistoryDealGetDouble (deal_ticket,DEAL_COMMISSION); deal_swap = HistoryDealGetDouble (deal_ticket,DEAL_SWAP); deal_profit = HistoryDealGetDouble (deal_ticket,DEAL_PROFIT); deal_result = deal_commiss+deal_swap+deal_profit; return(deal_result); } } } return(NULL); } double LastDealsPrice(string _symbol, int back=3600) { datetime limit=TimeCurrent(); datetime start=limit-back; // 3600=seconds of 1 hour, 86400=seconds of 1 day if(!HistorySelect(start,limit)) // select history return(NULL); // no history available uint idx, idxMax=HistoryDealsTotal()-1; ulong deal_ticket; string deal_symbol; long deal_entry; long deal_reason; double deal_price; for(idx=idxMax; idx>0; idx--) { deal_ticket = HistoryDealGetTicket(idx); // get ticket deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL); // get symbol if(deal_symbol==_symbol) // check symbol { deal_entry = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY); deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON); if(deal_entry==DEAL_ENTRY_OUT) // check entrytype //if(deal_reason==DEAL_REASON_SL) // check reason { deal_price = HistoryDealGetDouble (deal_ticket,DEAL_PRICE); return(deal_price); } } } return(NULL); }
Kleiner Auszug aus meiner Bibliothek ;)
Donations werden gerne entgegengenommen (siehe mein Profil)
bool posExists; void OnTrade() { posExists=PositionSelect(_Symbol); long PosTicket=PositionGetInteger(POSITION_TICKET); }
100% sicher dass man so das Ticket der gerade Eröffneten Position bekommt
und nicht eines der anderen Positionen die bereits auf sind?100% sicher dass man so das Ticket der gerade Eröffneten Position bekommt
und nicht eines der anderen Positionen die bereits auf sind?- 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.
Da ich, bisher nichts zum aktivierungscheck von PeningOrders in MQL5 finden konnte, frage ich hier:
Bisher habe ich in MQL4 dazufolgendes verwendet.
Da es hier aber speziell um eine Pending Order geht, bin ich unsicher ob folgendes funktionieren könnte.
( 2te Frage:Bzw wird eine Pending Order bei aktivierung in ORDER_TYPE_BUY / ORDER_TYPE_SELL umgewandelt?)
(3te Frage: Zeigt ORDER_STATE_FILLED an ob eine Pendingorder vollständig gesetzt oder auch "aktiviert" wurde?)
Danke euch für alle Antworten :)