Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 375

 
Falx:

Buona giornata a tutti!

Per favore, datemi un comando affinché il robot non apra più di 1 ordine per 1 candela.

Anche se ha preso la sua presa su questa candela - non per aprire il prossimo ordine sulla stessa candela.

Ora viene fuori che se le condizioni degli indicatori sono soddisfatte - aprire un commercio.

Quando si chiude un deal sul take, si apre immediatamente un nuovo deal sulla stessa candela, e qui non serve più e mi crea problemi.

Sento che è importante dare un feedback.

Ha bisogno di un rigorosamente così 1 candela - 1 affare.

Molte grazie in anticipo!

Iltempo di apertura di una posizione, il tempo di chiusura della posizione - la candela in cui questo tempo e il tempo di apertura di questa candela.
 
Falx:

Buona giornata a tutti!

Per favore, datemi un comando affinché il robot non apra più di 1 ordine per 1 candela.

Anche se ha preso la sua presa su questa candela - non per aprire il prossimo ordine sulla stessa candela.

Ora viene fuori che se le condizioni degli indicatori sono soddisfatte - aprire un commercio.

Quando si chiude un deal sul take, si apre immediatamente un nuovo deal sulla stessa candela, e qui non serve più e mi crea problemi.

Sento che è importante dare un feedback.

Ha bisogno di un rigorosamente così 1 candela - 1 affare.

Grazie in anticipo!

Si può anche usare la bandiera.

Dichiarare una variabile statica bool o una variabile globale, che sia flag. Ordine aperto - flag = true, una nuova candela aperta - flag = false e aggiungere questo flag alla condizione di apertura dell'ordine.

 
Alexey Viktorov:

Si può anche usare una bandiera.

Dichiarare una variabile statica bool o una variabile di livello globale, che sia una bandiera. Ordine aperto - flag = true, una nuova candela aperta - flag = false e aggiungere questo flag alla condizione di ordine aperto.

La bandiera dovrebbe essere salvata nel terminale globale e ripristinata al suo riavvio.
 
Artyom Trishkin:
La bandiera dovrebbe essere salvata nel terminale globale e ripristinata al suo riavvio.

Dipende da quale periodo è il commercio e dalla capacità di riavviare il terminale entro una barra per aprire un ordine e riavviare il terminale.

Non mi piace GV e cerco di farne a meno. Quando si avvia un EA, si dovrebbero raccogliere comunque tutte le informazioni sugli ordini aperti, quindi perché non ripristinare il valore del flag all'avvio? Questa è un'opzione. La seconda variante è che il valore iniziale della bandiera proibisce l'apertura di ordini e solo la prossima barra darà il permesso. Quindi, anche se abbiamo aperto e riavviato l'EA sulla barra corrente, la bandiera ci proibirà comunque di aprire ordini fino alla barra successiva.

Se date questi consigli con tali sottigliezze, non dovrete pensare a nulla. Quindi il numero di domande aumenterà di conseguenza... Perché decidere qualcosa da soli... Chiedete sul forum e otterrete una versione funzionante. Tutto quello che dovrete fare è mettere il prodotto sul mercato...

 
Alexey Viktorov:

Dipende da quale periodo è il commercio e dalla capacità di riavviare il terminale entro una barra per aprire un ordine e riavviare il terminale.

Non mi piace GV e cerco di farne a meno. Quando si avvia un EA, si dovrebbero raccogliere comunque tutte le informazioni sugli ordini aperti, quindi perché non ripristinare il valore del flag all'avvio? Questa è un'opzione. La seconda variante è che il valore iniziale della bandiera proibisce l'apertura di ordini e solo la prossima barra darà il permesso. Quindi, anche se abbiamo un nuovo ordine che si apre sulla barra corrente e riavviamo l'EA, il flag proibirà comunque l'apertura di ordini fino alla barra successiva.

Semplicemente dando consigli con tali sottigliezze, non dovremo pensare a nulla. Di conseguenza, il numero di domande può aumentare. Perché decidere qualcosa da soli... Chiedete sul forum e otterrete una versione funzionante. E l'unica cosa che rimane è mettere il prodotto sul mercato...

:)
Ho l'abitudine di guardare dritto davanti a me.
Per me, proprio perché le bandiere devono ancora essere ripristinate, è meglio guardare la barra di apertura della posizione, e ballarci intorno, e non preoccuparsi delle bandiere e del loro stoccaggio.
 
Artyom Trishkin:
:)
Ho l'abitudine di guardare dritto davanti a me.
Penso che sia meglio guardare la barra di apertura di una posizione, e poi iniziare a ballare intorno ad essa, senza doversi preoccupare delle bandiere e della loro memorizzazione.

