Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 176
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
Lettura, ma non avrebbe mai immaginato di aprire il file prima del ciclo )
Forse non l'ho letto con attenzione )C'è un Expert Advisor, che è guidato dalla Pinbar durante il trading. Il robot funziona correttamente sulle valute e completamente imprevedibile sui CFD.
Potete per favore dirmi come questo può accadere?
Ho scritto un robot che si basa su Pinbar nel trading. Il robot funziona correttamente sulle valute e completamente imprevedibile sui CFD.
Potete per favore dirmi come questo può accadere?
Ecco la funzione di definizione di Pinbar
Quando la inserisco nell'Expert Advisor, la funzione funziona bene (cioè l'Expert Advisor imposta le operazioni sulla barra successiva a quella corrispondente alle condizioni della funzione) per le coppie di valute. Tuttavia, le transazioni su CFD sono aperte ovunque.
Qual è la differenza tra CFD e coppie di valute per questa funzione?
Ecco la funzione di definizione di Pinbar
Quando la inserisco nell'Expert Advisor, la funzione funziona bene (cioè l'Expert Advisor imposta le operazioni sulla barra successiva a quella corrispondente alle condizioni della funzione) per le coppie di valute. Tuttavia, le transazioni su CFD sono aperte ovunque.
Qual è la differenza tra CFD e coppie di valute per questa funzione?
Prima di tutto sostituisci tutti i && con {} in modo che ogni condizione fosse nel proprio blocco - poi puoi in ogni blocco srotolare il risultato testato - vedi nel log quali valori ottieni.
Grazie, ho seguito il consiglio e ho capito dove stavo sbagliando. Perché il mio EA si stava muovendo su 5 cifre e il CFD è solo 2 cifre e mi aspettavo che l'EA reagisse a 50 pips minimo e ho ottenuto la reazione da 5 pips. Ho fatto un casino.
Per favore, aiutatemi con questo aspetto.
C'è una parte simile nel codice:
MathAbs(Close1-Open1)/(High1-Low1)
A volte succede che High1=Low1. Il tester genera quindi l'errore critico dicendo che non può dividere per zero.
Come aggirare il problema?
Grazie, ho seguito il consiglio e ho capito dove stavo sbagliando. Perché il mio EA si stava muovendo su 5 cifre e il CFD è solo 2 cifre e mi aspettavo che l'EA reagisse a 50 pips minimo e ho ottenuto la reazione da 5 pips. Ho fatto un casino.
Per favore, aiutatemi con questo aspetto.
C'è una parte simile nel codice:
A volte succede che High1=Low1. Il tester genera quindi l'errore critico dicendo che non può dividere per zero.
Come aggirare il problema?
Puoi farlo senza pensare:
Ciao, ho riscontrato un problema durante la compilazione:
void OnTick()
{
doppio minprice=999999, mp, maxprice=-99999999;
for(int i=0; i<10; i++)
{
mp = iLow(Simbol(), PERIOD_CURRENT, i);
se (mp < minprice)
minprice = mp;
}
for(int i=0; i<10; i++)
{
mp = iHigh(Simbol(), PERIOD_CURRENT, i);
se (mp > maxprice)
maxprice = mp;
}
Comment("Minprice: " + DoubleToString(minprice, 5) + "\n "+
"Prezzo massimo: " + DoubleToString(maxprice, 5))
}
Il codice sorgente contiene funzioni che il compilatore giura con iLow e iHigh e la variabile Simbol() lì in modalità stringa, ma risolve un altro problema nell'esempio. Cosa devo correggere nel codice di cui sopra. Sono bloccato e non posso compilare il ciclo per controllarlo.
DAL LIBRO DI TESTO
Se volete ottenere il valore corrispondente alla barra incompleta corrente, allora
potete usare la prima forma della chiamata, specificando start_pos=0 e count=1.
Esempio:
#proprietà copyright "2009, MetaQuotes Software Corp."
#proprietà link "https://www.mql5.com"
#proprietà versione "1.00"
#property description "Esempio di output dei valori High[i] e Low[i]"
#property description "per barre scelte a caso"
doppio High[],Low[];
//+------------------------------------------------------------------+
//| Ottenere il minimo per un dato numero di barra
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
doppio basso=0;
ArraySetAsSeries(low,true);
int copied=CopyLow(simbolo,timeframe,0,Bars(simbolo,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
ritorno(basso);
}
//+------------------------------------------------------------------+
//| Ottenere il massimo per il numero di barra dato
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
doppio alto=0;
ArraySetAsSeries(high,true);
int copied=CopyHigh(simbolo,timeframe,0,Bars(simbolo,timeframe),High);
if(copied>0 && index<copied) high=High[index];
ritorno(alto);
}
//+------------------------------------------------------------------+
Ciao, ho riscontrato un problema durante la compilazione:
void OnTick()
{
doppio minprice=999999, mp, maxprice=-99999999;
for(int i=0; i<10; i++)
{
mp = iLow(Simbol(), PERIOD_CURRENT, i);
se (mp < minprice)
minprice = mp;
}
for(int i=0; i<10; i++)
{
mp = iHigh(Simbol(), PERIOD_CURRENT, i);
se (mp > maxprice)
maxprice = mp;
}
Comment("Minprice: " + DoubleToString(minprice, 5) + "\n "+
"Prezzo massimo: " + DoubleToString(maxprice, 5))
}
Il codice sorgente contiene funzioni che il compilatore giura di iLow e iHigh b variabile Simbol() è in modalità stringa lì, ma risolve un altro problema nell'esempio. Cosa devo correggere nel codice di cui sopra. Sono bloccato e non posso compilare il ciclo per controllarlo.
DAL LIBRO DI TESTO
Se volete ottenere il valore corrispondente alla barra incompleta corrente, allora
potete usare la prima forma della chiamata, specificando start_pos=0 e count=1.
Esempio:
#proprietà copyright "2009, MetaQuotes Software Corp."
#proprietà link "https://www.mql5.com"
#proprietà versione "1.00"
#property description "Esempio di output dei valori High[i] e Low[i]"
#property description "per barre scelte a caso"
doppio High[],Low[];
//+------------------------------------------------------------------+
//| Ottenere il minimo per un dato numero di barra
//+------------------------------------------------------------------+
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
doppio basso=0;
ArraySetAsSeries(low,true);
int copied=CopyLow(simbolo,timeframe,0,Bars(simbolo,timeframe),Low);
if(copied>0 && index<copied) low=Low[index];
ritorno(basso);
}
//+------------------------------------------------------------------+
//| Ottenere il massimo per il numero di barra dato
//+------------------------------------------------------------------+
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
{
doppio alto=0;
ArraySetAsSeries(high,true);
int copied=CopyHigh(simbolo,timeframe,0,Bars(simbolo,timeframe),High);
if(copied>0 && index<copied) high=High[index];
ritorno(alto);
}
//+------------------------------------------------------------------+
c'è un errore in questa parolaSimbol() si dovrebbe scrivere Symbol() o _Symbol
Avete un errore in questa parolaSimbol() - Symbol() o _Symbol dovrebbe essere scritto
Grazie, l'errore su Simbol è stato corretto scrivendo Symbol correttamente. Ho qualcosa che non va con le funzioni iLow e iHigh.
Ladifferenza in % tra MQL4 e MQL5 ? altrimenti dovrò grattarmi la testa ogni volta che ripasso i video tutorial di MQL4.