Aiuto per la codifica - pagina 173

 

Ciao codificatori,

ho creato un indicatore molto semplice che mostra un allarme quando l'ultima barra è sopra la sma10 o sotto di essa. niente di più. ma vorrei controllarlo in 3 diversi time frame. non ho mai lavorato con gli indicatori mtf e quindi ho alcuni problemi con esso. questa versione controlla il grafico m1, m5 e m15. funziona bene ma c'è il problema che l'allarme viene visualizzato su ogni tick e non solo una volta nel timeframe le condizioni sono soddisfatte.

Sarei felice se qualcuno mi aiutasse con questo. Penso che potrebbe essere solo un problema di sintassi...

grazie!

File:
test.mq4  3 kb
 

Ciao,

Devo chiedere di nuovo, perché non riesco a trovare un errore, ma sto ottenendo solo i valori sbagliati :-(

Forse qualcuno vede il mio errore!

Questo è il codice dell'indicatore

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}
 
sunshineh:
Ciao,

Devo chiedere di nuovo, perché non riesco a trovare un errore, ma sto ottenendo solo i valori sbagliati :-(

Forse qualcuno vede il mio fallimento?

Questo è il codice dell'indicatore

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}

sunshineh,

Non è necessario dividere la deviazione per 2 per ottenere il massimo e il minimo - rimuovi la parte "/2" e dovrebbe essere OK a condizione che il prezzo medio sia OK. La larghezza del canale è sempre costante: si dovrebbe usare la razione standard corrente per il con, non qualche altro valore. E l'ultimo, per quanto vedo, ObjectGetValueByShift("std channel", i); non funziona sul canale di deviazione standard come funziona sulle linee di tendenza. Che valore sta restituendo non lo so (vedi l'indicatore allegato e vedrai perché dico che non so cosa sia quel prezzo)

File:
_test_4.mq4  3 kb
 

Ciao mladen,

allego un indicatore di esempio che utilizza simboli interni preimpostati, abbastanza difficile per me da comprendere all'interno, è possibile ottenere alcuni suggerimenti da questo indicatore per adattarlo ai miei indicatori o/e ai tuoi indicatori per evitare problemi di repaint o refresh shift line/tick o fare qualche tipo di sinergia? Grazie per aver guardato.

 
kenwa:
Ciao mladen, allego un indicatore di esempio che utilizza simboli interni preimpostati, abbastanza difficile per me da comprendere all'interno, è possibile ottenere alcuni suggerimenti da questo indicatore per adattarlo ai miei indicatori o/e ai vostri indicatori per evitare problemi di repaint o refresh shift line/tick o fare qualche tipo di sy nergy? Grazie per aver guardato.

kenwa

Non lavoro su roba decompilata. Scusa

 
mladen:
kenwa Non lavoro su roba decompilata. Scusa

ok, allora lo rimuovo, ma è interessante il motivo per cui nessuno lo vede ma si può sapere che è roba decompilata

 
kenwa:
ok, allora lo rimuovo, ma è interessante il motivo per cui nessuno lo vede ma si può sapere che è roba decompilata

Tutti quelli che sanno un po' di codifica sanno che è un codice decompilato

E anche se non sapete nulla di nessuna codifica, quando avete una cosa come questa:

/*

Generato da EX4-TO-MQ4 decompiler FREEWARE V4.0.451.1 [-]

Sito web: Piattaforma di trading MetaTrader 5 / MetaQuotes Software Corp.

E-mail : support@metaquotes.net

*/

scritto nelle prime righe dell'indicatore che hai postato sembra piuttosto ovvio che chiunque potrebbe vedere che è un codice decompilato, quindi, per favore ...

Tutto il meglio

 

mladen, il mio codice non è decompilato. forse vorresti dargli un'occhiata?

 
Marbo:
mladen, il mio codice non è decompilato. forse vorresti dargli un'occhiata?

Marbo

Puoi fare qualcosa come in quello allegato. Ti avviserà una volta per ogni barra di time frame target o quando lo stato (tipo di allarme) cambia. Se vuoi ignorare il tipo, salta il controllo del tipo nella procedura doAlert. Se vuoi saltare il controllo del tempo (nel qual caso solo il tipo verrebbe controllato) allora salta il controllo del tempo nella procedura doAlert

File:
test_4.mq4  3 kb
 

Ciao mladen,

Probabilmente ricorderai che la settimana scorsa ho chiesto aiuto per un MA cross EA e naturalmente ho fatto riferimento impropriamente alla sezione Elite. Dove puoi suggerire che dovrei chiedere questo per favore. Ho cercato e non ho trovato una risposta ovvia. Per rinfrescare la memoria questa era la specifica:

1.SMA EMA incrociata

2. Alla chiusura della candela

3.OCO con nuovo ordine nella nuova direzione

4.Possibilità di regolare lo slippage

5. Segnale acustico di croce

6.Cross non è un vero cross senza un gap di pip impostabile

7. Se possibile, monitoraggio in-candela, in modo che se una candela è più di X volte l'ATR (numero impostabile per il conteggio), un ordine viene inserito con un allarme in direzione di questa candela, e allo stesso modo per chiudere un ordine ma non iniziarne uno nuovo

8. preferibilmente se viene piazzato un ordine come in 7 per suonare un allarme

9. L'affidabilità della croce è fondamentale. Nei miei grafici - FXCM, Vantage, FX Choice - alcuni EAs, incluso Universal Cross non prendono i trade o sono troppo in ritardo

10. SL impostabile ma può essere lasciato fuori se non necessario

11.Trailing Stop

12. SL va a pareggio automaticamente dopo X pips di profitto

13. Numero massimo di operazioni aperte

14. numero magico

Saluti

Jeff