È la stessa ragione per cui ci piacciono donne diverse.

Che differenza fa la bandiera o il tempo di apertura di una posizione? Non importa come la giri, devi comunque controllare qualcosa...
 

Ciao, puoi dirmi come restituire il numero degli ultimi ordini perdenti, dopo quelli redditizi?

Ecco il mio codice, cosa c'è di sbagliato?

int GetProfitLoss()// Perdita sugli ordini chiusi (numero degli ultimi ordini perdenti)

{

int Loss = 0;

datetime lastCloseTime = 0;

int cnt = OrdersHistoryTotal();

for(int i=0; i < cnt; i++)

{

se(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime < OrderCloseTime())

{

lastCloseTime = OrderCloseTime();

}

se (OrderProfit()<0)

{

Perdita ++;

}

se(OrderProfit()>0)

{

break; // Esci dal ciclo al primo redditizio incontrato }

}

}

}

}

ritorno (perdita);

}

 
Falx:

Buona giornata a tutti!

Per favore datemi un comando affinché il robot non apra più di 1 ordine per 1 candela.

Anche se ha preso la sua presa su questa candela - non per aprire il prossimo ordine sulla stessa candela.

Ora viene fuori che se le condizioni degli indicatori sono soddisfatte - aprire un commercio.

Quando si chiude un deal sul take, si apre immediatamente un nuovo deal sulla stessa candela, e qui non serve più e mi crea problemi.

Sento che è importante dare un feedback.

Ha bisogno di un rigorosamente così 1 candela - 1 affare.

Grazie in anticipo!

Funzione NumberOfBarCloseLastPos().

Questa funzione restituisce il numero di barra dell'ultima posizione da chiudere, o-1. La selezione delle posizioni da considerare è impostata da parametri esterni:

  • sy- Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni di questo strumento. Il valore predefinito -NULL denota lo strumento di mercato corrente.
  • tf- Timeframe. Il valore predefinito0 indica l'intervallo di tempo corrente.
  • op- operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito-1 significa qualsiasi posizione.
  • mn- Identificatore di posizione, MagicNumber. Il valore predefinito di-1 significa qualsiasi identificatore.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}

La funzione NumberOfBarOpenLastPos().

Questa funzione restituisce il numero di barra dell'ultima posizione aperta o-1. La selezione delle posizioni da considerare è definita da parametri esterni:

  • sy- Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito -NULL denota lo strumento di mercato corrente.
  • tf- Timeframe. Il valore predefinito0 indica l'intervallo di tempo corrente.
  • op- operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito-1 significa qualsiasi posizione.
  • mn- Identificatore di posizione, MagicNumber. Il valore predefinito di-1 significa qualsiasi identificatore.

Poi usando queste funzioni controllate la condizione di cui avete bisogno.

 

Per favore, aiutatemi.

Ho bisogno di aggiungere la seguente funzione al mio robot:

Dopo aver aperto una transazione, in 40 secondi se il profitto è superiore a 15 pips, la transazione viene chiusa istantaneamente, se è inferiore, il takeprofit viene spostato al livello di profitto di 15 pips.

Grazie in anticipo.

 
Vladimir Zubov:

La funzione NumberOfBarCloseLastPos().

Questa funzione restituisce il numero di chiusura della barra dell'ultima posizione o-1. La selezione delle posizioni da prendere in considerazione è definita da parametri esterni:

  • sy- Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni di questo strumento. Il valore predefinito -NULL denota lo strumento di mercato corrente.
  • tf- Timeframe. Il valore predefinito -0 indica l'intervallo di tempo corrente.
  • op- operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito-1 significa qualsiasi posizione.
  • mn- Identificatore di posizione, MagicNumber. Il valore predefinito di-1 significa qualsiasi identificatore.

La funzione NumberOfBarOpenLastPos().

Questa funzione restituisce il numero di barra dell'ultima posizione aperta o-1. La selezione delle posizioni da considerare è definita da parametri esterni:

  • sy- Nome dello strumento di mercato. Se questo parametro è impostato, la funzione considererà solo le posizioni dello strumento specificato. Il valore predefinito -NULL denota lo strumento di mercato corrente.
  • tf- Timeframe. Il valore predefinito0 indica l'intervallo di tempo corrente.
  • op- operazione commerciale, tipo di posizione. Valori validi:OP_BUY,OP_SELL o-1. Il valore predefinito-1 significa qualsiasi posizione.
  • mn- Identificatore di posizione, MagicNumber. Il valore predefinito di-1 significa qualsiasi identificatore.

Poi usate queste funzioni per controllare la condizione di cui avete bisogno.


Grazie mille!

Mi informerò!!!