[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 333

 

Non ho intenzione di discutere! Se lo provate, vedrete cosa c'è di sbagliato. Sto solo scrivendo per coloro che incontreranno questo problema. È invertito nel tempo, quindi il grafico è invertito nel tempo. Sto pubblicando il testo dell'indicatore. PRONTO. Guardate il grafico, con il quale si possono rilevare input molto interessanti. Mi sembra che entri prima e con più precisione di MASD

#proprietà indicator_separate_window
#proprietà indicator_buffers 1
#property indicator_color1 Red

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
ritorno;
}
extern double PeriodPower=13;
extern double MA_Period=5;

int start()
{
int i=Bars-IndicatorCounted()-1;
mentre(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
ArraySetAsSeries(Bears_array,true); // Applicato per la sincronizzazione dell'indicizzazione nella funzione iMAOnArray
ArraySetAsSeries(Bulls_array,true);
Line1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i);
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i);
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
ritorno;
}


 
Stepan241 писал(а) >>

Non ho intenzione di discutere! Se lo provate, vedrete cosa c'è di sbagliato. Sto solo scrivendo per coloro che incontreranno questo problema. È invertito nel tempo, quindi il grafico è invertito nel tempo. Sto pubblicando il testo dell'indicatore. PRONTO. Guardate il grafico, con il quale si possono rilevare input molto interessanti. Mi sembra che entri prima e con più precisione del MASD.

#proprietà indicator_separate_window
#proprietà indicator_buffers 1
#property indicator_color1 Red

double Buf_0[1000],Bears_array[1000],Bulls_array[1000],Line1[1000],Line2[1000];
int init()
{
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
ritorno;
}
extern double PeriodPower=13;
extern double MA_Period=5;

int start()
{
int i=Bars-IndicatorCounted()-1;
mentre(i>=0)
{
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
ArraySetAsSeries(Bears_array,true); // Applicato per la sincronizzazione dell'indicizzazione nella funzione iMAOnArray
ArraySetAsSeries(Bulls_array,true);
Line1[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMMA,i);
Line2[i]=iMAOnArray(Bulls_array,0,MA_Period,0,MODE_SMMA,i);
Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

i--;
}
ritorno;
}

Può essere avvitato, ma può essere fatto in modo normale.

L'indicatore può contenere fino a 8 buffer. Alcuni di essi possono essere utilizzati per i calcoli intermedi.

Tuttavia, se le prestazioni non sono critiche, allora sì, si può fare così.

 
Vinin >> :

Si può giocare o farlo normalmente.

L'indicatore può contenere fino a 8 buffer. Alcuni di essi possono essere utilizzati per i calcoli intermedi.

Anche se, se non è critico per te e per la performance, allora sì, puoi farlo in questo modo.

La nozione di normale è relativa. Così come la nozione di diritto. Questa è più una domanda filosofica. Ho cercato di implementare l'algoritmo in modo OTTIMALE. Per costruire un indicatore in UN ciclo. Secondo me è il minor carico di hardware, mentre si può ottenere lo stesso risultato.

>> E, per quanto riguarda il fatto che ci sono 8 buffer, e in tempo di guerra il loro numero può arrivare a 54 e mezzo, qualsiasi geniere lo sa. :-)

 
Stepan241 писал(а) >>

La normalità è relativa. Così come il concetto di diritto. Questa è più una domanda filosofica. Ho cercato di implementare l'algoritmo in modo OTTIMALE. In modo che l'indicatore sia costruito in UN solo ciclo. Secondo me, carica meno l'hardware quando il risultato è ancora corretto.

Circa 8 buffer, e il loro numero in tempo di guerra può arrivare fino a 54 e mezzo, ogni ingegnere lo sa. :-)

È possibile fare tutto in un ciclo, e usare un numero minimo di buffer, ma questa è un'altra storia.

Qualsiasi operazione con un array (non un buffer) richiede un tempo considerevole. Pertanto, era più facile e più veloce fare diversi loop piuttosto che stipare tutto in uno solo.

Più veloce nel senso di funzionamento dell'indicatore.

 
Vinin >> :

È possibile fare tutto in un ciclo, e usare un numero minimo di buffer, ma questo è tutto un altro discorso.

Qualsiasi operazione con un array (non un buffer) richiede molto tempo. Pertanto, era più facile e più veloce fare diversi loop piuttosto che stipare tutto in uno solo.

Più veloce nel senso della performance dell'indicatore.

Dimmi, Vinin, hai provato a dare un'occhiata alla tua idea e vedere cosa disegna?

 
Vinin >> :

È possibile fare tutto in un ciclo, e usare un numero minimo di buffer, ma questo è un discorso completamente diverso.

Qualsiasi operazione con un array (non un buffer) richiede molto tempo. Pertanto, era più facile e più veloce fare diversi loop piuttosto che stipare tutto in uno solo.

Più veloce nel senso della performance dell'indicatore.

Caro Vinin, hai provato a dare un'occhiata alla tua idea e a capirla?

int start()
{
int i, limit=Bars-IndicatorCounted()-1;
per (i=limite;i>=0;i--){
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
}
per (i=limite;i>=0;i--){
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i);
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i);
}
ritorno;
}

Ho capito che nel primo ciclo si forma un array di tori e orsi. Nel secondo ciclo queste due matrici vengono smussate. Se vi piace così tanto, guardate il risultato e capirete tutto.



 


Guardate attentamente il GRAFICO AGRAFICO

 
Stepan241 писал(а) >>

Stavo parlando di questo tipo di codice indicatore in generale.

File:
test.mq4  2 kb
 
Confronta la velocità della mia versione e della tua
 

Sono d'accordo. Esce bene e tutto è corretto. Avevo solo bisogno di visualizzare il seguente output

Buf_0[i]=(Line2[i]+Line1[i])/Point/10;

Dovrebbe essere fatto in un ciclo separato. Preferisco la tua versione perché preferisco il ciclo FOR. Grazie per il vostro aiuto e la vostra attenzione.