Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1231

 

Sto cercando di fare una semplice iscrizione. Come volevo - se il prezzo di apertura è inferiore al prezzo di chiusura per il numero di punti (sulla barra precedente), allora compra all'inizio di una nuova barra, tenendo conto di take profit e stop loss. Ma qualcosa sembra funzionare in un modo diverso da quello che volevo. Aiutami a capire


   MqlRates rt[1];

   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

      if(rt[1].open - rt[1].close >= padenie) 
	 {
         signal=ORDER_TYPE_BUY;
         printf(rt[1].open+"____"+rt[1].close);
         }
         
      if(signal !=WRONG_VALUE && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,1,SYMBOL_ASK,SymbolInfoDouble(_Symbol,SYMBOL_BID)-sl,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+tp);
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
BorisD:

Sto cercando di fare una semplice iscrizione. Come volevo - se il prezzo di apertura è inferiore al prezzo di chiusura per il numero di punti (sulla barra precedente), allora compra all'inizio di una nuova barra, tenendo conto di take profit e stop loss. Ma qualcosa sembra funzionare in un modo diverso da quello che volevo. Per favore, aiutatemi a capire


Errore 1: state copiando UN elemento, quindi l'indice dell'elemento sarà [0].

Apertura 100, Chiusura 105 - bull bar. Aperto - Chiuso = 100 - 105 = - 5. '-5' sarà sempre inferiore al valore impostato, poiché il risultato è un numero negativo.

Apertura 110, chiusura 103 - barra ribassista. Aperto - Chiuso = 110 - 103 = 7. '7' è un numero positivo e questo funzionerà già correttamente.


Per riassumere: correggere il riferimento all'indice (invece di [1] dovremmo riferirci all'indice [0]. Prima di calcolare, considera il tipo di candela: se è rialzista o ribassista.

 

Una continuazione della questione delle costruzioni DRAW_HISTOGRAM2.

Esempio:

// Индикатор Проба DRAW_HISTOGRAM2.mq5
//+------------------------------------------------------------------+
#property indicator_chart_window                   
#property indicator_buffers   20                    
#property indicator_plots     20                  

#property indicator_color1    clrOrange                
#property indicator_color2    clrOrange               
#property indicator_color3    clrLimeGreen        
#property indicator_color4    clrLimeGreen        

#property indicator_type5     DRAW_HISTOGRAM2
#property indicator_color5    clrOrange               
#property indicator_type6     DRAW_HISTOGRAM2
#property indicator_color6    clrLimeGreen        

//#property indicator_color9    clrRed                

double
   Line_High_Up[], Line_High_Dn[], Hist_High_Up[], Hist_High_Dn[],
   Line_Low_Up[],  Line_Low_Dn[],  Hist_Low_Up[],  Hist_Low_Dn[],  Line_Red[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit() 
   { 
   SetIndexBuffer     (0, Line_High_Up,      INDICATOR_DATA); 
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,    DRAW_LINE);      
   SetIndexBuffer     (1, Line_High_Dn,      INDICATOR_DATA); 
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE,    DRAW_LINE);      

   SetIndexBuffer     (2, Line_Low_Up,       INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE,    DRAW_LINE);     
   SetIndexBuffer     (3, Line_Low_Dn,       INDICATOR_DATA);
   PlotIndexSetInteger(3, PLOT_DRAW_TYPE,    DRAW_LINE);     

   SetIndexBuffer     (4, Hist_High_Up,      INDICATOR_DATA); 
   SetIndexBuffer     (5, Hist_High_Dn,      INDICATOR_DATA);

   SetIndexBuffer     (6, Hist_Low_Up,       INDICATOR_DATA);
   SetIndexBuffer     (7, Hist_Low_Dn,       INDICATOR_DATA);

   //SetIndexBuffer     (8, Line_Red,          INDICATOR_DATA);
   //PlotIndexSetInteger(8, PLOT_DRAW_TYPE,    DRAW_LINE);     
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(  const int         rates_total,      
                  const int         prev_calculated,  
                  const datetime   &time[],                   
                  const double     &open[],                     
                  const double     &high[],                     
                  const double     &low[],                      
                  const double     &close[],                    
                  const long       &tick_volume[],                
                  const long       &volume[],                     
                  const int        &spread[]   )                   
   {  
   int i;
   for(i=prev_calculated; i<=rates_total-1; i++)      
      {
      Line_High_Up[i] = high[i] + 50*_Point;
      Line_High_Dn[i] = high[i] + 30*_Point;
      Line_Low_Up[i]  = low[i]  - 30*_Point;
      Line_Low_Dn[i]  = low[i]  - 50*_Point;

      Hist_High_Up[i] = Line_High_Up[i];
      Hist_High_Dn[i] = Line_High_Dn[i];
      Hist_Low_Up[i]  = Line_Low_Up[i];
      Hist_Low_Dn[i]  = Line_Low_Dn[i];
      
      //Line_Red[i]     = low[i]  - 70*_Point;
      }
   return(i-1);
   }           
//+------------------------------------------------------------------+

Nell'indicatore presentato è stato possibile costruire entrambi gli istogrammi. Una particolarità inaspettata era la seguente:

Per le linee normali nelle voci #property indicator_colorn, #property indicator_typen ecc. il valore di n è 1 più dell'indice del buffer.
Inoltre, questo requisito rimane anche se gli indici del buffer non sono specificati in una riga, e c'è spazio libero tra quelli adiacenti.
Per esempio, se si usano gli indici 0, 1, 2, 3, 8, saranno visualizzate tutte e cinque le linee.

Un requisito diverso è per le costruzioni di tipo DRAW_HISTOGRAM2, cioè
Se gli istogrammi sono specificati in una riga, le voci #property indicator_colorn, #property indicator_typen etc.
n valore è calcolato da un conteggio e non da un indice del buffer. Nell'esempio, gli indici 5 e 6 sono specificati, anche se logicamente 5 e 7 sono attesi.

Tutte queste assurdità rendono impossibile capire quale dovrebbe essere il valore di n per la linea regolare (rossa) che segue i due istogrammi.
Questo esempio specifica un valore di n=9, ma non funziona, quindi tutte le linee relative al buffer 8 sono commentate. Non ha funzionato neanche per altri valori di n.

Conclusione: tutti gli istogrammi devono essere specificati in una riga alla fine della lista del buffer. Inoltre, i loro valori dovrebbero essere calcolati solo in una riga per conteggio quantitativo (nonostante i loro indici di buffer).
È impossibile capirlo, ma è possibile conviverci.

A proposito: non è stato rilevato alcun effetto dell'ordine dei buffer INDICATOR_CALCULATIONS e INDICATOR_DATA.

Grazie a Vladimir Karputov e Artem Trishkin per la loro partecipazione alla soluzione del problema.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Una continuazione della questione delle costruzioni DRAW_HISTOGRAM2.

Esempio:

Nell'indicatore presentato è stato possibile costruire entrambi gli istogrammi. Una particolarità inaspettata era la seguente:

Per le linee normali nelle voci #property indicator_colorn, #property indicator_typen ecc. il valore di n è 1 più dell'indice del buffer.
Inoltre, questo requisito è mantenuto anche se gli indici del buffer non sono specificati in una riga, e c'è spazio libero tra quelli adiacenti.
Per esempio, se si usano gli indici 0, 1, 2, 3, 8, saranno visualizzate tutte e cinque le linee.

Un requisito diverso è per le costruzioni di tipo DRAW_HISTOGRAM2, cioè
Se gli istogrammi sono specificati in una riga, le voci #property indicator_colorn, #property indicator_typen etc.
n valore è calcolato da un conteggio e non da un indice del buffer. Nell'esempio, gli indici 5 e 6 sono specificati, anche se logicamente 5 e 7 sono attesi.

Tutte queste assurdità rendono impossibile capire quale dovrebbe essere l'indice della linea regolare (rossa) che segue i due istogrammi.
In questo esempio viene specificato il valore n=9, ma non funziona, quindi tutte le linee relative al buffer 8 vengono commentate. Non ha funzionato neanche per altri valori di n.

