Frage zur OrderSelect-Funktion

 

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?

 

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


 
Lesen der Dokumentation jetzt https://docs.mql4.com/trading/orderselect
 
gumrai hätte einen Link zur Dokumentation einfügen können. das war nur ein Scherz. danke gumrai
 
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.
 

boopa26 wählt MODE_TRADES als dritten Parameter

boopa26 wählt SELECT_BY_POSITION als zweiten Parameter

boopa26 wählt den Bestellindex als ersten Parameter


Beispiel

static int order_index;

if(OrderSelect(order_index,SELECT_BY_POSITION,MODE_TRADES)==1
 

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:

  1. Zuerst muss "boopa26" die Grundlagen des Programmierens lernen (z.B. in C).
  2. Dann muss "boopa26" das Buch/Tutorial lesen und befolgen (auch wenn es alt und veraltet ist).
  3. Gleichzeitig muss "boopa26" die gesamte Dokumentation lesen, mit besonderem Augenmerk auf die MQL4 Updates, die nicht im Buch/Tutorial erwähnt werden.
  4. Dann muss "boopa26" mehrere Code-Beispiele für Indikatoren, Expert Advisors (EAs) und Skripte in der User Code Base studieren.
  5. 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.
  6. 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.

 
FMIC:

Ich denke, "boopa26" muss Folgendes tun:

  1. Zuerst muss "boopa26" die Grundlagen des Programmierens lernen (z.B. in C).
  2. Dann muss "boopa26" das Buch/Tutorial lesen und befolgen (auch wenn es alt und veraltet ist).
  3. Gleichzeitig muss "boopa26" die gesamte Dokumentation lesen, mit besonderem Augenmerk auf die MQL4 Updates, die nicht im Buch/Tutorial erwähnt werden.
  4. Dann muss "boopa26" mehrere Code-Beispiele für Indikatoren, Expert Advisors (EAs) und Skripte in der User Code Base studieren.
  5. 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.
  6. 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