[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 674
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
https://www.mql5.com/ru/forum/491
Grazie.
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.
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. Ecco perché il tuo codice non funziona
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
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
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? ;)
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)