[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 78

 

Ciao, ho iniziato a imparare mquel4. Userò un esempio di un semplice indicatore che calcola i prezzi massimi e minimi delle candele e disegna linee agli estremi delle candele attraverso due buffer sullo schermo:

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

double Buf_0[],Buf_1[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_1); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1);// Стиль линии
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i,// Индекс бара
Counted_bars; // Количество просчитанных баров 
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
i=Bars-Counted_bars-1;
// Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
Buf_0[i]=High[i]; // Значение 0 буфера на i-ом баре
Buf_1[i]=Low[i]; // Значение 1 буфера на i-ом баре

i--; // Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}

Quindi, come fare in modo che la linea del buffer passi attraverso due (tre, ecc.) candelieri invece di ognuno di essi?

 
wolf05632:

Quindi, come faccio a far passare la linea del buffer attraverso due (tre, ecc.) candele invece di ogni candela?

Per prima cosa, imparate come inserire correttamente un messaggio nel codice, usando il pulsante "SRC", in modo che abbia una forma leggibile e appaia proprio come in MetaEditor.


Il secondo passo sarà il vostro tentativo di collegare la variabile Counted_bars all'istruzione if.

Per esempio:

Inseriamo un calcolo dell'indicatore ogni due barre (saltiamo quelle dispari, lasciamo quelle pari):

if (MathMod(Counted_bars, 2) == 0)
{
   // расчёт для буферов индикатора
}
else return(0);

Qui potete leggere la funzione MathMod(). Ma non è necessario usarlo. Potete inserire qualsiasi condizione nell'istruzione if.

Ma non dimenticate che tali modifiche al codice causeranno la perdita di alcuni valori nel buffer. Se ne hai bisogno o no, non lo so. Tutto dipenderà dal vostro compito.

 

Sono un po' confuso. Ho provato a rendere il passo del ciclo uguale a due (penso che avrebbe lo stesso significato), ma non funziona. Non ho bisogno di passare attraverso uno specifico, ma attraverso un numero arbitrario di candele. La mia comprensione è che la struttura dovrebbe essere così:

buffer array[1]= array di candele[1]

buffer array[2]= array di candele[2]

buffer array[3]= array di candele[4]

...

buffer array[5]= array di candele[x] ecc. Ma non funziona.

 
wolf05632:

Non vedo uno schema tra gli indici buffer e gli indici candlestick...

E sarebbe ancora meglio se tu allegassi una foto di ciò che vuoi ottenere.

 

Funziona così

E ne ho bisogno così:

Ma non siate attaccati specificamente alle linee disegnate attraverso una candela, possono essere disegnate attraverso due, o tre, ecc.

 
sergeev:

Credo che avrei dovuto portarlo ai telepati invece che qui.

Ci sta solo prendendo in giro.


Guarda il codice, puoi vedere senza spazi dove il risultato dell'invio dell'ordine, il suo codice di errore e le cifre per lo strumento.
 

Allora devi usare un indicatore a zig-zag (il mio punto di vista):

#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии

double Buf_0[], Buf_1[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
   SetIndexBuffer(0, Buf_0); // Назначение массива буферу
   SetIndexStyle (0, DRAW_SECTION);
   SetIndexBuffer(1, Buf_1); // Назначение массива буферу
   SetIndexStyle (1, DRAW_SECTION);
   return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
   int i,// Индекс бара
   Counted_bars; // Количество просчитанных баров 
   //--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   if (MathMod(Bars, 2) != 0 && Counted_bars == 0)
      return(0);
   i = Bars-Counted_bars-1;
   // Индекс первого непосчитанного
   while(i >= 0) // Цикл по непосчитанным барам
   {
      if (MathMod(i, 2) == 0)
      {
         Buf_0[i] = High[i]; // Значение 0 буфера на i-ом баре
         Buf_1[i] = Low[i]; // Значение 1 буфера на i-ом баре
      }
   
      i--; // Расчёт индекса следующего бара
   }
   //--------------------------------------------------------------------
   return; // Выход из спец. ф-ии start()
}

Penso che tu possa capire i cambiamenti. L'unica cosa su cui mi sbagliavo, è meglio usare il parametro Bars invece di IndicatorCounted() come indice della barra da calcolare.

Il vostro compito ora è quello di portare il divisore in un parametro esterno. Sarà uguale al numero di candele passate.

 
grell:

Basta guardare il codice, si può vedere senza spazi dove il risultato di inviare l'ordine, il suo codice di errore e le cifre per lo strumento.

Esattamente. Ecco perché si parla di telepati.

Prima ci hai dato il codice:

Alert("Ordersend_Number",res,err);

Non ho guardato il codice, ma, purtroppo, non ho trovato l'errore... Non ho esperienza nello scrivere Expert Advisors multivaluta. Conosco solo alcuni principi, tutto qui.

 
È ovvio che -1129 è il codice di errore, dove hai visto il numero di errore 1292?
 
grell:
È chiaro che -1129 è un codice di errore, dove hai visto il numero di errore 1292?

Tutto può succedere...

Hai testato il tuo EA solo su un DC? L'errore 129 impiega molto tempo ad apparire? O l'ordine si apre dopo diverse richieste?

Motivazione: