Come faccio a far filtrare l'indicatore al posto dell'avviso? - pagina 2

 
Aaragorn:
Posso farlo? Basta scrivere i bufferindex nell'indicatore e usare le parole superiore e inferiore in questo modo e fargli restituire i valori delle righe superiori e inferiori?

Non nell'indicatore. Nell'EA. (Si può fare con un indicatore, ma non usare lo stesso indicatore all'interno del proprio codice!!!!!)

 
elihayun:
Non nell'indicatore. Nell'EA. (Si può fare con un indicatore, ma non usare lo stesso indicatore all'interno del proprio codice!!!!!)

Quindi posso scrivere un indice del buffer nell'EA, ma come fa a prendere il valore dall'indicatore? Non intendevo dire che usare l'indicatore all'interno del proprio codice sarebbe un po' stupido. perdonate la mia mancanza di comunicazione. non è facile comunicare a volte in modo abbastanza specifico qual è il problema. Questo è il problema sia nel codificare che nel parlare di codificazione agli altri.

 

permettetemi di scusarmi con coloro che stanno cercando di aiutarmi ma trovano che i miei post sono un sovraccarico di informazioni. Ho postato molto codice fondamentalmente perché posso mettere due finestre aperte l'una accanto all'altra, una finestra è questo thread e l'altra è il metaeditor e guardare una parte del codice in una finestra e un'altra parte nell'altra finestra e lo faccio per aiutarmi a pensare al problema che sto guardando. Sono abbastanza visivo in questo modo e mi aiuta a pensare a ciò che sto facendo e voglio fare. Non intendo sopraffare nessuno con molto codice che debba guardarlo tutto. A volte ho cercato di individuare dei frammenti dopo aver postato l'intero EA o l'intero indicatore per cercare di concentrarmi su DOVE e COSA deve essere fatto. Apprezzo tutti coloro che si prendono il tempo per guardare quello che sto facendo e offrire un contributo costruttivo. Se il volume di ciò che ho postato è troppo, basta filtrare per cercare ciò che sto cercando di fare e non impantanarsi nel resto che è solo lì come un contesto a ciò che sto facendo.

 
Aaragorn:
Quindi posso scrivere un indice del buffer nell'EA ma come ottiene il valore dall'indicatore? Non intendevo dire che usare l'indicatore all'interno del proprio codice sarebbe un po' stupido. perdona la mia mancanza di comunicazione. non è facile comunicare a volte in modo abbastanza specifico qual è il problema. Questo è il problema sia nel codificare che nel parlare di codificazione agli altri.

Non preoccupatevi del COME. Lasciate che Metatrader lo faccia per voi e usate il codice per ottenere le informazioni che vi piacciono.

Suggerimento: quando eseguirai l'EA vedrai: "Trend Bands loaded succesfully", questo significa che fa quello che vuoi

 
elihayun:
Non preoccuparti del COME. Lascia che Metatrader lo faccia per te e usa il codice per ottenere le informazioni che vuoi. Suggerimento: quando lanci l'EA vedrai: "Trend Bands loaded succesfully", questo significa che fa quello che vuoi

Mi piace il suono di usare il codice per ottenere le informazioni che mi piacciono, questo è quello che sto cercando di imparare. Come usare il codice per ottenere le informazioni che mi piacciono.

Quindi pensi che il modo migliore per ottenere il valore del tick per le bande di tendenza sia quello di usare il iCustome()? e NON scrivere il codice all'interno dell'EA come ho già fatto io?

Per scopi didattici...visto che ho il codice già scritto nell'EA c'è un modo per ottenere i valori da lì?

 
elihayun:
Scrivere un indicatore è una cosa e scrivere un EA è un'altra cosa. Non mischiarli. Negli indicatori devi avere a che fare anche con la storia per disegnarla correttamente. Quando scrivi un EA hai solo il tick corrente e devi calcolare i valori ogni tick (se non vuoi perdere un trade). Quindi, per ottenere i valori del bordo superiore e inferiore del tick corrente puoi fare 2 cose
  1. Utilizzare l'indicatore originale come un indicatore personalizzato
  2. scrivere la logica dell'indicatore all'interno del tuo EA

La prima opzione non è difficile. Devi scoprire prima qual è l'indice del buffer che usi per la linea superiore e quella inferiore.

per trovarlo devi guardare nel codice dell'indicatore

Aspetta un attimo, ci sono i buffer! Come ho fatto a non vederli?

//+------------------------------------------------------------------+

//| Trend Bands.mq4 |

//| Dwt5 and adoleh2000 |

//| Copyright © 2005, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 5

#property indicator_color1 Red

#property indicator_color2 Black

#property indicator_color3 Blue

#property indicator_color4 Red

#property indicator_color5 Blue

double upper[], middle1[], middle2, lower[];

double Xup[], Xdown[];

extern int period = 34;

int init()

{

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexShift(0,0);

SetIndexDrawBegin(0,0);

SetIndexBuffer(0,upper);

SetIndexStyle(1,DRAW_LINE,EMPTY,2);

SetIndexShift(1,0);

SetIndexDrawBegin(1,0);

SetIndexBuffer(1,middle1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexShift(2,0);

SetIndexDrawBegin(2,0);

SetIndexBuffer(2,lower);

SetIndexStyle(3,DRAW_ARROW,EMPTY,2);

SetIndexArrow(3, 162);

SetIndexShift(3,0);

SetIndexDrawBegin(3,0);

SetIndexBuffer(3,Xdown);

SetIndexStyle(4,DRAW_ARROW,EMPTY,2);

SetIndexArrow(4, 162);

SetIndexShift(4,0);

SetIndexDrawBegin(4,0);

SetIndexBuffer(4,Xup);

//---- indicators

//----

return(0);

}

so....Vedo 5 buffer...uno superiore, uno centrale, uno inferiore e uno superiore e uno inferiore...

Suppongo che l'informazione che voglio sia quella del buffer superiore e inferiore...

 
 
Aaragorn:
Volevo dire che questo è un nuovo post non una modifica di uno precedente, il funzionamento del sito a volte mi confonde ancora...

Penso che il modo migliore per farlo sia NON usare l'indicatore. È solo il modo più semplice. Per iniziare è abbastanza buono.

State guardando le modifiche che ho fatto all'indicatore. Se vuoi usare questo, assicurati di scrivere il nome corretto nel tuo codice.

Finché sai in quale buffer si trova l'informazione che vuoi, non importa quanti indicatori ci sono nel codice

 
elihayun:
Scrivere un indicatore è una cosa e scrivere un EA è un'altra cosa. Non mischiateli. Negli indicatori devi avere a che fare anche con la storia per disegnarla correttamente. Quando scrivi un EA hai solo il tick corrente e devi calcolare i valori ogni tick (se non vuoi perdere un trade). Quindi, per ottenere i valori del bordo superiore e inferiore del tick CORRENTE puoi fare 2 cose
  1. Utilizzare l'indicatore originale come un indicatore personalizzato
  2. scrivere la logica dell'indicatore all'interno del tuo EA

La prima opzione non è difficile. Devi scoprire prima qual è l'indice del buffer che usi per la linea superiore e quella inferiore.

Per trovarlo devi guardare nel codice dell'indicatore

SetIndexBuffer(0,superiore);

SetIndexBuffer(1,medio1);

SetIndexBuffer(2,inferiore);

come potete vedere la linea superiore è l'indice 0, il medio è l'indice 1 e l'inferiore è l'indice 2.

Ora che abbiamo queste informazioni dobbiamo sapere quanti parametri ha l'indicatore. Per ottenere questa informazione bisogna cercare le linee che iniziano con la parola external

Ho trovato solo 1 linea

extern int period = 34;

Ora, possiamo usare l'indicatore come se fosse un cliente

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);

34 è il parametro dell'indicatore

0 è l'indice del buffer (2 per il basso)

l'ultimo 0 è lo spostamento della barra (in EA abbiamo bisogno della corrente, quindi usiamo 0)

ora che hai i valori superiori e inferiori puoi controllarli rispetto al prezzo

Spero che ti faccia progredire

Eli

hey così questo funzionerà per tirare il valore corrente delle linee superiore e inferiore nell'EA.

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);

Credo di cominciare a capire questo grazie al tutoraggio...

quindi non devo scrivere il codice dell'indicatore all'interno dell'EA basta chiamarlo così dall'EA.... e mi restituirà i valori attuali delle barre delle linee che posso poi utilizzare... perfetto! ....see sapevo che QUALCUNO sapeva come fare questo! (solo che non ero io) ...

Quindi, se voglio essere in grado di cambiare il numero di periodi che uso per l'indicatore, dovrei fare così...

extern double back = 300 //--che potrei cambiare a piacere

double upLevel = iCustome(NULL,0, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", back, 2, 0);

supponendo che io voglia richiamare il valore dell'indicatore da un periodo di tempo più lungo del periodo di tempo che sto usando sul grafico... potrei fare questo?

extern double back = 300 //--che potrei cambiare a piacere

extern double TF = 30 //-Che potrei cambiare a piacere

double upLevel = iCustome(NULL,TF, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,TF, "Trend Bands", back, 2, 0);

dove NULL usa il simbolo corrente,

TF usa il periodo della barra del grafico che ho specificato

Bande di tendenza chiama l'indicatore

back è il numero di barre definito dall'utente da utilizzare per la media dell'indicatore

0 o 2 gli dice a quale buffer accedere

e l'ultimo 0 gli dice di usare la barra corrente

potrebbe funzionare?

 
Aaragorn:
funzionerebbe?

Grande!!! Hai avuto l'idea!!!!

Funzionerà perfettamente. e se vuoi controllare che 5M e 15M raggiungano il bordo allo stesso tempo, puoi prendere i valori da ogni TF e testarli insieme.

Ma lascia questo per quest'ultimo....