Conclusione: tutti gli istogrammi devono essere specificati in una riga alla fine della lista del buffer. Inoltre, i loro valori dovrebbero essere calcolati solo in una riga per conteggio quantitativo (nonostante i loro indici buffer).
È impossibile capirlo, ma è possibile conviverci.

A proposito: non è stato rilevato alcun effetto dell'ordine dei buffer INDICATOR_CALCULATIONS e INDICATOR_DATA.

Grazie a Vladimir Karputov e Artem Trishkin per la loro partecipazione alla soluzione del problema.

Siete i benvenuti. Ma non avete risolto il problema.

Non c'è dipendenza dall'ordine dei diversi tipi di buffer negli indicatori. Solo quelli calcolati dovrebbero essere dopo quelli disegnati.

 
Artyom Trishkin:

Non c'è di che. Ma non avete risolto il problema.

Gli indicatori non dipendono dall'ordine dei diversi tipi di buffer. Solo quelli calcolati devono essere dopo quelli disegnati.

Senza molte certezze, ma continuo a credere che entrambe queste affermazioni siano sbagliate.

Per quanto riguarda "nessuna dipendenza". Non ho avuto modo di mappare l'8° buffer nell'ultimo esempio. Quale dovrebbe essere l'ordine... Forse puoi farlo tu?

A proposito di "calcolato ... dopo il sorteggio". Il mio indicatore usa più di 200 buffer, i primi 100 dei quali sono buffer calcolati.
Nel mio caso, sono tutte linee semplici, quindi n per #proprietà è calcolato dal valore dell'indice del buffer: n=b+1. E vengono visualizzate delle linee semplici. La confusione inizia con l'apparizione degli istogrammi.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Senza molte certezze, ma continuo a credere che entrambe queste affermazioni siano sbagliate.

Per quanto riguarda "nessuna dipendenza". Non ho avuto modo di mappare l'8° buffer nell'ultimo esempio. Quale dovrebbe essere l'ordine... Forse puoi farlo tu?

A proposito di "calcolato ... dopo il sorteggio". Il mio indicatore usa più di 200 buffer, i primi 100 dei quali sono buffer calcolati.
Nel mio caso, sono tutte linee semplici, quindi n per #proprietà è calcolato dal valore dell'indice del buffer: n=b+1. E vengono visualizzate delle linee semplici. I malintesi iniziano con l'aspetto degli istogrammi.

