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

 
STARIJ:
Prova a scrivere data, ora, offerta e risultati dei tuoi calcoli nel file per ogni spunta. Poi lo carichi su Excel e lo controlli. Non ha senso riconciliare ogni dozzina di linee del programma!

Ma guardate, avete il ritorno in ogni ramo dell'operatore condizionale, cioè viene sempre eseguito. Quindi lo togliamo dall'operatore condizionale:

Bid[1] - è così?


Grazie. Lo proverò ora. Ho capito il succo del tuo codice ed è già un grande risultato per me :) Ho anche visto i miei difetti.

Cos'è il pulsante SRC?

 
STARIJ:
Prova a scrivere data, ora, offerta e risultati dei tuoi calcoli nel file per ogni spunta. Poi lo carichi su Excel e lo controlli. Non ha senso riconciliare ogni dozzina di linee del programma!

Ma guardate, avete il ritorno in ogni ramo dell'operatore condizionale, cioè viene sempre eseguito. Quindi lo portiamo fuori dall'ambito dell'operatore condizionale:

Bid[1] - è così?


Ho inserito il codice nel "costruttore" dell'indicatore personalizzato. L'ho compilato. Il compilatore ha generato 1 avviso: sono definiti due OnCalculate. Verrà utilizzata la versione OHLC (non capisco cosa significhi).

Ho ottenuto il prodotto compilato. Attaccalo al grafico. La finestra separata per il grafico è aperta ma non mostra alcuna informazione sull'istogramma, nonostante i tick.

Cosa c'è che non va? Per favore, consigli?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

Ho inserito il codice nel "costruttore" dell'indicatore personalizzato. Compilato. Il compilatore mi ha dato 1 avvertimento: sono definiti due OnCalculate. Verrà utilizzata la versione OHLC (non so cosa significhi).

Ho ottenuto il prodotto compilato. Attaccalo al grafico. La finestra separata per il grafico è aperta ma non mostra alcuna informazione sull'istogramma, nonostante i tick.

Cosa c'è che non va? Puoi consigliare?

Quando incolli il codice qui, usa il pulsante dell'editor di messaggi SRC - in cima al campo del messaggio ci sono molte cose utili nel pannello di formattazione del messaggio.

Non è difficile alzare gli occhi appena sopra il testo che stai scrivendo, vero? Ed è molto più piacevole per le persone guardare il codice normale invece che la swag, vero?

Ho inserito correttamente il tuo codice nel tuo post (SRC)

 
Artyom Trishkin:

Quando incolli il codice qui, usa il pulsante SRC post editor - ci sono un sacco di funzioni utili nel pannello di formattazione del post nella parte superiore della casella del post.

Non è difficile alzare gli occhi appena sopra il testo che stai scrivendo, vero? Ed è molto più piacevole per la gente guardare il codice normale invece che lo swag, vero?

Ho messo il tuo codice nel messaggio per te correttamente (SRC)


Sì. Grazie. Non lo sapevo.

 
YarTrade:

Emesso 1 avviso al compilatore: sono definiti due OnCalculate. Verrà utilizzata la versione OHLC (non sono sicuro di cosa significhi).

Ho ottenuto il prodotto compilato. Attaccalo al grafico. La finestra separata per il grafico è aperta ma non mostra alcuna informazione sull'istogramma, nonostante i tick.

Cosa c'è che non va? Per favore, consigli?

La funzione si chiamava prima Start, ora si chiama OnTick in Expert Advisor e OnCalculate in indicatore. Il compilatore avverte: hai la stessa funzione due volte con nomi diversi. Spostate il contenuto di Start in OnCalculate e cancellate Start. Avreste anche bisogno di descrivere nel vostro programma, cosa e come dovrebbe essere visualizzato. Prima decidi da solo - quale immagine deve esserci? È meglio iniziare a studiare il linguaggio MQL scrivendo degli script. Un Expert Advisor è più complicato, un indicatore è ancora più complicato

 
STARIJ:

La funzione si chiamava Start, ora si chiama OnTick nell'EA e OnCalculate nell'indicatore. Il compilatore avverte: hai la stessa funzione due volte con nomi diversi. Spostate il contenuto di Start in OnCalculate e cancellate Start. Avreste anche bisogno di descrivere nel vostro programma, cosa e come dovrebbe essere visualizzato. Prima decidi da solo - quale immagine deve esserci? È meglio iniziare a studiare il linguaggio MQL scrivendo degli script. L'Expert Advisor è più difficile, l'indicatore è ancora più difficile.


Non posso inserire il contenuto di Start in OnCalculate e ottengo molti errori

 
YarTrade: Non posso inserire il contenuto di Start in OnCalculate, genera molti errori


L'indicatore mostra solo le informazioni dall'inizio. La finestra Dati (Ctrl-D) mostra i dati della candela su cui punta il cursore

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

e come formulare la situazione creata con i nomi delle funzioni?
 
STARIJ:
E come formulare la situazione creata con i nomi delle funzioni?

start - nome obsoleto. OnTick() è il nome effettivo della funzione di gestione dei tick.

Comunque, non fa differenza come lo definisci, solo la parola "trendy" mi ha fatto sorridere.

 
Alexey Kozitsyn:

start - nome obsoleto. OnTick() è il nome effettivo della funzione di gestione dei tick.

Comunque, non importa come lo definisci, è solo la parola "trendy" che ti fa sorridere.

Obsolete non è più usato. Ma l'inizio vive e continuerà a vivere.
Motivazione: