[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 674

 
 

Un tale problema.

Ho iniziato a modificare Expert Advisor dal tutorial - strings.mq4 (link a experthttp://c.mql4.com/book/mq4/experts/strings.mq4)

Ho aggiunto un paio di righe, ma non funziona. È chiaro che ho fatto un errore, ma non riesco a trovare l'errore.

Quindi. Tutti i cambiamenti sono concentrati nel blocco 10.

Ecco l'originale:

//-------------------------------------------------------------- 10 --
int Create(int Ind_Bar, int Line) // Funzione personalizzata...
{ // ...creare oggetto
Colore Colore; // colore dell'oggetto
datetime T_Bar=Time [Ind_Bar]; // tempo di apertura della barra
double O_Bar=Open [Ind_Bar]; // Prezzo di apertura della barra
double C_Bar=Close[Ind_Bar]; // Prezzo di chiusura di una barra
double H_Bar=High [Ind_Bar]; // Prezzo massimo della barra
double L_Bar=Low [Ind_Bar]; // Prezzo minimo della barra

string Nom_Lin =Line + "_"; // Stringa - numero di linea
// string Nom_Lin = DoubleToStr(Line,0)+"_"; // Anche questo è possibile
string Str_Time=TimeToStr(T_Bar); // String - tempo aperto.
stringa His_Name=Prefix+Nom_Lin+Str_Time;// Nome dell'oggetto creato
if (O_Bar < C_Bar) Color=Blue; // la selezione del colore dipende...
if (O_Bar > C_Bar) Color=Red; // ... a seconda delle caratteristiche della barra
if (O_Bar ==C_Bar) Color=Green;

switch(Line) // Linea sottile o spessa
{
caso 1: // linea sottile
ObjectCreate(His_Name,OBJ_TREND,0,T_Bar,H_Bar,T_Bar,L_Bar);
break; // Esci dall'interruttore
caso 2: // linea spessa
ObjectCreate(His_Name,OBJ_TREND,0,T_Bar,O_Bar,T_Bar,C_Bar);
ObjectSet( His_Name, OBJPROP_WIDTH, 3); // Stile
}
ObjectSet( His_Name,OBJPROP_COLOR,Color); // Color
ObjectSet( His_Name, OBJPROP_RAY, false); // Beam
ObjectSetText(His_Name, "Object was created by the Expert Advisor",10); // Descrizione
return; // Esci dalla funzione

}

Ed ecco cosa ho fatto (compila senza errori): (vedi anche il file allegato)

//-------------------------------------------------------------- 10 --
int Create(int Ind_Bar, int Line) // Funzione personalizzata...
{ // ...creazione di oggetti
Colore Colore; // colore dell'oggetto
datetime T_Bar=Time [Ind_Bar]; // tempo di apertura della barra
double O_Bar=Open [Ind_Bar]; // Prezzo di apertura della barra
double C_Bar=Close[Ind_Bar]; // Prezzo di chiusura di una barra
double H_Bar=High [Ind_Bar]; // Prezzo massimo della barra
double L_Bar=Low [Ind_Bar]; // Prezzo minimo della barra
//-------------------изменения---------------------------------------
double Macd_M_D1=iMACD(NULL,1440,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
// in alto - accesso al calcolo MAACD nei giorni della linea principale
double Macd_S_D1=iMACD(NULL,1440,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
// Questo è il riferimento al MACD e il calcolo della Signal Line nei giorni
double Macd_M_H4=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
// Questo è il riferimento al MACD e il calcolo della linea principale sul timeframe corrente
double Macd_S_H4=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
// Questo è il riferimento al MACD e il calcolo della linea di segnale al timeframe corrente

string Nom_Lin =Line + "_"; // Stringa - numero della linea
// string Nom_Lin = DoubleToStr(Line,0)+"_"; // Potete farlo in questo modo
string Str_Time=TimeToStr(T_Bar); // String - tempo aperto.
stringa His_Name=Prefix+Nom_Lin+Str_Time;// Nome dell'oggetto creato
se ((Macd_M_D1 < Macd_S_D1)&&(Macd_M_H4 < Macd_S_H4))Color=Blue;
se ((Macd_M_D1 > Macd_S_D1)&&(Macd_M_H4 > Macd_S_H4))Color=Red;
//
//if (O_Bar < C_Bar) Color=Blue; //Selezione del colore a seconda...
//if (O_Bar > C_Bar) Color=Red; // ... a seconda delle caratteristiche della barra
//if (O_Bar ==C_Bar) Color=Green;

//-------------------изменения---------------------------------------

L'obiettivo - se le letture MACD sul timeframe giornaliero e corrente sono simili - è di colorare la candela di rosso o di blu a seconda della direzione.

File:
 

Non potete dichiarare gli array in questo modo

datetime T_Bar=Time [Ind_Bar]; // Время открытия бара
double O_Bar=Open [Ind_Bar]; // Цена открытия бара
double C_Bar=Close[Ind_Bar]; // Цена закрытия бара
double H_Bar=High [Ind_Bar]; // Максимальная цена бара
double L_Bar=Low [Ind_Bar]; // Минимальная цена бара

Il compilatore vedrà che c'è una variabile al posto della dimensione dell'array. Semplicemente non saprà quanta memoria dovrebbe essere allocata per il futuro array. Ecco perché il tuo codice non funziona

 
drknn:

Non potete dichiarare gli array in questo modo

Il compilatore vedrà che c'è una variabile al posto della dimensione dell'array. Semplicemente non saprà quanta memoria dovrebbe essere allocata per il futuro array. Ed è per questo che il tuo codice non funziona

Il fatto è che non ho toccato quella parte dell'Expert Advisor - e ha funzionato bene - e la parte specificata del codice è stata presa dal tutorial MQL4 - qui https://c.mql4.com/book/mq4/experts/strings.mq4

 
victor417:

Il fatto è che non ho toccato questa parte dell'Expert Advisor - e tutto ha funzionato - e la parte di codice menzionata è presa dal tutorial MQL4 - qui https://c.mql4.com/book/mq4/experts/strings.mq4


Se è così che vengono dichiarati gli array nel tutorial, è piuttosto strano. Avresti evidenziato con un commento la parte di codice che TU hai contribuito.

Neanche io ho letto quel libro di testo. E qual è il ragionamento dell'autore dietro la legittimità della dichiarazione di schieramento?

 

Ho notato una strana caratteristica - più grande è il volume delle citazioni, più il tester rallenta... Se faccio partire il test dal 1999, va veloce, ma più mi avvicino al tempo presente, più i freni sono duri... 2008 e più vicino a "oggi" - impossibile da testare in modalità di visualizzazione a tutti.

Come si fa a combattere i freni del tester?

 

drknn:

Non potete dichiarare gli array in questo modo

datetime T_Bar=Time [Ind_Bar]; // Время открытия бара
double O_Bar=Open [Ind_Bar]; // Цена открытия бара
double C_Bar=Close[Ind_Bar]; // Цена закрытия бара
double H_Bar=High [Ind_Bar]; // Максимальная цена бара
double L_Bar=Low [Ind_Bar]; // Минимальная цена бара

Il compilatore vedrà che c'è una variabile al posto della dimensione dell'array. Semplicemente non saprà quanta memoria dovrebbe essere allocata per il futuro array. Ed è per questo che il vostro codice non funziona.

Se è così che vengono definiti gli array nel tutorial, è davvero strano. Avresti messo un commento sulla parte di codice che hai scritto?

Neanche io ho letto quel libro di testo. E qual è il ragionamento dell'autore dietro la legittimità della dichiarazione di schieramento?

Vedo l'inizializzazione delle variabili. Dove sono gli array?

Serie temporale? ;)

 
Ciao, qualcuno può fare un indicatore zigzag che si piega corrente ad una deviazione minima dal lowe alto ma in pips... Per esempio, se si imposta una deviazione di 50 pips, tutto meno di questo, è considerato rumore... Io davvero non so come cercare una roba kollichestvo così grande sul forum... Grazie in anticipo.
 

Potete dirmi per favore che ho un problema con il tester.

Il rapporto mostra che Total loss = 863 e max drawdown = 1427. come può essere?

Se guardate la curva di equilibrio - potete vedere che il massimo drawdown - 863.

Che tipo di glitch è questo, puoi dirmelo per favore, o forse è così che dovrebbe essere?

Grazie in anticipo)

 
Ciao, qualcuno può aggiungere un trailing stop qui; e lo stoploss è impostato in modo diverso ogni volta... Sistematelo per favore.
File:
a_sidus_1.mq4  5 kb
Motivazione: