Domanda sulla funzione OrderSelect

 

boopa26 può scrivere il codice di invio degli ordini ma non può scrivere la funzione order select per chiudere gli ordini. vuole scrivere la funzione order select per chiudere gli ordini senza cicli for o while. boopa26 vuole scrivere la funzione order select per chiudere gli ordini con condizioni if ma boopa26 non capisce come assemblare la funzione order select per chiudere gli ordini


esempio ordine di acquisto inviato

if(OrdersTotal()==0)OrderSend(Symbol(),OP_BUY,.1,Ask,3,0,0,NULL,9,0,clrNONE);


esempio di ordine select. boopa26 non capisce

OrderSelect(int index,int select,int pool)


cos'è int index?

cos'è int select?

cos'è int pool?

come fa order select?

 

Hai letto la documentazione?

Parameters

ticket

[indice dell'ordine o biglietto dell'ordine a seconda del secondo parametro.

select

[in] Bandiere di selezione. Può essere uno qualsiasi dei seguenti valori:

SELECT_BY_POS - indice nel pool di ordini,
SELECT_BY_TICKET - l'indice è il biglietto dell'ordine.

pool=MODE_TRADES

[in] Indice del pool di ordini opzionale. Usato quando il parametro selezionato è SELECT_BY_POS. Può essere uno dei seguenti valori:

MODE_TRADES (default) - ordine selezionato dal pool di trading (ordini aperti e in sospeso),
MODE_HISTORY - ordine selezionato dal pool storico (ordine chiuso e cancellato).


 
leggere la documentazione ora https://docs.mql4.com/trading/orderselect
 
gumrai avrebbe potuto includere il link della documentazione. solo scherzando. grazie gumrai
 
bool  OrderSelect(
   int     index,            // index or order ticket
   int     select,           // flag
   int     pool=MODE_TRADES  // mode
   );

boopa26 vuole chiudere gli ordini aperti quindi boopa sceglie MODE_TRADES come terzo parametro


boopa26 fa SELECT_BY_POS o SELECT_BY_TICKET ? boopa26 non lo sa

SELECT_BY_POS //index inside order pool,
SELECT_BY_TICKET //index is order ticket.
 

boopa26 sceglie MODE_TRADES come terzo parametro

boopa26 sceglie SELECT_BY_POSITION come secondo parametro

boopa26 sceglie l'indice dell'ordine come primo parametro


esempio

static int order_index;

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

https://docs.mql4.com/trading/orderclose

come fa boopa26 senza cicli for o while cycles ma con condizioni if per chiudere gli ordini aperti con la funzione order select?

documentazione la chiusura dell'ordine richiede la ricerca del ticket dell'ordine ma boopa26 fa order select per trovare la posizione dell'ordine non il ticket

bool  OrderClose(
   int        ticket,      // ticket
   double     lots,        // volume
   double     price,       // close price
   int        slippage,    // slippage
   color      arrow_color  // color
   );

1. selezionare l'ordine

2. chiudere l'ordine

non sa come

 
//+------------------------------------------------------------------+
//|                                               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();
//---
  }
//+------------------------------------------------------------------+
media mobile expert advisor usa per il ciclo per chiudere gli ordini aperti
 

Penso che "boopa26" abbia bisogno di fare quanto segue:

  1. Per prima cosa, "boopa26" deve prima imparare le basi della codifica (come in C).
  2. Poi "boopa26" deve leggere e seguire il Libro/Tutorial (anche se è vecchio e non aggiornato).
  3. Allo stesso tempo, "boopa26" deve leggere l'intera documentazione con particolare attenzione agli aggiornamenti MQL4 che non sono menzionati nel Libro/Tutorial.
  4. Poi "boopa26" ha bisogno di studiare diversi esempi di codice per Indicatori, Expert Advisors (EAs) e Scripts nella base di codice utente.
  5. Poi "boopa26" può iniziare a creare i propri indicatori, ma molto semplici, e lentamente costruire su di essi fino a quando non sarà in grado di capire e creare indicatori più complessi.
  6. Poi "boopa26" può iniziare a creare i suoi EAs, ma molto semplici, e lentamente costruirli fino a quando non sarà in grado di capire e creare EAs più complessi.

"boopa26" deve anche imparare una lezione molto importante, che "boopa26" non dovrebbe saltare tutti i passi necessari, perché altrimenti "boopa26" sarà solo sprecare il tempo di tutti, e invece di una "bella torta", tutto "boopa26" avrà solo "carbone bruciato".

 
FMIC:

Penso che "boopa26" abbia bisogno di fare quanto segue:

  1. Per prima cosa, "boopa26" deve prima imparare le basi della codifica (come in C).
  2. Poi "boopa26" deve leggere e seguire il Libro/Tutorial (anche se è vecchio e non aggiornato).
  3. Allo stesso tempo, "boopa26" deve leggere l'intera documentazione con particolare attenzione agli aggiornamenti MQL4 che non sono menzionati nel Libro/Tutorial.
  4. Poi "boopa26" ha bisogno di studiare diversi esempi di codice per Indicatori, Expert Advisors (EAs) e Scripts nella base di codice utente.
  5. Poi "boopa26" può iniziare a creare i propri indicatori, ma molto semplici, e lentamente costruire su di essi fino a quando non sarà in grado di capire e creare indicatori più complessi.
  6. Poi "boopa26" può iniziare a creare i suoi, ma molto semplici EAs e lentamente costruire su di essi fino a quando non sarà completamente in grado di capire e fare EAs più complessi.

"boopa26" deve anche imparare una lezione molto importante, che "boopa26" non deve saltare tutti i passi necessari, perché altrimenti "boopa26" farà solo perdere tempo a tutti, e invece di una "bella torta", tutto quello che avrà sarà "carbone bruciato".

1. non ha bisogno di conoscenze di c. mql4 è funzioni diverse

2. ha già letto il libro

3. ha già letto la documentazione

4. codice già scritto

5. ?

6. ?

boopa26 non fa perdere tempo alla gente

Insegnante FMIC che insegna a boopa26 a cucinare torte al carbone

Classe di torta al carbone FMIC

Motivazione: