Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 252
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
> err=StringToInteger((string)err)
questo dovrebbe entrare negli annali ;-)
originariamente in err hai ovviamente ottenuto int da GetLastError(). Converte il codice di errore in una descrizione leggibile ErrorDescription(err); a condizione che #include <stdlib.mqh> sia abilitato.
ma il modo in cui è scritto è una seccatura.
PS/ E non imparare la programmazione MQL. MQL 4 e 5 sono linguaggi di destinazione per una piattaforma particolare.
Puoi dirmi per favore se puoi scriverlo in questo modo. non vuole aprire le transazioni. forse il formato dei numeri calcolati è sbagliato? o altri difetti nel codice?
doppio TakeLong(double shp)
{
int CurrentDayRange=0, fiveDayATR=0, take=0;
doppio TP_ATR=0;
//////Pivot ingressi
doppio P, S1, R1, S2, R2, S3, R3;
doppio LastHigh, LastLow, x;
int counted_bars = IndicatorCounted();
limite int, i;
shp=iHigh(Symbol(),PERIOD_D1,0);
//---- Calcolo dell'indicatore Pivot
if(counted_bars == 0)
{
x = Periodo();
se(x > 240)
ritorno(-1);
}
se(barre contate < 0)
ritorno(-1);
limite = (Bars - counted_bars) - 1;
//----
for(i = limite; i >= 0; i--)
{
se(Alto[i+1] > UltimoAlto)
LastHigh = High[i+1];
//----
se(Basso[i+1] < UltimoBasso)
LastLow=Low[i+1];
if(TimeDay(Time[i]) != TimeDay(Time[i+1])
{
P = (LastHigh + LastLow + Close[i+1]) / 3;
R1 = (2*P) - LastLow;
S1 = (2*P) - LastHigh;
R2 = P + (LastHigh - LastLow);
S2 = P - (LastHigh - LastLow);
R3 = (2*P) + (LastHigh - (2*LastLow));
S3 = (2*P) - ((2* LastHigh) - LastLow);
LastLow = Open[i];
LastHigh = Open[i];
}
}
////ATR calcolo
per (i=1;i<6;i++)
{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));}
FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits());
CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i));
se(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; altrimenti TP_ATR=0;
if (Bid>R1 && TP_ATR==0) take=shp;
else if (Bid<R1 && R1<TP_ATR) take=R1;
else take=TP_ATR;
return(take);
}
Il codice suggerito sembra un indicatore. Le operazioni vengono aperte da un Expert Advisor o da uno script. La chiamata alla funzione OrderSend non è consentita nell'indicatore. L'indicatore può allarmare - inserire la funzione Alert call o sound nel posto appropriato
Il codice proposto è simile all'indicatore. Le operazioni vengono aperte da un Expert Advisor o da uno script. La chiamata alla funzione OrderSend è vietata nell'indicatore. L'indicatore può segnalare - inserire la chiamata della funzione Alert o il suono nel posto appropriato
Questo è il codice di definizione del TP, che invia il risultato a OrderSend. senza questo complesso algoritmo, i trade vengono inviati, ma non c'è modo di inviarli. chiamo la funzione TP = TakeLong(SHP);
Ci sono molti modi di fare il debugging - il processo di trovare un errore quando si è stabilito che ce n'è uno. Il primo è F5 - avvia il debug in MetsEditor. 2) usa Alerts per tracciare l'esecuzione. 3 e 4) emettono informazioni di debug nelle etichette di testo e nella funzione Comment. Scegliete il modo conveniente e fate il debug di questa semplice funzione - poi diventerete un programmatore. Un programma con migliaia di linee è considerato complesso.
Puoi dirmi per favore se puoi scriverlo in questo modo. non vuole aprire le transazioni. forse il formato dei numeri calcolati è sbagliato? o qualche altro difetto nel codice?
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
Nel codice completo appare così
double Close1 = iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1);
MathAbs( Close1[i] - Open1[i] ) / Punto + 1
MathAbs( Close2[i] - Open2[i] ) / Punto + 1
if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if (Close1 > Open1 && Close2 < Open2){
SELL();
}
È corretto? Come faccio a farlo funzionare?
Hai provato sul conto demo M1? Cosa si ottiene?
Avete provato su un conto demo M1? Come funziona?
Puoi dirmi perché il trawl si attiva ad ogni tick?