Le condizioni dovrebbero essere più raffinate. Per esempio: quando entrambi segnalano lo stesso è molto spesso. Quindi, quando esattamente dovrebbero farlo. Alla prima occorrenza? Ad ogni occorrenza di questo? Inoltre, se si esce ad ogni cambio di uno dei due, le uscite saranno molto frequenti
Grazie per la risposta! Sì, questa potrebbe non essere una buona strategia. È solo che se ottengo questo come modello posso probabilmente fare alcune modifiche da solo in seguito. Quello che voglio è la possibilità di combinare due indicatori (e l'uso dei loro buffer).
Diciamo che la strategia invece dovrebbe essere: comprare quando entrambi gli indicatori indicano. E vendere quando entrambi gli indicatori indicano. Dovrebbe accadere dopo il cambio di indicatore e la barra chiusa. Dovrebbe accadere ad ogni occorrenza di questo.
quando l'indi viene applicato durante l'esecuzione dell'EA (la media mobile standard in MT4) i valori sono molto diversi da quelli che vengono visualizzati applicando lo stesso indicatore alla fine dell'esecuzione dell'EA.
Potresti spiegare il motivo e, se possibile, correggere l'indi?
Mladen ha appena finito la mia personalizzazione nell'indicatore precedente che hai modificato. Cosa c'è di sbagliato in questo codice? Non visualizza nulla... Nessun errore durante la compilazione.
#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers4#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 LimeGreen
#property indicator_color4 Crimson
#property indicator_width1 2#property indicator_width2 2#property indicator_width3 2#property indicator_width4 2externstring NOTE1 = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMSexternint SpanPeriod = 1; // Period of Spanexternint SpanShift = -26; // Shift of SpanexternENUM_MA_METHOD SpanMode = 1; // Mode of SpanexternENUM_APPLIED_PRICE SpanPrice = 0; // Applied price of Spanexternint MaPeriod = 55; // Period of Moving averageexternint MaShift = 0; // Shift of Moving averageexternENUM_MA_METHOD MaMode = 1; // Mode of Moving averageexternENUM_APPLIED_PRICE MaPrice = 0; // Applied price of Moving averageexternstring NOTE2 = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLESexterncolor SpanClr = Gold; // Span colorexternint SpanWdt = 2; // Span widthexternENUM_LINE_STYLE SpanStl = 0; // Span line styleexterncolor MaClr = DodgerBlue; // Moving average colorexternint MaWdt = 2; // Moving average widthexternENUM_LINE_STYLE MaStl = 0; // Moving average line styleexternstring NOTE3 = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWSexternbool DrawArrows = true; // Draw signal arrows?externbool DrawMaLines = true; // Draw lines?externcolor UpArrowClr = LimeGreen; // Up arrow colorexternint UpArrowWdt = 2; // Up arrow widthexterncolor DnArrowClr = Crimson; // Down arrow colorexternint DnArrowWdt = 2; // Down arrow widthexternint ArrowsDistance = 10; // Arrows distance from candleexternstring NOTE4 = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERTexternbool AlertsOn = true; // Active alert?externbool AlertsOnCurrent = true; // Alert on current unclosed barexternbool AlertsMessage = true; // Alert messageexternbool AlertsSound = true; // Alert soundexternbool AlertsEmail = false; // Alert e-mailexternstring SoundFile = "alert2.wav"; // Filename of sound alertstring IndicatorFileName;
int WhichBar;
double Gap;
double SpanBuffer[]; // Buffer of the Spandouble MaBuffer[]; // Buffer of the Moving averagedouble CrossUpBuffer[]; // Up arrow bufferdouble CrossDnBuffer[]; // Down arrow bufferdouble TrendBuffer[]; // Span/Ma cross bufferint init()
{
IndicatorFileName = WindowExpertName();
IndicatorBuffers(5);
SetIndexBuffer(0, SpanBuffer);
SetIndexBuffer(1, MaBuffer);
SetIndexBuffer(2, CrossUpBuffer);
SetIndexBuffer(3, CrossDnBuffer);
SetIndexBuffer(4, TrendBuffer);
if (DrawMaLines) {
SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);
SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
else {
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);}
if (DrawArrows) {
SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(0, 233);
SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(0, 234);}
else {
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);}
return(0);}
int deinit() { return(0); }
int start() {
int counted_bars = IndicatorCounted();
int i, limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars, Bars-1);
for(i=limit; i>=0; i--){
SpanBuffer[i] = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
MaBuffer[i] = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
Gap = iATR(NULL,0,20,i);
TrendBuffer[i] = TrendBuffer[i+1];
if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
CrossUpBuffer[i] = EMPTY_VALUE;
CrossDnBuffer[i] = EMPTY_VALUE;
if (TrendBuffer[i]!= TrendBuffer[i+1])
if (TrendBuffer[i] == 1)
CrossUpBuffer[i] = Low[i] - ArrowsDistance * Gap;
else CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap;
}
if (AlertsOn)
{
if (AlertsOnCurrent)
WhichBar = 0;
else WhichBar = 1;
if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
if (TrendBuffer[WhichBar] == 1)
doAlert("uptrend");
else doAlert("downtrend");
}
return(0);
}
// CUSTOM FUNCTIONS -------------------------void doAlert(string doWhat)
{
staticstring previousAlert="nothing";
staticdatetime previousTime;
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
if (AlertsMessage) Alert(message);
if (AlertsEmail) SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
if (AlertsSound) PlaySound(SoundFile);
}
}
Mladen ha appena finito la mia personalizzazione nell'indicatore precedente che hai modificato. Cosa c'è di sbagliato in questo codice? Non visualizza nulla... Nessun errore durante la compilazione.
thefxpros
Prova così
#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers4#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 LimeGreen
#property indicator_color4 Crimson
#property indicator_width1 2#property indicator_width2 2#property indicator_width3 2#property indicator_width4 2externstring NOTE1 = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMSexternint SpanPeriod = 1; // Period of Spanexternint SpanShift = -26; // Shift of SpanexternENUM_MA_METHOD SpanMode = 1; // Mode of SpanexternENUM_APPLIED_PRICE SpanPrice = 0; // Applied price of Spanexternint MaPeriod = 55; // Period of Moving averageexternint MaShift = 0; // Shift of Moving averageexternENUM_MA_METHOD MaMode = 1; // Mode of Moving averageexternENUM_APPLIED_PRICE MaPrice = 0; // Applied price of Moving averageexternstring NOTE2 = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLESexterncolor SpanClr = Gold; // Span colorexternint SpanWdt = 2; // Span widthexternENUM_LINE_STYLE SpanStl = 0; // Span line styleexterncolor MaClr = DodgerBlue; // Moving average colorexternint MaWdt = 2; // Moving average widthexternENUM_LINE_STYLE MaStl = 0; // Moving average line styleexternstring NOTE3 = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWSexternbool DrawArrows = true; // Draw signal arrows?externbool DrawMaLines = true; // Draw lines?externcolor UpArrowClr = LimeGreen; // Up arrow colorexternint UpArrowWdt = 2; // Up arrow widthexterncolor DnArrowClr = Crimson; // Down arrow colorexternint DnArrowWdt = 2; // Down arrow widthexternint ArrowsDistance = 10; // Arrows distance from candleexternstring NOTE4 = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERTexternbool AlertsOn = true; // Active alert?externbool AlertsOnCurrent = true; // Alert on current unclosed barexternbool AlertsMessage = true; // Alert messageexternbool AlertsSound = true; // Alert soundexternbool AlertsEmail = false; // Alert e-mailexternstring SoundFile = "alert2.wav"; // Filename of sound alertstring IndicatorFileName;
int WhichBar;
double Gap;
double SpanBuffer[]; // Buffer of the Spandouble MaBuffer[]; // Buffer of the Moving averagedouble CrossUpBuffer[]; // Up arrow bufferdouble CrossDnBuffer[]; // Down arrow bufferdouble TrendBuffer[]; // Span/Ma cross bufferint init()
{
IndicatorFileName = WindowExpertName();
IndicatorBuffers(5);
SetIndexBuffer(0, SpanBuffer);
SetIndexBuffer(1, MaBuffer);
SetIndexBuffer(2, CrossUpBuffer);
SetIndexBuffer(3, CrossDnBuffer);
SetIndexBuffer(4, TrendBuffer);
if (DrawMaLines) {
SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);
SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
else {
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);}
if (DrawArrows) {
SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(0, 233);
SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(0, 234);}
else {
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);}
return(0);}
int deinit() { return(0); }
int start() {
int counted_bars = IndicatorCounted();
int i, limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars, Bars-1);
for(i=limit; i>=0; i--){
SpanBuffer[i] = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
MaBuffer[i] = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
Gap = iATR(NULL,0,20,i);
if (i<Bars-1) TrendBuffer[i] = TrendBuffer[i+1];
if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
CrossUpBuffer[i] = EMPTY_VALUE;
CrossDnBuffer[i] = EMPTY_VALUE;
if (i<Bars-1 && TrendBuffer[i]!= TrendBuffer[i+1])
if (TrendBuffer[i] == 1)
CrossUpBuffer[i] = Low[i] - ArrowsDistance * Gap;
else CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap;
}
if (AlertsOn)
{
if (AlertsOnCurrent)
WhichBar = 0;
else WhichBar = 1;
if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
if (TrendBuffer[WhichBar] == 1)
doAlert("uptrend");
else doAlert("downtrend");
}
return(0);
}
// CUSTOM FUNCTIONS -------------------------void doAlert(string doWhat)
{
staticstring previousAlert="nothing";
staticdatetime previousTime;
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
if (AlertsMessage) Alert(message);
if (AlertsEmail) SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
if (AlertsSound) PlaySound(SoundFile);
}
}
Oppure rimuovi completamente la dichiarazione strict (dato che quell'indicatore ha bisogno di una riscrittura completa se deve essere usato con lo "strict")
Caro mladen,
Ho provato entrambi i suggerimenti senza successo, ma mi sono reso conto che l'indi non si aggiorna quando si esegue in un EA come nella seguente immagine.
Ho provato con Mladen e sembra funzionare ma nello strategy tester non si aggiorna e non fa apparire l'avviso, quando il mercato si aprirà proverò nel mercato reale. grazie
Simon
Le condizioni dovrebbero essere più raffinate. Per esempio: quando entrambi segnalano lo stesso è molto spesso. Quindi, quando esattamente dovrebbero farlo. Alla prima occorrenza? Ad ogni occorrenza di questo? Inoltre, se si esce ad ogni cambio di uno dei due, le uscite saranno molto frequenti
Grazie per la risposta! Sì, questa potrebbe non essere una buona strategia. È solo che se ottengo questo come modello posso probabilmente fare alcune modifiche da solo in seguito. Quello che voglio è la possibilità di combinare due indicatori (e l'uso dei loro buffer).
Diciamo che la strategia invece dovrebbe essere: comprare quando entrambi gli indicatori indicano. E vendere quando entrambi gli indicatori indicano. Dovrebbe accadere dopo il cambio di indicatore e la barra chiusa. Dovrebbe accadere ad ogni occorrenza di questo.
Tutto il meglio!
Caro mladen,
Ho un problema con l'indicatore allegato:
quando l'indi viene applicato durante l'esecuzione dell'EA (la media mobile standard in MT4) i valori sono molto diversi da quelli che vengono visualizzati applicando lo stesso indicatore alla fine dell'esecuzione dell'EA.
Potresti spiegare il motivo e, se possibile, correggere l'indi?
Signor mladen ,
Sto facendo qualche cambiamento per il nastro ma riempito al canale ma, ma ho un problema con il buffer.
C'è un modo per nascondere il canale dietro l'istogramma o fare il vuoto tra i canali?
Ho provato a nasconderlo ma posso farlo solo su un lato, è necessario aggiungere un altro buffer?
E un altro problema è alla linea 44, non posso esternare o cancellare.
ha sempre errore uscire.
Per favore datemi qualche consiglio, grazie.
Steven.
Signor mladen ,
Sto facendo qualche cambiamento per il nastro ma riempito al canale ma, ma ho un problema con il buffer.
C'è un modo per nascondere il canale dietro l'istogramma o fare il vuoto tra i canali?
Ho provato a nasconderlo ma posso farlo solo su un lato, è necessario aggiungere un altro buffer?
E un altro problema è alla linea 44, non posso esternare o cancellare.
ha sempre errore uscire.
Per favore datemi qualche consiglio, grazie.
Steven.
Non sono sicuro se questo è quello che stai cercando di fare, ma provalo
Non sono sicuro se questo è quello che stai cercando di fare, ma provalo
Sì, esattamente quello che voglio :D
Ma puoi aiutarmi a controllare il codice alla linea 44 'AlertOnClosedCandle', perché non può cancellare o esternare bool?
Questa è la prima volta che ho questo tipo di problema.
In ogni caso ho imparato alcune cose sul buffer.
Grazie.
Mladen ha appena finito la mia personalizzazione nell'indicatore precedente che hai modificato. Cosa c'è di sbagliato in questo codice? Non visualizza nulla... Nessun errore durante la compilazione.
Mladen ha appena finito la mia personalizzazione nell'indicatore precedente che hai modificato. Cosa c'è di sbagliato in questo codice? Non visualizza nulla... Nessun errore durante la compilazione.
thefxpros
Prova così
Correzione:
Cambia le linee 74 e 75 di sigma da questa:
a questo :
E dovrebbe funzionare
Oppure rimuovi completamente la dichiarazione strict (dato che quell'indicatore ha bisogno di una riscrittura completa se deve essere usato con lo "strict")
Caro mladen,
Ho provato entrambi i suggerimenti senza successo, ma mi sono reso conto che l'indi non si aggiorna quando si esegue in un EA come nella seguente immagine.
Dovrebbe essere possibile risolvere il problema?
:
thefxpros
Prova così
Ciao signor Mladen,
Stavo pensando di aggiungere un commento quando il prezzo ha invertito la tendenza e avere "wait for buy" e "wait for sell".
Aggiungendo la nuova linea all'acquisto non ci sono problemi, ma quando la aggiungo alla vendita non riesco a farla funzionare.
Cosa devo cambiare?