Aiuto per la codifica - pagina 352

 
freakout:
ciao,

caro mladen, ho una piccola richiesta da farti - potresti disattivare tutte le informazioni che l'indicatore allegato qui sotto mostra nell'angolo superiore sinistro?

grazie in anticipo ;-)

Fatto un'opzione per attivare/disattivare i commenti.

File:
 
paradise77:
Ciao,

Sono nuovo qui. Vorrei aggiornare un oggetto rettangolo, ma non so come. Il codice qui sotto ho usato per creare rettangoli oggetto, se EMAs attraversato. Questi rettangoli devono essere finiti se il prezzo torna indietro e lo tocca. Come fare?

Grazie in anticipo.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrLime

#property indicator_width1 2

#property indicator_color2 clrMagenta

#property indicator_width2 2

extern int EMA1 = 3;

extern int EMA2 = 21;

extern int EMA3 = 63;

extern double arrowDistance = 0.0003;

extern color upRectColor = clrYellow;

extern color dnRectColor = clrDodgerBlue;

extern color touchRectColor = clrDarkGray;

//---

extern double rectHigh = 0.0001;

extern int rectDays = 3;

extern int bars_limit = 2000;

extern bool showRectangle = true;

double upArrow[];

double dnArrow[];

double prev2EMA1, prev2EMA2, prev2EMA3;

double prevEMA1, prevEMA2, prevEMA3;

double curEMA1, curEMA2, curEMA3;

double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;

string objRectName;

string rectArray[];

string indiName = "Emac";

int rectValidity = 0;

int arrayMaxAmounts = 99999;

int arrayCurAmount = 0;

int arrayLastAmount = 0;

//+------------------------------------------------------------------+

//| INIT() |

//+------------------------------------------------------------------+

int init() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);

IndicatorBuffers(2);

SetIndexBuffer(0,upArrow);

SetIndexBuffer(1,dnArrow);

SetIndexStyle(0,DRAW_ARROW);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexArrow(1,234);

SetIndexEmptyValue(0,0.0);

SetIndexEmptyValue(1,0.0);

SetIndexLabel(0,"Up");

SetIndexLabel(1,"Dn");

return(0);

}

//+------------------------------------------------------------------+

//| DEINIT() |

//+------------------------------------------------------------------+

int deinit() {

int k=0;

while (k<ObjectsTotal()) {

string objname = ObjectName(k);

if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")

ObjectDelete(objname);

else

k++;

}

return(0);

}

//+------------------------------------------------------------------+

//| START() |

//+------------------------------------------------------------------+

int start() {

if (Period() != PERIOD_H1) {

Alert("Use only @ TF: H1");

return(0);

}

int limit,i,k;

int counted_bars=IndicatorCounted();

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

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---

if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;

if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {

Alert("Adjust limit settings or put more bars on your chart!");

return(0);

}

//---

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

prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);

prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);

prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);

prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);

curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);

curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);

curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);

prevOpenPrc = iOpen(NULL,0,i+1);

prevClosePrc = iClose(NULL,0,i+1);

prevLowPrc = iLow(NULL,0,i+1);

prevHighPrc = iHigh(NULL,0,i+1);

rectValidity = rectDays*86400;

if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up

upArrow = prevLowPrc - arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down

dnArrow = prevHighPrc + arrowDistance;

if (showRectangle == true) {

//----------------------- Draw Rectangle ----------------------

objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));

if (ObjectFind(objRectName) == -1) { // not exists

ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);

ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);

ObjectSet(objRectName, OBJPROP_WIDTH, 0);

ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);

//--- put information to Array ---

arrayCurAmount = ArraySize(rectArray);

rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched

} // if

} // if

} // if

} // for

//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------

return(0);

} // start

//+------------------------------------------------------------------+

void DelObjects(string id) {

int ot1=ObjectsTotal();

while(ot1>=0) {

if (StringFind(ObjectName(ot1),id,0)>-1) {

ObjectDelete(ObjectName(ot1));

}

ot1--;

}

return;

}

//+------------------------------------------------------------------+

string FuncPeriodToStr(int thePeriod) {

switch(thePeriod) {

case 1: return("M1");

case 5: return("M5");

case 15: return("M15");

case 30: return("M30");

case 60: return("H1");

case 240: return("H4");

case 1440: return("D1");

case 10080: return("W1");

case 43200: return("MN1");

default: return("MN1");

}

}

//+------------------------------------------------------------------+

@Mladen,

Potresti per favore aiutarmi a dare un indizio sulla modifica del rettangolo?

Ho trovato questo:

*) Tipi di oggetti - Documentazione MQL4

*) Proprietà degli oggetti - Documentazione MQL4

Posso ottenere le proprietà del rettangolo (time1, price1, time2, price2, color), poi confrontare il price1 o price2 con l'attuale prezzo Ask/Bid. Se il prezzo Ask/Bid tocca il prezzo1 o il prezzo2, allora devo fare quanto segue:

a) Non ho bisogno di Array, ma solo di guardare ogni oggetto rettangolo.

Cancellare l'oggetto, crearlo di nuovo usando nuovo tempo2 e nuovo colore.

b) Come conoscere la posizione della candela a OBJPROP_PRICE1? Normalmente usiamo un ciclo "for" come

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

come possiamo ottenere la "i" della barra che ha prezzo1?

c) Se non cancello e ricreo il rettangolo, posso semplicemente usare ObjectSet per cambiare il rettangolo time2 e il colore?

Grazie.

 
paradise77:
@Mladen,

Potreste per favore aiutarmi a dare un indizio sulla modifica del rettangolo?

Ho trovato questo :

*) Tipi di oggetti - Documentazione MQL4

*) Proprietà degli oggetti - Documentazione MQL4

Posso ottenere le proprietà del rettangolo (time1, price1, time2, price2, color), poi confrontare il price1 o price2 con l'attuale prezzo Ask/Bid. Se il prezzo Ask/Bid tocca il prezzo1 o il prezzo2, allora devo fare quanto segue:

a) Non ho bisogno di Array, ma solo di guardare ogni oggetto rettangolo.

Cancellare l'oggetto, crearlo di nuovo usando nuovo tempo2 e nuovo colore.

b) Come conoscere la posizione della candela a OBJPROP_PRICE1? Usiamo normalmente il ciclo "for" come

come possiamo ottenere la "i" della barra che ha prezzo1?

c) Se non cancello e ricreo il rettangolo, posso semplicemente usare ObjectSet per cambiare il rettangolo time2 e il colore?

Grazie.

Nel tuo caso i tuoi prezzi sono OK. Devi usare i tempi per limitare le caselle da sinistra e da destra

 

Cosmiclifeform,

Grazie per questo pezzo, in realtà ho usato instaforex demo.ho scaricato il 1M prezzi fiest come il metodo normale.faccio poi l'impostazione, utilizzando EURUSD, vedere gli screenshort qui sotto della scheda rapporto e il log.

//reports, notando ma zerp, perché?

cosmiclifeform:
Ciao Mastercash,

Ho eseguito l'EA su un conto demo FXDD...e non ho fatto nulla di speciale...ho solo eseguito l'EA nello Strategy Tester con le impostazioni predefinite.

Vorrei poterti aiutare di più... ma senza indizi specifici da rintracciare (log degli errori, screenshot e altre condizioni) sarà impossibile scoprire perché stai ottenendo risultati vuoti.

Tutto quello che posso raccomandare è...

Prima prova un buon EA nel tester che sai che funziona bene.

Questo stabilirà che sia i tuoi conti demo che le tue procedure sono a posto.

Ottieni prima la tua sicurezza che tutto funziona come dovrebbe.

Poi prova il tuo Nice TraderEA... e scrivi esattamente cosa succede. Anche uno schermo vuoto dovrebbe avere dei log da controllare.

Prova ad aggiungere dichiarazioni PRINT e COMMENT ovunque... poi controlla di nuovo i tuoi log... sia la scheda EA che la scheda Journal...

Anche i vostri COMMENTI appariranno sullo schermo... quindi dovreste vedere il vostro EA funzionare o meno.

La linea di fondo per ottenere un buon aiuto nella codifica...

È quello di fornire il maggior numero di indizi che puoi trovare su ciò che sta accadendo con il tuo EA...

Continua a provare tutto il possibile... e facci sapere i risultati.

Abbi cura di te,

Robert
File:
backtest1.png  14 kb
backtest2.png  3 kb
 
mladen:
Nel tuo caso i tuoi prezzi sono OK. Devi usare i tempi per limitare le caselle da sinistra e da destra

Grazie mladen. Vuoi dire che devo usare il Time2 dinamicamente? Time1, prezzo1 e prezzo2 sono fissi. Ma il Time2 dipende dalla barra corrente (i), e si muove, fino a quando il prezzo tocca il rettangolo, o è più del tempo di impostazione predefinito del rettangolo.

In altre parole, è impossibile cambiare il colore e il tempo2 di un rettangolo?

Grazie

 
paradise77:
Grazie mladen. Vuoi dire che devo usare il Time2 dinamicamente? Time1, prezzo1 e prezzo2 sono fissi. Ma il Time2 dipende dalla barra corrente (i), e si muove fino a quando il prezzo non tocca il rettangolo, o è più del tempo predefinito di impostazione del rettangolo.

In altre parole, è impossibile cambiare il colore e il tempo2 di un rettangolo?

Grazie

paradiso77

Sì, è necessario

In questo modo regolerai sempre il bordo destro della scatola (se ha bisogno di regolazione, ovviamente)

 

