Una domanda per gli esperti di MQL - pagina 10

 
FAQ:
Se il tuo ordine si apre, controlla l'apertura, e se lo fa, puoi aprire il secondo ordine con controllo...

Ho scritto due funzioni che si aprono in modo diverso a seconda della situazione e controllerò alla fine di ciascuna di esse (penso che saranno una funzione separata) quali e quanti ordini sono aperti e quali ordini saranno mancati e saranno riaperti.

Se sei un esperto nel campo del posizionamento dell'EA in termini di forex, potresti essere interessato a scoprire di più su di esso e utilizzarlo nel tuo robot di trading. Voglio ribadire i miei ringraziamenti (scusate la mancanza di dettagli).

 

Buongiorno.

È sorto un problema. Non riesco a trovare la funzione che restituisce la dimensione della posizione "aggregata" di un dato strumento! Ho cercato in tutto il forum, compreso il ramo di I.KIM,https://www.mql5.com/ru/forum/131859 - ci sono - diverse funzioni per molti, tranne quella di cui ho bisogno!

Per esempio, se ci sono diverse operazioni di "acquisto" aperte su EUR, potete consigliarmi come determinare il loro importo totale?

GetLot(EURUSD, OP_BUY, magic)

double GetLot(string sy="", int op=-1, int mn=-1) {// возвращает сувокупный размер поз.
   double   l=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return(l);
}
 

Domanda cancellata! È stata scoperta una funzione:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Non è così )
 

In che modo è sbagliato? Allora cosa restituisce questa funzione?

"Restituisce la somma di molte posizioni aperte " - non è quello che dice?

https://www.mql5.com/ru/code/9394

 
Rita:

"Restituisce la somma di molte posizioni aperte" - non è quello che dice?

Proprio così. Non è mai il volume totale di una posizione. Si può aprire molto e controllare.
 

Non ho bisogno di prendere in considerazione le locs. O meglio, ecco come:

Quello di cui ho bisogno è questo. Se ci sono diverse posizioni aperte Sell e Buy, ho bisogno di rimuovere le posizioni counter (di compensazione), così - per rimanere solo in una direzione.

Volevo calcolare prima la somma di tutte le "baie", poi la somma di tutte le "vendite". Dopo di che, trova la differenza (cioè la cui dimensione totale è maggiore). E questa "differenza" dovrebbe essere lasciata nel mercato, - e tutte quelle opposte rimosse!

Quindi, questa funzione GetAmountLotFromOpenPos non funzionerà qui? Per esempio, se imposto

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-Non restituisce la quantità totale di lotti di tutte le posizioni di vendita?

 
Rita:

-Non mi ridarà la somma dei lotti di tutte le posizioni di vendita?

Mi dispiace se è così, va bene così. Lunedì. La mia testa non è ancora completamente impegnata :)
 
Rita:

Non ho bisogno di prendere in considerazione le locs. O meglio, ecco come:

Quello di cui ho bisogno è questo. Se ci sono diverse posizioni aperte Sell e Buy, ho bisogno di rimuovere le posizioni counter (di compensazione), così - per rimanere solo in una direzione.

Volevo calcolare prima la somma di tutte le "baie", poi la somma di tutte le "vendite". Dopo di che, trova la differenza (cioè la cui dimensione totale è maggiore). E questa "differenza" dovrebbe essere lasciata nel mercato, - e tutte quelle opposte rimosse!

Quindi, questa funzione GetAmountLotFromOpenPos non funzionerà qui? Per esempio, se imposto

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

-Non restituisce il totale dei lotti di tutte le posizioni di vendita?

Nel caso generale:

SummLot = GetAmountLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmountLotFromOpenPos("0", OP_SELL, MagicNumber);

 
Sì, è quello che ho fatto per ottenere un equilibrio "pulito".
Motivazione: