Aiuto per la codifica - pagina 73

 

Salve,

Spero che qualcuno possa aiutarmi a far sì che un indicatore faccia quello che mi piace fare.

Ho un indicatore che mostra la lunghezza del corpo / o la lunghezza totale della candela, più il tempo della barra della candela.

L'unica cosa è che non è adatto ai broker a 5 cifre; il tempo e la lunghezza sono proiettati l'uno sull'altro mentre sono perfetti a 4 cifre.

Sarebbe molto bello che qualcuno sia in grado e disposto a cambiare il codice.

Grazie in anticipo,

Cordiali saluti,

Ben

 

Manca qualcosa di semplice

Ho lavorato su un filtro TL per un MA cross EA, qualsiasi MA cross EA ma lo sto studiando sull'allegato in quanto è un semplice.

Fondamentalmente il calcolatore TL dà segnali 1, 2 o 3 a seconda della direzione TL e dell'incrocio dei prezzi e un brutto "zero divide" se il TL non è abbastanza inclinato.

Sto imparando a codificare e ho letto tutti i PDF di Coders' Guru e quanto di più il mio cervello può prendere dal forum MQL4, ma siccome sono uno studente lento e non ho codificato nulla fino a 3 settimane fa....

Alla ricerca di alcuni suggerimenti....

Problema: Non riesco a capire come richiamare il valore "TLfilter" che è 3 quando il prezzo non ha toccato il TL e il suo OK per fare un acquisto.

Ho tentato di inserirlo nei criteri di acquisto/vendita come &&TTLfilter = 3, e ogni altro metodo che riesco a capire, ma tutto ciò che ottengo è nessun trade.

Ho anche provato a inserirlo nel ciclo OrderSelect ma senza fortuna.

Sto solo cercando delle indicazioni su cosa mi manca.

Se qualcuno è interessato a dare un'occhiata.

Disegna un TL sul grafico prima di allegare l'EA e chiamalo t6

Togliere il commento al //--- Print ("TLfilter = ",TLfilter); return(TLfilter); in fondo alla sezione TL per vedere cosa sta facendo.

Le modifiche a questo EA sono contrassegnate dalla doppia linea ======= 1 2 e 3

Edit: Nessuno dei miei codici in questo, perché volevo essere sicuro che fosse il più pulito possibile x_trader_v2_tlmod.mq4

File:
 

multiindicatore

Ciao!

Qualcuno usa/ha un multiindicatore come questo?

Media mobile multipla - MQL4 Code Base

Se vedi laggiù, sembra un indicatore "freedom bar"... quindi... Voglio cambiare questo indicatore di ingresso, non voglio usare 4ema.... Voglio 1ema (2 crossing), CCI, STOCH e SAR

Ho trovato alcuni multiindicatori, ma non hanno una storia come questa

qualcuno può aiutare e cambiare il codice?

 

Ciao Pearl1,

Da quello che vedo si può fare, devi solo inserire la chiamata sostituendo le altre 3 medie mobili con gli indicatori che vuoi usare insieme alle condizioni da segnalare.

 

Stavo provando qualcosa, ma nessun progresso

 

Perché non pubblichi ciò che hai codificato finora e spieghi cosa stai cercando di fare. In questo modo qualcuno potrebbe aiutarti

pearl1:
Stavo provando qualcosa, ma nessun progresso
 

int start()

{

//----

int Counted.Bars = IndicatorCounted(), i;

if(BarreContate<0) return(-1);

if(barre contate>0) barre contate--;

int Limit = Bars - Counted.Bars;

colore Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4;

//----

for(i=Limite; i>=0; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); Succhio qui.... si confronta sempre con questo MA0.Buffer.0.... quindi, se uso RSI, Stoch,... devo creare questo buffer per tutti gli elementi? RSI0.Buffer.0 per RSI?

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1);

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i);

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1);

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i);

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1);

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i);

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1);

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0;

altrimenti MA1.UP.Buffer = Gap * P1.Position + 1.0;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up;

altrimenti Text.Color.1 = Text.Color.Down;

//----

MA2.UP.Buffer = EMPTY_VALUE;

MA2.DN.Buffer = EMPTY_VALUE;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0;

altrimenti MA2.UP.Buffer = Gap * P2.Position + 1.0;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up;

altrimenti Text.Color.2 = Text.Color.Down;

//----

MA3.UP.Buffer = EMPTY_VALUE;

MA3.DN.Buffer = EMPTY_VALUE;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0;

else MA3.UP.Buffer = Gap * P3.Position + 1.0;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up;

altrimenti Text.Color.3 = Text.Color.Down;

//----

MA4.UP.Buffer = EMPTY_VALUE;

MA4.DN.Buffer = EMPTY_VALUE;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0;

else MA4.UP.Buffer = Gap * P4.Position + 1.0;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up;

altrimenti Text.Color.4 = Text.Color.Down;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4);

//----

}

//----

return(0);

 

Non è necessario creare buffer per tutti gli elementi.

MA1.Buffer.0, MA1.Buffer.1, .... non sono buffer ma semplici variabili. Puoi usarli per qualsiasi cosa senza cambiare i loro nomi. Se volete usarle, per esempio, per l'rsi, potete cambiare il codice in qualcosa come questo :

MA1.Buffer.0 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i); MA1.Buffer.1 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i+1);

senza bisogno di cambiare i nomi delle variabili e funzionerà (basta definire RSI1.Period e RSI1.Price in questo caso come parametri esterni)

pearl1:
int start()

{

//----

int Counted.Bars = IndicatorCounted(), i;

if(Counted.Bars<0) return(-1);

if(barre contate>0) barre contate--;

int Limit = Bars - Counted.Bars;

colore Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4;

//----

for(i=Limite; i>=0; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i); Succhio qui.... si confronta sempre con questo MA0.Buffer.0.... quindi, se uso RSI, Stoch,... devo creare questo buffer per tutti gli elementi? RSI0.Buffer.0 per RSI?

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1);

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i);

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1);

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i);

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1);

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i);

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1);

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0;

altrimenti MA1.UP.Buffer = Gap * P1.Position + 1.0;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up;

altrimenti Text.Color.1 = Text.Color.Down;

//----

MA2.UP.Buffer = EMPTY_VALUE;

MA2.DN.Buffer = EMPTY_VALUE;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0;

altrimenti MA2.UP.Buffer = Gap * P2.Position + 1.0;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up;

altrimenti Text.Color.2 = Text.Color.Down;

//----

MA3.UP.Buffer = EMPTY_VALUE;

MA3.DN.Buffer = EMPTY_VALUE;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0;

else MA3.UP.Buffer = Gap * P3.Position + 1.0;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up;

altrimenti Text.Color.3 = Text.Color.Down;

//----

MA4.UP.Buffer = EMPTY_VALUE;

MA4.DN.Buffer = EMPTY_VALUE;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0;

else MA4.UP.Buffer = Gap * P4.Position + 1.0;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up;

altrimenti Text.Color.4 = Text.Color.Down;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4);

//----

}

//----

ritorno(0);
 
pearl1:
int start()

{

//----

int Counted.Bars = IndicatorCounted(), i;

if(BarreContate<0) return(-1);

if(barre contate>0) barre contate--;

int Limit = Bars - Counted.Bars;

colore Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4;

//----

for(i=Limite; i>=0; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i);

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i);

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1);

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i);

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1);

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i);

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1);

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i);

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1);

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0;

altrimenti MA1.UP.Buffer = Gap * P1.Position + 1.0;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up;

altrimenti Text.Color.1 = Text.Color.Down;

//----

MA2.UP.Buffer = EMPTY_VALUE;

MA2.DN.Buffer = EMPTY_VALUE;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0;

altrimenti MA2.UP.Buffer = Gap * P2.Position + 1.0;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up;

altrimenti Text.Color.2 = Text.Color.Down;

//----

MA3.UP.Buffer = EMPTY_VALUE;

MA3.DN.Buffer = EMPTY_VALUE;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0;

else MA3.UP.Buffer = Gap * P3.Position + 1.0;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up;

altrimenti Text.Color.3 = Text.Color.Down;

//----

MA4.UP.Buffer = EMPTY_VALUE;

MA4.DN.Buffer = EMPTY_VALUE;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0;

else MA4.UP.Buffer = Gap * P4.Position + 1.0;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up;

altrimenti Text.Color.4 = Text.Color.Down;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4);

//----

}

//----

ritorno(0);

aha, grazie, ma questo Buffer confronta .... tutti con MA0.Buffer.0 ?

 

Basta sostituire le chiamate IMA() con le chiamate che vuoi (come la iRSI() dell'esempio che ti ho dato) e dovrebbero funzionare, non c'è bisogno di sostituire i nomi delle variabili

pearl1:
aha, grazie, ma questo Buffer confronta .... tutti con MA0.Buffer.0 ?
Motivazione: