Come codificare? - pagina 269

 

Variabile Dema impostata in modo errato

Non riesco a impostare correttamente la sezione delle variabili DEMA, le sue sintassi. I codici DEMA1, DEMA2, DEMA3 sono corretti.

Per favore aiutatemi a correggere la sezione delle variabili DEMA.

se (TradeOrAlert) {

se (DEMA1)>(DEMA2) {CLOSESHORT(Symbol()) ;}

if (DEMA1)<(DEMA2) {CLOSELONG(Symbol()) ;}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {BUY(Symbol(), B_Symbol_LS_0, B_Symbol_TP_0, B_Symbol_SL_0, B_Symbol_TS_0, "if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))";}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {SELL(Symbol(), S_Symbol_LS_0, S_Symbol_TP_0, S_Symbol_SL_0, S_Symbol_TS_0, "if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))";}

CheckTrailingStop(Symbol(), 0, MagicNumberLong, B_Symbol_TS_0);

CheckTrailingStop(Symbol(), 1, MagicNumberShort, S_Symbol_TS_0);

} else {

if (DEMA1)>(DEMA2) {MyAlert("if (DEMA1)>(DEMA2)", "CLOSESHORT(Symbol(),0.1,100,15,17)", Symbol());}

se (DEMA1)<(DEMA2) {MyAlert("if (DEMA1)<(DEMA2)", "CLOSELONG(Symbol(),0.1,100,15,17)", Symbol());}

se ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {MyAlert("if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))", "BUY(Symbol(),0.1,100,15,17)", Symbol();}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {MyAlert("if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))", "SELL(Symbol(),0.1,100,15,17)", Symbol();}

}

g_bars_276 = Bars;

return (0);

}

//----DEMA VARIABILI----Non è impostato correttamente, serve aiuto-----

int init() {

double DEMA1 = (iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,4,0,MODE_EMA,iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0),0));

return(DEMA1);

}

int start() {

double DEMA2 = (iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,6,0,MODE_EMA,iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0),0));

return(DEMA2);

}

int start() {

double DEMA3 = (iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,12,0,MODE_EMA,iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0),0));

return(DEMA3);

}

//

 

Variabile Dema impostata in modo errato

Sto affrontando il problema di impostare correttamente le sintassi nella sezione "DEMA VARIABLES" del codice sottostante.

Inoltre dite cosa includere dopo la sezione "#include " per quanto riguarda le variabili Dema.

Ottengo gli errori

'DEMA1' - variabile non definita.

DEMA2' - variabile non definita.

DEMA3' - variabile non definita.

Per favore aiutatemi.

se (TradeOrAlert) {

se (DEMA1)>(DEMA2) {CLOSESHORT(Symbol()) ;}

if (DEMA1)<(DEMA2) {CLOSELONG(Symbol()) ;}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {BUY(Symbol(), B_Symbol_LS_0, B_Symbol_TP_0, B_Symbol_SL_0, B_Symbol_TS_0, "if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))";}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {SELL(Symbol(), S_Symbol_LS_0, S_Symbol_TP_0, S_Symbol_SL_0, S_Symbol_TS_0, "if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))";}

CheckTrailingStop(Symbol(), 0, MagicNumberLong, B_Symbol_TS_0);

CheckTrailingStop(Symbol(), 1, MagicNumberShort, S_Symbol_TS_0);

} else {

if (DEMA1)>(DEMA2) {MyAlert("if (DEMA1)>(DEMA2)", "CLOSESHORT(Symbol(),0.1,100,15,17)", Symbol());}

se (DEMA1)<(DEMA2) {MyAlert("if (DEMA1)<(DEMA2)", "CLOSELONG(Symbol(),0.1,100,15,17)", Symbol());}

se ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {MyAlert("if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))", "BUY(Symbol(),0.1,100,15,17)", Symbol();}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {MyAlert("if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))", "SELL(Symbol(),0.1,100,15,17)", Symbol();}

}

g_bars_276 = Bars;

return (0);

}

//----DEMA VARIABILI----Non è impostato correttamente, serve aiuto-----

int start() {

double DEMA1 = (iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,4,0,MODE_EMA,iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0),0));

return(DEMA1);

}

int start() {

double DEMA2 = (iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,6,0,MODE_EMA,iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0),0));

return(DEMA2);

}

int start() {

double DEMA3 = (iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,12,0,MODE_EMA,iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0),0));

return(DEMA3);

}

//

 

Allarme MA+Stoch...per favore

potete aiutarmi a costruire un indicatore: MA+stoch con allarme

stoch(5,3,3);MA(8);MA(15);MA(30)....

allarme quando MA(8)>MA(15)>MA(30) e %K incrocia sopra %D ma meno del livello 50

allarme quando MA(8)<MA(15)<MA(30) e %D incrocia sopra %K ma più del livello 50

grazie mille

il mio inglese è una lingua straniera

simpaticamente!

 
lequoctrieu:
potete aiutarmi a costruire un indicatore: MA+stoch con allarme

stoch(5,3,3);MA(8);MA(15);MA(30)....

allarme quando MA(8)>MA(15)>MA(30) e %K incrocia sopra %D ma meno del livello 50

allarme quando MA(8)<MA(15)<MA(30) e %D incrocia sopra %K ma più del livello 50

grazie mille

il mio inglese è una lingua straniera

simpaticamente!

Ciao,

il codice è tratto da uno dei miei indici, devi adattarlo alle tue esigenze:

extern bool AlertON=false;

extern bool EmailON=true;

extern bool SoundON=falso;

extern bool VoiceON=falso;

extern bool SMSON=falso;

extern string ExtSoundFileName = "";//richiesto il file audio esterno, poi cancellarlo

FastMA = fastMAnow;

SlowMA = slowMAnow;

if ((fastMAnow >= slowMAnow) && (fastMAprevious < slowMAprevious))

{

if (i == 1 && flagval1==0)

{

flagval1=1;

flagval2=0;

if (AlertON==true) Alert("BUY signal at Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period();

if (EmailON==true) SendMail("2754 BUY-ALP EUR", "segnale BUY a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 BUY-ALP EUR", "segnale BUY a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

se (SoundON==true) PlaySound(ExtSoundFileName);//peep etc

if (VoiceON==true) PlaySound(ExtSoundFileName);// il proprio wav vocale

}

CrossUp = Low - Range*0.5;

}

else if ((fastMAnow slowMAprevious))

{

if (i == 1 && flagval2==0)

{

flagval2=1;

flagval1=0;

if (AlertON==true) Alert("SELL signal at Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period();

if (EmailON==true) SendMail("2754 SELL-ALP EUR", "Segnale SELL a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 SELL-ALP EUR", "Segnale SELL a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SoundON==true) PlaySound(ExtSoundFileName);//peeps etc

if (VoiceON==true) PlaySound(ExtSoundFileName);// il proprio wav vocale

}

CrossDown = High + Range*0.5;

}

}

return(0);

}

 

Allarme MA+Stoch...per favore

ixbone:
Ciao,

snippet di codice da uno dei miei indis, dovete adattarlo alle vostre esigenze:

extern bool AlertON=false;

extern bool EmailON=true;

extern bool SoundON=false;

extern bool VoiceON=falso;

extern bool SMSON=falso;

extern string ExtSoundFileName = "";//richiesto il file audio esterno, poi cancellarlo

FastMA = fastMAnow;

SlowMA = slowMAnow;

if ((fastMAnow >= slowMAnow) && (fastMAprevious < slowMAprevious))

{

if (i == 1 && flagval1==0)

{

flagval1=1;

flagval2=0;

if (AlertON==true) Alert("BUY signal at Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period();

if (EmailON==true) SendMail("2754 BUY-ALP EUR", "segnale BUY a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 BUY-ALP EUR", "segnale BUY a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

se (SoundON==true) PlaySound(ExtSoundFileName);//peep etc

if (VoiceON==true) PlaySound(ExtSoundFileName);// il proprio wav vocale

}

CrossUp = Low - Range*0.5;

}

else if ((fastMAnow slowMAprevious))

{

if (i == 1 && flagval2==0)

{

flagval2=1;

flagval1=0;

if (AlertON==true) Alert("SELL signal at Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period();

if (EmailON==true) SendMail("2754 SELL-ALP EUR", "Segnale SELL a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SMSON==true) SendMail("2754 SELL-ALP EUR", "Segnale SELL a Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+""+TimeHour(CurTime())+":"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period());

if (SoundON==true) PlaySound(ExtSoundFileName);//peeps etc

if (VoiceON==true) PlaySound(ExtSoundFileName);// il proprio wav vocale

}

CrossDown = High + Range*0.5;

}

}

return(0);

}

Grazie mille...ixbone

Scrivo il codice molto male...Quindi, non riesco a capire il tuo codice.... puoi aiutarmi a costruire l'indicatore(.mq4) per usarlo

se è così, ti ringrazio molto

ti auguro una buona giornata di lavoro!

 

Come faccio a controllare se la barra attuale è più alta di 2 pip rispetto alla barra precedente?

Scusa, posto sbagliato per questa domanda.

Si prega di cancellare questo admin.

Grazie!

 

Chiusura parziale di un ordine

Salve,

Sto cercando di codificare un EA che prenderà profitti a due livelli. Per fare ciò voglio dividere l'ordine originale in modo che "x" lotti siano tolti al primo obiettivo di profitto e i lotti rimanenti siano tolti al secondo obiettivo di profitto. Per fare questo sto usando due funzioni OrderClose().

La prima funzione OrderClose() funziona perfettamente ma sembra anche chiudere l'ordine esistente e generare un nuovo ticket per i lotti rimanenti.

Qualcuno potrebbe darmi qualche indicazione su come gestire questo "nuovo" ticket/ordine in modo che possa essere elaborato dalla seconda funzione CloseOrder()?

Saluti

Jim

 
jimdee:
Ciao,

Sto cercando di codificare un EA che prenderà profitti a due livelli. Per fare ciò voglio dividere l'ordine originale in modo che "x" lotti siano tolti al primo obiettivo di profitto e i lotti rimanenti siano tolti al secondo obiettivo di profitto. Per fare questo sto usando due funzioni OrderClose().

La prima funzione OrderClose() funziona perfettamente ma sembra anche chiudere l'ordine esistente e generare un nuovo ticket per i lotti rimanenti.

Qualcuno potrebbe darmi qualche indicazione su come gestire questo "nuovo" ticket/ordine in modo che possa essere elaborato dalla seconda funzione CloseOrder()?

Saluti

Jim

Solo un'idea. Puoi provare a usare due trade invece di uno se la chiusura parziale per profitto è più difficile da ottenere. E gestire questi trade in base al loro tempo di apertura.

 
jimdee:
Ciao,

Sto cercando di codificare un EA che prenderà i profitti a due livelli. Per fare ciò voglio dividere l'ordine originale in modo che "x" lotti siano tolti al primo obiettivo di profitto e i lotti rimanenti siano tolti al secondo obiettivo di profitto. Per fare questo sto usando due funzioni OrderClose().

La prima funzione OrderClose() funziona perfettamente ma sembra anche chiudere l'ordine esistente e generare un nuovo ticket per i lotti rimanenti.

Qualcuno potrebbe darmi qualche indicazione su come gestire questo "nuovo" ticket/ordine in modo che possa essere elaborato dalla seconda funzione CloseOrder()?

Saluti

Jim

Le persone hanno riferimenti diversi, a me piace usare la chiusura parziale perché ci sono meno scambi da gestire per il broker.

Ogni volta che la chiusura parziale ha luogo, il broker agirà come se l'ordine rimanente fosse un nuovo ordine, quindi assegnerà un nuovo ticket. Ma non ha molta importanza, a patto che il tuo prossimo passo il metodo per identificare le operazioni non sia basato sul ticket d'ordine, può essere basato sui lotti dell'ordine, o puoi assegnare una variabile per indicare all'EA in quale fase si trova.

La chiusura parziale è un po' difficile da gestire in modo completamente corretto se esiste la seguente situazione:

1. I vostri ordini possono avere lotti diversi a causa di MM.

2. Hai più ordini esistenti allo stesso tempo di diverse dimensioni del lotto.

Se il tuo EA ha le situazioni di cui sopra e se non sei esperto di codifica, penso che tu possa usare l'approccio dell'ordine multiplo.

 

Una soluzione rapida per un problema semplice. Grazie : )

Vorrei restituire le seguenti variabili:

1. Il prezzo di apertura della prima barra dell'ultimo lunedì registrato (Hour Bar).

2. Il prezzo di chiusura dell'ultima barra dell'ultimo mercoledì registrato (barra oraria).

Qualcuno sa come farlo? Ho provato ad ottenere le variabili come passano con :

//-------------------------------------------------------

if (currentday == 1 && currenttime == 0)

{

MondayOpenPrice = iOpen(Symbol(),PERIOD_H1,0);

}

//--------------------------------------------------------

Il problema con quanto sopra è che non posso sempre tenere il mio metatrader in funzione per tutta la settimana per mantenere queste variabili.

Quindi ho bisogno che l'EA guardi indietro nella storia per il primo prezzo aperto registrato il lunedì, ecc.

Grazie mille per il vostro tempo.

Motivazione: