restituisce la politica di esecuzione. - pagina 8

 

È così che ottengo i dati attuali della media mobile, è corretto?

input int      ma_period = 10;
 int ma_handle = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    ma_handle = iMA(_Symbol,_Period,ma_period,0,MODE_SMA,PRICE_MEDIAN);
   if(ma_handle == INVALID_HANDLE)
     {
      Print("ma_handle == INVALID_HANDLE");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  double   ma[1] ;
   if(CopyBuffer(ma_handle,0,0,1,ma)==1)
     {
     
     
     }
 }

Due domande.

1.Niente sul fatto di non associare il numero del buffer dell'indicatore all'indicatore. Dato che c'è un solo indicatore, ha ottenuto automaticamente il buffer 0 ed è quello che ho specificato.

2. Se ho il manico dell'indicatore nell'inizializzazione, quando cambio i parametri che vengono passati all'indicatore, devo riempire nuovamente l'EA al grafico in modo che arrivi l'evento di inizializzazione e vengano applicati i nuovi parametri?

 
Ivan_Invanov:

È così che ottengo i dati attuali della media mobile, è corretto?

Due domande.

1.Niente sul fatto di non associare il numero del buffer dell'indicatore all'indicatore. Dato che c'è un solo indicatore, ha ottenuto automaticamente il buffer 0 ed è quello che ho specificato.

2. Se ho la gestione dell'indicatore nell'inizializzazione, quando cambio i parametri che vengono passati all'indicatore, devo ricaricare l'EA sul grafico perché l'evento di inizializzazione si verifichi e i nuovi parametri vengano applicati?

1. Non c'è nessuna "associazione". Non c'è mai stato.

Leggiamo l'aiuto su CopyBuffer

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

C'è una funzione che prende l'handle dell'indicatore (nel tuo caso è la variabilema_handle e il numero di buffer '0' - zero, perché l'indicatore Moving Average ha solo un buffer).


2. Se cambi i parametri di input nel tuo EA, inizializzerà di nuovo il tuo EA e l'handle dell'indicatore sarà creato in OnInit con i parametri che hai inserito.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара). При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно...
 
Vladimir Karputov:

1. Non c'è nessuna "associazione". Non c'è mai stato.

...

Significato della chiamata aSetIndexBuffer()

 
Dmitry Fedoseev:

Significa una chiamata a SetIndexBuffer()

Sì, non è chiaro quale sia il numero del buffer dell'indicatore, come vengono creati questi buffer, se appartengono a un indicatore specifico o hanno una numerazione comune. La documentazione dice di scrivere SetIndexBuffer(), ma nell'esempio della media mobile è scritto senza. Ho letto il riferimento e cercato altri articoli, ma non è ancora chiaro. Il preprocessore ha bisogno di specificare i buffer e perché i buffer dovrebbero essere uno in meno rispetto alla direttiva del preprocessore e non lo stesso.
 
Ivan_Invanov:
Sì, non so cos'è un numero di buffer dell'indicatore, come vengono creati questi buffer, se appartengono a un certo indicatore o hanno una numerazione generale. La documentazione dice di scrivere SetIndexBuffer(), ma nell'esempio della media mobile è scritto senza. Ho letto il riferimento e cercato altri articoli, ma non è ancora chiaro. Il preprocessore ha bisogno di specificare i buffer e perché i buffer dovrebbero essere uno in meno rispetto alla direttiva del preprocessore e non lo stesso.

Se si cerca qualche significato metafisico... allora molte cose diventano incomprensibili. Altrimenti, è solo un numero. Appartiene a un indicatore specifico.

Gli Expert Advisors non hanno affatto buffer di indicatori, quindi non può esserci una chiamata a SetIndexBufer().

Non uno di meno, ma esattamente lo stesso. Quando si conta da zero, l'ultimo numero è 1 in meno del numero totale.

 
Grazie.
 

Se non le dispiace, risponda a qualche altra domanda, per favore.

1. Non capisco perché devo assegnare 0 a una variabile dichiarata se poi assegnerò comunque qualcosa in seguito. E inoltre, a volte 0 non viene assegnato, a volte sì.

E dicono che bisogna cancellare gli oggetti nella deinizializzazione (non capisco perché), ma una maniglia dell'indicatore è un oggetto, ma di solito non viene cancellata, perché?

3.MqlTradeRequest request={0}; Cosa significa? Probabilmente, all'intera struttura viene assegnato 0, ma non contiene solo tipi numerici.

4. E perché c'è un'operazione logica qui?

bool  OrderSend(
   MqlTradeRequest&  request,      // структура запроса
   MqlTradeResult&   result        // структура ответа
   );
 
Ivan_Invanov:

Se non le dispiace, risponda a qualche altra domanda, per favore.

1. Non capisco perché devo assegnare 0 a una variabile dichiarata se poi assegnerò comunque qualcosa in seguito. E inoltre, a volte 0 non viene assegnato, a volte sì.

E dicono che bisogna cancellare gli oggetti nella deinizializzazione (non capisco perché), ma una maniglia dell'indicatore è un oggetto, ma di solito non viene cancellata, perché?

3.MqlTradeRequest request={0}; Cosa significa? Probabilmente, l'intera struttura è assegnata a 0, ma non contiene solo tipi numerici.

4. Perché abbiamo bisogno di un'operazione logica qui?

1. Per abitudine.

2. è un altro oggetto. Sarà scaricato da solo, ma può essere accelerato dalla funzione IndicatorRelease().

3. è cancellato e questo è tutto.

4. questa non è un'operazione logica, ma un trasferimento di variabile per riferimento.

 
Dmitry Fedoseev:

1. Per abitudine.

2. questo è un oggetto diverso. Poi si scaricherà da solo, ma può essere accelerato da IndicatorRelease().

3. è cancellato e questo è tutto.

4. questa non è un'operazione logica, ma un trasferimento di variabile per riferimento.

grazie)
 
Sono confuso su una cosa. Quando SYMBOL_TRADE_EXECUTION_MARKET viene eseguito. Posso fare qualcosa per aprire gli ordini a un certo prezzo, come in Esecuzione immediata? Ho bisogno di un ordine pendente? Si prega di scrivere un formato di richiesta di mercato per un ordine in sospeso.