Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1206

 
Artyom Trishkin:

Ridimensiona l'array nnc_arr_in di 1 in più della sua dimensione nella cella 0 dell'array delle strutture:

Grazie.

 

Domanda mql5

Ci sono due posizioni aperte e un segnale(Flag==true)

solo una posizione dovrebbe essere chiusa da questo segnale, cioè quella con il profitto maggiore.

Come chiudere solo quello con il profitto più alto?

Qual è il modo migliore per gestire questo evento?

Sto cercando di farlo in questo modo:

if (invertStart == true) // получил событие, о том что есть две позиции и одну можно закрыть.
   {     
   int npos_L1=0;   NPos_L1(npos_L1);
   if(npos_L1==1)
   {
   int positions=PositionsTotal();
   for(int i=0;i<=positions;i++)
   {
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0 && PositionGetInteger(POSITION_TYPE)== POSITION_TYPE_SELL && POSITION_PROFIT>=50) //  50  допустим...
   {
   m_trade.PositionClose(ticket); 
   i--;
   invertStart = false;
   return;  
   }
   }
   }
   }  

L'ultima posizione aperta sarà chiusa come risultato.

Vi prego di consigliarmi come farlo correttamente, mi piacerebbe avere un esempio. Leggo libri di riferimento e primer, ma non sempre capisco le sottigliezze.

 
Vladpedro:

Domanda mql5

Ci sono due posizioni aperte e un segnale(Flag==true)

solo una posizione dovrebbe essere chiusa da questo segnale, cioè quella con il profitto maggiore.

Come chiudere solo quello con il profitto più alto?

Qual è il modo migliore per gestire questo evento?

Sto cercando di farlo in questo modo:

L'ultima posizione aperta sarà chiusa come risultato.

Vi prego di consigliarmi come farlo correttamente, ho bisogno di un esempio. Leggo libri di riferimento ma non sempre capisco i dettagli.

Codice:

   ulong ticket=ULONG_MAX;
   double profit=DBL_MIN;
   if(invertStart == true)  // получил событие, о том что есть две позиции и одну можно закрыть.
     {
      int positions=PositionsTotal();
      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         ulong tmp_ticket=PositionGetTicket(i);
         if(ticket!=0)
           {
            double tmp_profit=PositionGetDouble(POSITION_PROFIT);
            if(tmp_profit>profit)
              {
               ticket=tmp_ticket;
               profit=tmp_profit;
              }
           }
        }
      //---
      if(ticket!=ULONG_MAX)
         m_trade.PositionClose(ticket);
     }
 
Vladimir Karputov:

Codice:

Grazie mille, sembra funzionare. Si lamenta solo del biglietto, dato che c'è già una tale variabile locale.

La dichiarazione di 'ticket' nasconde la variabile locale Lim_Stop_03_Sell_pos_06.mq5 299 10

Alcuni di questi biglietti potrebbero dover essere nascosti all'interno.

 
Vladpedro:

Grazie mille, sembra funzionare, solo che si lamenta del biglietto, perché c'è già una tale variabile locale.

La dichiarazione di 'ticket' nasconde la variabile locale Lim_Stop_03_Sell_pos_06.mq5 299 10

Alcuni di questi biglietti potrebbero dover essere nascosti all'interno.

Rinominare la variabile

ulong ticket=ULONG_MAX;

в

ulong close_ticket=ULONG_MAX;

e naturalmente non dimenticate di rinominarlo nel vostro codice.

 
Vladimir Karputov:

Rinominare la variabile

в

e naturalmente non dimenticate di rinominarlo anche nel codice.

Sì grazie, ho già risolto... l'ho rinominato.

 

Buona giornata!

Potete per favore dirmi dove posso trovare un EA che invia un'email o una lettera push se il prezzo è sopra la linea superiore, o sotto la linea inferiore (la linea è orizzontale o inclinata e può essere spostata sul grafico)

Forse qualcuno ne ha uno, per favore condividilo.

Solo su MT5

Grazie!

 

se collego l'indicatore in EA

int OnInit()
{
   ind_handle = iCustom(_Symbol, indperiod, "MyInd", indParam);
   return(INIT_SUCCEEDED);
}

e poi ottengo i buffer degli indicatori usando CopyBuffer(ind_handle, 0, 1, 3, buffer1)


devo leggere ogni tick dei buffer degli indicatori?

Ho bisogno di una risposta, e preferibilmente della fonte - documenti, articoli:

1. l'indicatore si calcola sempre in parallelo

2. l'indicatore è calcolato solo al momento della chiamata di CopyBuffer()

 
Igor Makanu:

se collego l'indicatore in EA

e poi ottengo i buffer degli indicatori usando CopyBuffer(ind_handle, 0, 1, 3, buffer1)


devo leggere ogni tick dei buffer degli indicatori?

Ho bisogno di una risposta, e preferibilmente della fonte - documenti, articoli:

1. l'indicatore si calcola sempre in parallelo

2. l'indicatore è calcolato solo al momento della chiamata di CopyBuffer()

Igor, se l'indicatore è scritto correttamente, si possono cambiare solo i valori della barra corrente. Pertanto, se avete bisogno di valori attuali, dovreste usare il CopyBuffer subito prima di usare questi valori freschi. E se abbiamo bisogno di valori storici, questi non cambiano, e non c'è motivo di rileggerli.

Da qualche parte ci sono informazioni sul calcolo dell'indicatore su ogni tick. Per quanto mi ricordo, di default l'indicatore viene ricalcolato solo quando si accede ad esso, ma è possibile farlo ricalcolare ad ogni tick. Come farlo, si dovrebbe guardare nella documentazione.

 
Alexey Viktorov:
Igor, se l'indicatore è scritto correttamente, si possono cambiare solo i valori della barra corrente. Pertanto, se avete bisogno di valori attuali, dovreste usare il CopyBuffer subito prima di usare questi valori freschi. E se abbiamo bisogno di valori storici, questi non cambiano, e non c'è motivo di rileggerli.

C'è qualche informazione da qualche parte sul calcolo dell'indicatore su ogni tick. Per quanto ricordo, di default l'indicatore viene ricalcolato solo quando viene chiamato, ma è possibile farlo ricalcolare ad ogni tick. Come farlo è nella documentazione.

OK, quindi dovrò comunque testarlo

il problema è nel ridisegno dell'indicatore, non voglio ancora riscrivere l'indicatore