Aiuto per la codifica - pagina 195

 
shtopr:
спасибо за ответ.

проверил h1, m30, m15, m5, m1

по-прежнему работает только один цвет, красный.

È quello che ti ho detto: per un 3° colore (quando i due valori rientrano nella stessa gamma di valori) devi modificare il codice per aggiungere un'opzione per il 3° colore

 
mladen:
Ecco una versione che usa una colonna. Se desiderate un terzo colore, dovete aggiungere una nuova opzione

su un grafico 2min renko live, ci sono solo 2 barre verdi in alto ed è così per tutte le coppie su cui l'ho usato, è normale?

 
drunkpips:
su un grafico 2min renko live, ci sono solo 2 barre verdi in alto e questo è tutto per tutte le coppie su cui l'ho usato, è normale?

Non uso grafici renko

Sta usando gli indicatori incorporati (iBEarsPower() e iBullsPower()) quindi se c'è qualche problema con esso allora il problema è già con gli indicatori incorporati stessi

 
mladen:
Questo è quello che ti ho detto: per un 3° colore (quando entrambi i valori rientrano nella stessa gamma di valori) devi modificare il codice per aggiungere un'opzione per il 3° colore

Ок. Спасибо!

 

mladen,

Ho studiato e giocato con 'mtf semplice' dal post #1874.

Nota: è una MA di una MA, e capace di MTF.

Ho alcune domande:

Non importa cosa faccio con il codice, non riesco a capire cosa fa il 'returnBars', se qualcosa.

1. Cosa determina se il numero di barre modificate nel time frame di destinazione è richiesto e perché?

2. Per quanto riguarda questa linea:

returnBars = TimeFrame == "returnBars"; // controlla se viene richiesto il numero di barre modificate

Non sono un programmatore molto istruito. Non conosco questa costruzione composta. Inoltre non conosco le regole per mescolare i tipi di variabili.

Sembra che la variabile stringa Timeframe stia ottenendo il valore della booleana returnBars.

Poi assegna il valore a returnBars - di nuovo. ??

Poiché returnBars è booleano, assegna '1' se TimeFrame è maggiore di 0, altrimenti assegna '0' ?

3. Imposto l'indicatore su un TF superiore, e provo dal vivo (in avanti) molte barre, o nello Strategy tester. Posso eliminare la linea che lo utilizza, e non ottengo alcun cambiamento sulle linee dell'indicatore:

if (returnBars) Comment("returnBars ",returnBars, " Tick ",Volume(0));

// if (returnBars) { ma1[0] = limite+1; return(0); }

La linea di commento sullo schermo mostrerà "returnBars 1".

Non so dove prende il valore '1'.

Senza la parte 'if', mostra sempre '0'.

Stessi risultati se messo in Init().

Grande essere

 
Big Be:
mladen,

Ho studiato e giocato con 'mtf semplice' dal post #1874.

Nota: è una MA di una MA, e capace di MTF.

Ho alcune domande:

Non importa cosa faccio con il codice, non riesco a capire cosa fa il 'returnBars', se c'è qualcosa.

1. Cosa determina se il numero di barre modificate nel time frame di destinazione è richiesto e perché?

2. Per quanto riguarda questa linea:

returnBars = TimeFrame == "returnBars"; // controlla se viene richiesto il numero di barre modificate

Non sono un programmatore molto istruito. Non conosco questa costruzione composta. Inoltre non conosco le regole per mescolare i tipi di variabili.

Sembra che la variabile stringa Timeframe stia ottenendo il valore della booleana returnBars.

Poi assegna il valore a returnBars - di nuovo. ??

Poiché returnBars è booleano, assegna '1' se TimeFrame è maggiore di 0, altrimenti assegna '0' ?

3. Imposto l'indicatore su un TF superiore, e provo dal vivo (in avanti) molte barre, o nello Strategy tester. Posso eliminare la linea che lo utilizza, e non ottengo alcun cambiamento sulle linee dell'indicatore:

if (returnBars) Comment("returnBars ",returnBars, " Tick ",Volume(0));

// if (returnBars) { ma1[0] = limite+1; return(0); }

La linea di commento sullo schermo mostrerà "returnBars 1".

Non so dove prende il valore '1'.

Senza la parte 'if', mostra sempre '0'.

Stessi risultati se messo in Init().

Grande essere

Grande essere

Immaginate questo :

1. Stai lavorando su un grafico a 15 minuti e il tuo indicatore mostra i dati di 1 ora. Quante barre sono cambiate nell'ultimo tick sul grafico a 15 minuti e quante sul grafico a 1 ora? Return bars sta controllando questo. Quel numero non deve essere un qualsiasi valore presunto (scegliete un time frame che non avete visitato dai vostri grafici per molto tempo e vedete cosa succederà quando metatrader inizierà a scaricare i dati per quel time frame - dovete controllare quante nuove barre sono state scaricate altrimenti dovrete saltare avanti e indietro attraverso i time frame per avere uno stato preciso delle barre passate di un indicatore multi time frame)

2. Di returnBars = TimeFrame == "returnBars";

Hai un'assegnazione qui (il "=") e un confronto logico qui (il "==") Questo significa che returnBars dovrebbe ricevere il risultato del confronto logico di due stringhe (TimeFrame e "returnBars")

3. ReturnBars è una variabile di tipo booleano. Può avere due valori: 0 che equivale a "falso" e 1 che equivale a "vero". Ecco perché si ottiene 1 per returnBars (significa che returnBars è impostato su "true")

______________

PS: se fosse per le regole C/C++ per i booleani, allora qualsiasi valore diverso da 0 sarebbe considerato vero, e si possono testare le variabili di metatrader allo stesso modo (per esempio if(someDoubleValue) testerebbe se someDoubleValue è diverso da 0), ma metatrader assegna 0 e 1 alle variabili di tipo booleano

 

Caro Mladen

Non riesco a capire come l'indicatore Poalln ridisegna. So che iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) o iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) significano valori futuri, tuttavia nel calcolo dell'ultima barra non ci sono dati per i-8.

Sarebbe zero, credo. Quindi come fa Pollan a ridisegnare?

Meglio,

 
-IXI-:
Caro Mladen

Non riesco a capire come l'indicatore Poalln ridisegna. So che iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) o iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) indicano valori futuri, tuttavia quando si calcola l'ultima barra non ci sono dati per i-8.

Sarebbe zero, credo. Quindi come fa Pollan a ridisegnare?

Migliore,

IXI

Ad una barra corrente ottiene i valori 0 per quelle barre. Alla prima barra passata ottiene 1 valore futuro e 7 zeri. E così via.

Man mano che si formano nuove barre, le barre che stavano ottenendo degli zeri per i risultati dei valori futuri stanno effettivamente ottenendo risultati futuri reali e quindi quei valori vengono cambiati in base a quei "nuovi" valori futuri

 

Come posso far funzionare questo indicatore su coppie JPY

Salve,

Questo indi fa una linea con ogni numero tondo e una linea 15 pips su ogni lato del numero tondo.

Ma non funziona con le coppie JPY.

Cosa deve essere cambiato per farlo funzionare?

#property indicator_chart_window

extern color UpperLineColor = Red;

extern color MainLineColor = Red;

extern color LowerLineColor = Red;

extern double HighOffset = 150;

extern double LowOffset = 150;

extern int LineStyle = 2;

extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";

double LineSpaceOld;

double Hoch;

double Tief;

bool FirstRun = true;

double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)

string LineText = "RoundNr ";

string LineText1 = "RoundNr1 ";

string LineText2 = "RoundNr2 ";

int deinit()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

ObjectDelete(LineText+DoubleToStr(i,2));

ObjectDelete(LineText1+DoubleToStr(i,2));

ObjectDelete(LineText2+DoubleToStr(i,2));

}

return(0);

}

int start()

{

if(FirstRun)

{

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

FirstRun = false;

}

else if(LineSpace != LineSpaceOld)

{

deinit();

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

}

DrawLines();

LineSpaceOld = LineSpace;

return(0);

}

void DrawLines()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

string StringNr = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

else // Adjustments

{

ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

else // Adjustments

{

ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

else // Adjustments

{

ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

}

WindowRedraw();

}
 
Georgebaker:
Ciao,

Questo indi fa una linea con ogni numero tondo e una linea di 15 pips su ogni lato del numero tondo.

Ma non funziona con le coppie JPY.

Cosa deve essere cambiato per farlo funzionare?

#property indicator_chart_window

extern color UpperLineColor = Red;

extern color MainLineColor = Red;

extern color LowerLineColor = Red;

extern double HighOffset = 150;

extern double LowOffset = 150;

extern int LineStyle = 2;

extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";

double LineSpaceOld;

double Hoch;

double Tief;

bool FirstRun = true;

double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)

string LineText = "RoundNr ";

string LineText1 = "RoundNr1 ";

string LineText2 = "RoundNr2 ";

int deinit()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

ObjectDelete(LineText+DoubleToStr(i,2));

ObjectDelete(LineText1+DoubleToStr(i,2));

ObjectDelete(LineText2+DoubleToStr(i,2));

}

return(0);

}

int start()

{

if(FirstRun)

{

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

FirstRun = false;

}

else if(LineSpace != LineSpaceOld)

{

deinit();

Hoch = NormalizeDouble( High, 2 );

Tief = NormalizeDouble( Low, 2 );

}

DrawLines();

LineSpaceOld = LineSpace;

return(0);

}

void DrawLines()

{

double AbSpace = 0.01*LineSpace;

double Oben = MathRound(110*Hoch)/100;

double Unten = MathRound(80*Tief)/100;

for(double i=0; i<=Oben; i+=AbSpace)

{

if(i<Unten) { continue; }

string StringNr = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

else // Adjustments

{

ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);

ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

else // Adjustments

{

ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));

ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);

}

//#######################################################################

if(i<Unten) { continue; }

string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name

if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow

{

ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

else // Adjustments

{

ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));

ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);

ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);

}

}

WindowRedraw();

}

Georgebaker,

Perché non usi alcuni degli indicatori come questo: https: //www.mql5.com/en/forum/180648/page307 come base per il tuo indicatore? Potrebbe farti risparmiare del tempo di codifica