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

 

Questo produce un allarme quando il prezzo raggiunge una linea superiore o inferiore.

Voglio permettere l'esecuzione delle compravendite finché non si avvicinano a queste linee. Quando il prezzo si avvicina troppo non permetto l'apertura delle compravendite.

Come faccio a far sì che la logica avvenga sulla chiusura della barra corrente quando tutto quello che c'è qui sono array?

for(int x=0; x<limit; x++) {

Xdown[x] = 0; Xup[x] = 0;

middle1[x] = iMA(NULL, 0, period, 0, MODE_EMA, PRICE_TYPICAL, x);// drawn line

middle2= iMA(NULL, 0, period, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

avg = findAvg(period, x);

upper[x] = middle2 + (3.5*avg);

lower[x] = middle2 - (3.5*avg);

if (MathAbs(upper[x] - High[x]) < 2*Point)

{

Xdown[x] = upper[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach upper edge");

}

if (MathAbs(lower[x] - Low[x]) < 2*Point)

{

Xup[x] = lower[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach lower edge");

}

}

return(0);

}
 

Vedo che ti stai impegnando molto, ben fatto! A questo punto credo che ciò di cui hai più bisogno è sapere come aiutarti da solo, quindi ti consiglierei di usare la funzione "NAvigator->Search" di MQL _estensivamente_, troverai le risposte a molte delle tue domande (l'unica cosa che si può chiamare da un indicatore sono i buffer, e questo viene fatto attraverso iCustom(); gli oggetti non sono array ecc. e molto molto altro). Per esempio, una ricerca per "array" insegnerà che l'indice dell'array di Current Bar è 0, l'indice dell'array di Last Bar è 1 e così via.

Se le voci della funzione di ricerca sono tutte schiaccianti, probabilmente state cercando di fare cose troppo difficili per voi in questa fase. Credo che la maggior parte degli esempi di cui sopra siano toccati nel corso per principianti di codersguru, quindi ti consiglierei una seconda lettura.

Potresti anche prendere un semplice EA, e provare a semplificarlo/modificarlo leggermente, questo ti insegnerà come funziona. Una volta fatto, puoi provare a complessificarlo.

Scusa se sono fuori strada.

Ora, in generale, per lavorare sul prezzo di chiusura, testate l'apertura di una nuova barra e poi scrivete le vostre condizioni sull'indice 1 dell'array. Un possibile codice per rilevare l'apertura di una nuova barra:

bool NewBar()

{

static datetime dt = 0;

if (Time[0] != dt)

{

dt = Time[0]

return(true);

}

return(false);

}

Spero che questo aiuti, buona fortuna.

 

Sì, siete sulla strada giusta.

Fermerei tutto e rileggerei la programmazione c++.

Purtroppo Object oriented non è così grande per mq4, quindi dovrai compensare con le basi.

Continua così amico, ci arriverai.

 
Aaragorn:
Questo produce un allarme quando il prezzo raggiunge una linea superiore o inferiore.

Voglio permettere l'esecuzione delle compravendite finché non si avvicinano a queste linee. Quando il prezzo si avvicina troppo non permetto l'apertura delle compravendite.

Come faccio a far sì che la logica avvenga sulla chiusura della barra corrente quando tutto quello che c'è qui sono array?

Potete avere questo come esempio. È vicino a quello che vuoi ottenere. Per quanto posso vedere, è lo stesso indicatore che stai usando.

 
pipeline:
Vedo che ti stai impegnando molto, ben fatto! A questo punto credo che ciò di cui hai più bisogno è sapere come aiutarti da solo, quindi ti consiglierei di usare la funzione "NAvigator->Search" di MQL _estensivamente_, troverai le risposte a molte delle tue domande (l'unica cosa che si può chiamare da un indicatore sono i buffer, e questo viene fatto attraverso iCustom(); gli oggetti non sono array ecc. e molto molto altro). Per esempio, una ricerca di "array" vi insegnerà che l'indice dell'array di Current Bar è 0, l'indice dell'array di Last Bar è 1 e così via.

Se le voci della funzione di ricerca sono tutte schiaccianti, probabilmente stai cercando di fare cose troppo difficili per te in questa fase. Credo che la maggior parte degli esempi di cui sopra siano toccati nel corso per principianti di codersguru, quindi ti consiglierei una seconda lettura.

Potresti anche prendere un semplice EA, e provare a semplificarlo/modificarlo leggermente, questo ti insegnerà come funziona. Una volta fatto, puoi provare a complessificarlo.

Scusa se sono fuori strada.

Ora, in generale, per lavorare sul prezzo di chiusura, testate l'apertura di una nuova barra e poi scrivete le vostre condizioni sull'indice 1 dell'array. Un possibile codice per rilevare l'apertura di una nuova barra:

bool NewBar()

{

static datetime dt = 0;

if (Time[0] != dt)

{

dt = Time[0]

return(true);

}

return(false);

}

Spero che questo aiuti, buona fortuna.

Ok, per quanto riguarda la funzione di ricerca... non restituisce nulla. Ho provato ad usarla diverse volte nel metaeditor. Digito quello che voglio e premo return e non succede niente, oppure clicco su quella piccola casella accanto alla stringa di ricerca e non succede niente. Stavo solo notando che è una ricerca zoppa perché non funziona affatto. Mi riferisco alla funzione di ricerca nella finestra di navigazione del metaeditor... c'è qualche protocollo per farla funzionare che non conosco?

 
fx-programmer:
Sì, sei sulla strada giusta.

Fermerei tutto e rileggerei la programmazione in c++.

Purtroppo Object oriented non è così grande per mq4, quindi dovrai compensare con le basi.

Continua così amico, ci arriverai.

Grazie per l'incoraggiamento. Il supporto morale conta. Vedi qual è il mio obiettivo teorico qui? Potresti suggerire un metodo migliore (le basi come le chiami tu) per raggiungere questo obiettivo?

 
pipeline:

Ora, in generale, per lavorare sul prezzo di chiusura, si verifica l'apertura di una nuova barra e poi si scrivono le condizioni sull'indice 1 dell'array. Un possibile codice per rilevare l'apertura di una nuova barra:

bool NewBar()

{

static datetime dt = 0;

if (Time[0] != dt)

{

dt = Time[0];

return(true);

}

return(false);

}

Spero che questo aiuti, buona fortuna.

supponendo che restituisca true allora cosa, come si ottiene il valore dell'indicatore fuori dall'array alla chiusura corrente ora che è stato rilevato che c'è una nuova barra?

 
 
Aaragorn:

Ieri sera stavo cercando su Google e ho trovato questo...

http://www.gordago.com/?act=download

Qualcuno ha qualche esperienza con questo? È vero?

Gordago non gestisce o non è ancora in grado di gestire indicatori personalizzati. Questo è un grande svantaggio.

L'unico modo per imparare a programmare è quello di sgobbare, come stai facendo tu ora... imparando dagli esempi. La roba di Coders' Guru è ottima per imparare.

Buona fortuna,

Maji

 
Oggi sto pensando di mandare al diavolo gli indicatori e vedere se posso creare qualcosa che mi permetta di fare riferimento al massimo e al minimo delle barre precedenti (x).

Più guardo gli indicatori e più questo mi sembra attraente....

Ok, vedo la funzione high() nelle variabili predefinite. come la uso per ottenere il massimo più alto delle ultime 30 ore per esempio?

 

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. Usare 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 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