Non voglio discutere. Creo i buffer per essere disegnati in qualsiasi sequenza. Ma non appena aggiungo un buffer di calcolo tra di loro, il tracciato grafico degli indicatori da disegnare non viene mostrato sul grafico. I loro valori rimangono nella finestra dei dati. Ho condotto molti test per descrivere la creazione di indicatori e dei loro buffer negli articoli. Sono giunto alla conclusione che solo i buffer calcolati (la loro posizione nell'ordine di dichiarazione dei buffer degli indicatori) influenzano in qualche modo la visualizzazione/non visualizzazione di quelli disegnati.

 
Artyom Trishkin:

Non ho intenzione di discutere. Creo buffer di disegno in qualsiasi sequenza. Ma appena aggiungo un buffer di calcolo tra di loro, le costruzioni grafiche degli indicatori da disegnare non vengono visualizzate sul grafico. I loro valori rimangono nella finestra dei dati. Ho condotto molti test per descrivere la creazione di indicatori e dei loro buffer negli articoli. Sono giunto alla conclusione che solo i buffer calcolati (la loro posizione nell'ordine di dichiarazione dei buffer degli indicatori) influenzano in qualche modo la visualizzazione/non visualizzazione di quelli disegnati.

Non ne sono sicuro nemmeno io.

Da un po' di tempo a questa parte (ultimi 3-4 mesi) ci sono stati dei fenomeni incomprensibili e allarmanti nella finestra dei simboli in generale.

Prima di tutto, ho notato che il disegno dell'indicatore può semplicemente spostarsi in qualsiasi direzione, per esempio verso il basso o verso destra, senza alcuna ragione apparente. Proprio ad un nuovo tick l'intero indicatore scivola improvvisamente verso il basso. Lo stesso accade a volte quando il PC viene acceso per la prima volta.

In secondo luogo, se alcuni buffer vengono cancellati e poi compilati, le "tracce" di questi costrutti cancellati rimangono fino a qualche evento inspiegabile (TF avanti e indietro, nuova ricompilazione, aggiornamento delle impostazioni, ecc.) ) Probabilmente, ci sono "tracce" nella finestra dei dati, che sono memoria di giorni passati (tecnicamente gli array sono puliti solo forzatamente, e in MT 5 se l'array non è necessario, è semplicemente "unregistered", ma i dati rimangono; naturalmente, tutto questo è glitch di MT5)
--

C'è una battuta: la storia della nostra patria non è prevedibile. Lo stesso si può dire di MT5: troppo misterioso:)
--

A proposito, ho fatto alcuni cambiamenti nel mio indicatore reale, secondo la mia ultima dichiarazione. Non funziona. Ho aggiunto DRAW_HISTOGRAM2 e INDICATOR_CALCULATIONS per gli array di riflessione - funziona.

Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
User_mt5:


Non c'è bisogno di essere dilettanti - create l'Expert Advisor vuoto usando MQL5 Wizard - in questo modo farete meno errori possibili quando dichiarate le costruzioni grafiche e gli array di indicatori.

 
User_mt5:

Non ne sono sicuro nemmeno io.

Da qualche tempo (ultimi 3-4 mesi) stanno accadendo dei fenomeni incomprensibili e allarmanti nella finestra dei simboli in generale.

In primo luogo, ho notato che la costruzione dell'indicatore può semplicemente spostarsi in qualsiasi direzione, ad esempio verso il basso o verso destra, senza alcuna ragione apparente. Proprio ad un nuovo tick l'intero indicatore scivola improvvisamente verso il basso. Lo stesso accade a volte quando il PC viene acceso per la prima volta.

In secondo luogo, se alcuni buffer vengono cancellati e poi compilati, le "tracce" di questi costrutti cancellati rimangono fino a qualche evento inspiegabile (TF avanti e indietro, nuova ricompilazione, aggiornamento delle impostazioni, ecc.) ) Probabilmente, ci sono "tracce" nella finestra dei dati, che sono memoria di giorni passati (tecnicamente gli array sono puliti solo forzatamente, e in MT 5 se l'array non è necessario, è semplicemente "non registrato", ma i dati rimangono; naturalmente, tutto questo è glitch di MT5)
--

C'è una battuta: la storia della nostra patria non è prevedibile. Lo stesso si può dire di MT5: troppo misterioso:)
--

A proposito, ho fatto alcuni cambiamenti nel mio indicatore reale, secondo la mia ultima dichiarazione. Non funziona. Ho aggiunto DRAW_HISTOGRAM2 e INDICATOR_CALCULATIONS per gli array di riflessione - funziona.

Non su di me.

Il resto - i vostri bug e le vostre disattenzioni (tranne lo spostamento della linea dell'indicatore, ma credo che sia stato risolto, se la memoria non mi inganna).

Che tipo di costruzione hai?

 
Vladimir Karputov:

Non c'è bisogno di essere dilettanti - create un Expert Advisor vuoto usando MQL5 Wizard - in questo modo farete meno errori possibili nel dichiarare le costruzioni grafiche e gli array di indicatori.

Potete dirmi come riflettere correttamente l'8° buffer nel mio ultimo esempio? Senza alcun dilettantismo?
Puoi dirmi le regole?

Artyom Trishkin:

Non su di me.

Il resto sono i vostri errori e disattenzioni (tranne lo spostamento di linea dell'indicatore, ma credo che sia stato corretto, se la memoria non mi inganna).

Qual è la tua costruzione?

Potete dirmi come riflettere correttamente l'8° buffer nel mio ultimo esempio? Con tutte le precauzioni del caso?
E dare delle ragioni?
Costruire 2530.

--
Sto ancora imparando, quindi vi sarei estremamente grato se poteste indicarmi dove leggere tutto questo nella documentazione.

Motivazione: