Haben Sie die Dokumentation gelesen?
Parameters
ticket
[in] Auftragsindex oder Auftragsticket, je nach zweitem Parameter.
auswählen
[in] Selektionsflags. Es kann einer der folgenden Werte sein:
SELECT_BY_POS - Index im Auftragspool,
SELECT_BY_TICKET - der Index ist ein Auftragsticket.
pool=MODE_TRADES
[in] Optionaler Auftragspool-Index. Wird verwendet, wenn der ausgewählte Parameter SELECT_BY_POS ist. Er kann einen der folgenden Werte annehmen:
MODE_TRADES (Standard) - aus dem Handelspool ausgewählter Auftrag (offene und schwebende Aufträge),
MODE_HISTORY - aus dem History-Pool ausgewählter Auftrag (geschlossener und stornierter Auftrag).
bool OrderSelect( int index, // index or order ticket int select, // flag int pool=MODE_TRADES // mode );
boopa26 möchte offene Aufträge schließen, also wählt boopa MODE_TRADES als dritten Parameter
Wählt boopa26 SELECT_BY_POS oder SELECT_BY_TICKET? boopa26 weiß es nicht
SELECT_BY_POS //index inside order pool, SELECT_BY_TICKET //index is order ticket.
https://docs.mql4.com/trading/orderclose
Wie funktioniert der boopa26-Zyklus ohne for-Zyklen oder while-Zyklen, aber mit if-Bedingungen, um offene Aufträge mit der Auftragsauswahlfunktion zu schließen?
Die Dokumentation Auftragsschließung erfordert, dass das Auftragsticket gefunden wird, aber boopa26 wählt den Auftrag aus, um die Auftragsposition und nicht das Ticket zu finden.
bool OrderClose( int ticket, // ticket double lots, // volume double price, // close price int slippage, // slippage color arrow_color // color );
1. Auftrag auswählen
2. Auftrag schließen
weiß nicht wie
//+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "http://www.mql4.com" #property description "Moving Average sample expert advisor" #define MAGICMA 20131111 //--- Inputs input double Lots =0.1; input double MaximumRisk =0.02; input double DecreaseFactor=3; input int MovingPeriod =12; input int MovingShift =6; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //--- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //--- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //--- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //--- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //--- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //--- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //--- sell conditions if(Open[1]>ma && Close[1]<ma) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); return; } //--- buy conditions if(Open[1]<ma && Close[1]>ma) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue); return; } //--- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //--- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //--- check order type if(OrderType()==OP_BUY) { if(Open[1]>ma && Close[1]<ma) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(Open[1]<ma && Close[1]>ma) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { //--- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //--- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //--- } //+------------------------------------------------------------------+gleitender durchschnitt expert advisor verwendet für zyklus zum schließen offener aufträge
Ich denke, "boopa26" muss Folgendes tun:
- Zuerst muss "boopa26" die Grundlagen des Programmierens lernen (z.B. in C).
- Dann muss "boopa26" das Buch/Tutorial lesen und befolgen (auch wenn es alt und veraltet ist).
- Gleichzeitig muss "boopa26" die gesamte Dokumentation lesen, mit besonderem Augenmerk auf die MQL4 Updates, die nicht im Buch/Tutorial erwähnt werden.
- Dann muss "boopa26" mehrere Code-Beispiele für Indikatoren, Expert Advisors (EAs) und Skripte in der User Code Base studieren.
- Dann kann "boopa26" anfangen, seine eigenen, aber sehr einfachen Indikatoren zu erstellen und langsam darauf aufbauen, bis er in der Lage ist, komplexere Indikatoren zu verstehen und zu erstellen.
- Dann kann "boopa26" anfangen, seine eigenen, aber sehr einfachen EAs zu erstellen und langsam darauf aufbauen, bis er in der Lage ist, komplexere EAs zu verstehen und zu erstellen.
"boopa26" muss auch eine sehr wichtige Lektion lernen, nämlich dass "boopa26" nicht alle notwendigen Schritte überspringen sollte, denn sonst verschwendet "boopa26" nur die Zeit aller, und statt eines "schönen Kuchens" wird "boopa26" nur "verbrannte Kohle" haben.
Ich denke, "boopa26" muss Folgendes tun:
- Zuerst muss "boopa26" die Grundlagen des Programmierens lernen (z.B. in C).
- Dann muss "boopa26" das Buch/Tutorial lesen und befolgen (auch wenn es alt und veraltet ist).
- Gleichzeitig muss "boopa26" die gesamte Dokumentation lesen, mit besonderem Augenmerk auf die MQL4 Updates, die nicht im Buch/Tutorial erwähnt werden.
- Dann muss "boopa26" mehrere Code-Beispiele für Indikatoren, Expert Advisors (EAs) und Skripte in der User Code Base studieren.
- Dann kann "boopa26" anfangen, seine eigenen, aber sehr einfachen Indikatoren zu erstellen und langsam darauf aufbauen, bis er in der Lage ist, komplexere Indikatoren zu verstehen und zu erstellen.
- Dann kann "boopa26" beginnen, seine eigenen, aber sehr einfachen EAs zu erstellen und langsam darauf aufbauen, bis er in der Lage ist, komplexere EAs zu verstehen und zu erstellen.
"boopa26" muss auch eine sehr wichtige Lektion lernen, nämlich dass "boopa26" nicht alle notwendigen Schritte auslassen darf, denn sonst verschwendet "boopa26" nur die Zeit aller, und statt eines "schönen Kuchens" hat er dann nur "verbrannte Holzkohle".
1. braucht keine C-Kenntnisse. mql4 hat andere Funktionen
2. Buch bereits gelesen
3. Dokumentation bereits gelesen
4. bereits Code geschrieben
5. ?
6. ?
boopa26 verschwendet nicht die Zeit der Leute
FMIC-Lehrer, der "boopa26" das Backen von Holzkohlekuchen beibringt
FMIC-Holzkohlekuchen-Klasse
- 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.
boopa26 kann den Code für das Senden von Aufträgen schreiben, aber er kann die Funktion order select nicht schreiben, um Aufträge zu schließen. boopa26 möchte die Funktion order select schreiben, um Aufträge ohne for-Zyklen oder while-Zyklen zu schließen. boopa26 möchte die Funktion order select schreiben, um Aufträge mit if-Bedingungen zu schließen, aber boopa26 versteht nicht, wie man die Funktion order select zusammensetzt, um Aufträge zu schließen
Beispiel Kaufauftrag senden
if(OrdersTotal()==0)OrderSend(Symbol(),OP_BUY,.1,Ask,3,0,0,NULL,9,0,clrNONE);
Beispiel OrderSelect. boopa26 versteht nicht
OrderSelect(int index,int select,int pool)
Was ist int index?
Was ist int select?
Was ist int pool?
wie funktioniert order select?