Ciao Mister Mladen e Mrtools.

Non mi piacciono davvero troppi avvisi perché mi piace piuttosto un sistema visivo, quindi tutto quel rumore e le finestre popup mi distraggono soltanto. Ho solo impostato su alcuni avvisi del CCI quando ipervenduto o ipercomprato, questo è tutto.

Ma c'è un allarme che mi piacerebbe avere, cioè quando il 'mio' SSA + MA fa un incrocio con il MA, sia verso l'alto che verso il basso.

Un'altra cosa, io aggiungo sempre tre livelli a questo bel strumento; naturalmente la zerolina, 0.0, ma anche -0.3 e 0.3.

Vorrei anche acquisire un allarme quando l'SSA incrocia il livello -0,3 e il livello 0,3. Il livello 0,0 non è necessario.

Come allarme un semplice suono e un popup, tutto qui.

Grazie !

File:
ssa__ma.mq4  5 kb
 
Wulong10:
Ciao signor Mladen e Mrtools.

Non mi piacciono davvero troppi avvisi perché mi piace piuttosto un sistema visivo, quindi tutto quel rumore e le finestre popup mi distraggono soltanto. Ho solo impostato alcuni avvisi del CCI quando sono in ipervenduto o ipercomprato, tutto qui.

Ma c'è un allarme che mi piacerebbe avere, cioè quando il 'mio' SSA + MA fa un incrocio con il MA, sia verso l'alto che verso il basso.

Un'altra cosa, io aggiungo sempre tre livelli a questo bel strumento; naturalmente la zerolina, 0.0, ma anche -0.3 e 0.3.

Vorrei anche acquisire un allarme quando l'SSA incrocia il livello -0,3 e il livello 0,3. Il livello 0,0 non è necessario.

Come allarme un semplice suono e un popup, tutto qui.

Grazie!

Wulong10

Il problema di SSA è che è un algoritmo di ricalcolo. Aggiungerci degli allarmi non è, almeno questa è la mia opinione, saggio poiché cambierà sempre il posto degli incroci e a volte gli incroci spariranno completamente. Meglio usarlo in modalità di non segnalazione (solo stima)

 

Ciao Mladen,

So che l'SSA ricalcola su timeframe più alti.

Quando lo uso sulla M5, cambia un po', sulla M15 molto di più, ma sulla M1 ho testato molto questo indy e ne sono molto soddisfatto. Con le mie impostazioni non si adatta molto, infatti è molto preciso.

Certo, quando c'è un lungo aumento o una lunga caduta del prezzo, non è molto affidabile, ma non è così per molti indicatori?

Poi si usa una semplice media mobile sul grafico per questioni di sicurezza ...

Forse qualcun altro non può usare gli allarmi, ma io sì.

Anche gli avvisi del CCI non sono sempre giusti, ma è solo un'indicazione di quello che potrebbe succedere dopo.

Quindi, se l'SSA dà un allarme, sta a me decidere cosa fare e sto diventando bravo in questo.

Inoltre, penso di non essere l'unico ad essere affezionato all'SSA ...

Croci che spariscono ? Non molto spesso sull'M1 e sono giorni che guardo quel grafico ...

Quindi, vorrei davvero gli avvisi, se possibile.

Danke schön !

 
Wulong10:
Ciao Mladen,

So che l'SSA ricalcola su timeframe più alti.

Quando lo uso sull'M5, cambia un po', sull'M15 molto di più, ma sull'M1 ho testato molto questo indy e ne sono molto soddisfatto. Con le mie impostazioni non si adatta molto, infatti è molto preciso.

Certo, quando c'è un lungo aumento o una lunga caduta del prezzo, non è molto affidabile, ma non è così per molti indicatori?

Poi si usa una semplice media mobile sul grafico per questioni di sicurezza ...

Forse qualcun altro non può usare gli allarmi, ma io sì.

Anche gli avvisi del CCI non sono sempre giusti, ma è solo un'indicazione di quello che potrebbe succedere dopo.

Quindi, se l'SSA dà un allarme, sta a me decidere cosa fare e sto diventando bravo in questo.

Inoltre, penso di non essere l'unico ad essere affezionato all'SSA ...

Croci che spariscono ? Non molto spesso sull'M1 e sono giorni che guardo quel grafico ...

Quindi, vorrei davvero gli avvisi, se possibile.

Danke schön!

Wulong10

L'SSA si ricalcola sempre (credetemi visto che sono stato io a fare quel dll per calcolarlo). Non c'è eccezione a questa regola (non importa su quale arco di tempo lo usi).

Inoltre, se il numero di calcoli è impostato a > 1, ricalcolerà tutte le barre. Se il numero di calcoli è impostato su 1, allora almeno le barre di "ritardo" saranno ricalcolate

Motivazione: