Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 672
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
In realtà, l'ho fatto, ma non mi piace il lungo tempo di risposta
Non è molto tempo, è un tick... ma in generale, hai bisogno di leggere la guida. Non puoi imparare MQL "provando", è basato su С++, ma è legato alla piattaforma МТТ, quindi devi studiare la guida.
Avete la gestione dei file e il lavoro con le variabili globali e la grafica nel vostro codice ... Ci sono un sacco di operazioni inutili su ogni tick
Se volete una risposta veloce, usate OnChartEvent(), non è generato nel tester, ma prima iniziate a studiare la guida di MQL4.
L'operazione non è lunga, è tick per tick... ma in generale, iniziate a leggere la guida, non potete imparare MQL per "pancia", MQL è basato su C++, ma è legato alla piattaforma MT, non potete farlo senza leggere la guida.
Avete la gestione dei file e il lavoro con le variabili globali e la grafica nel vostro codice ... Ci sono un sacco di operazioni inutili su ogni tick
Se volete un'esecuzione veloce, usate OnChartEvent(), non è generato nel tester, ma prima iniziate a studiare la guida di MQL4.
Ciao a tutti.
Ho trovato un utile indicatore Ind-Fractals nella libreria del codice. Tuttavia, disegna frattali su ogni barra, invece di calcolarli correttamente. Voglio usare questo indicatore, ma è "rotto" (( Aiutami a trovare un errore, ho provato a contattare l'autore, ma non risponde ai messaggi. Per comodità, codice duplicato qui.
#property copyright "Copyright © 2005, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"
//----
#proprietà indicator_chart_window
#proprietà indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Blue
#property indicator_color5 Lime
#proprietà indicator_color6 Lime
#property indicator_color7 Sienna
#property indicator_color8 Sienna
//---- parametri di ingresso
extern bool Comm=true;
//---- buffer
doppio ExtMapBuffer1[];
doppio ExtMapBuffer2[];
doppio ExtMapBuffer3[];
doppio ExtMapBuffer4[];
doppio ExtMapBuffer5[];
doppio ExtMapBuffer6[];
doppio ExtMapBuffer7[];
doppio ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
SetIndexStyle(0,DRAW_ARROW);//lo stile della linea dell'indicatore
SetIndexArrow(0,217); //prescrive il tipo di freccia
SetIndexBuffer(0,ExtMapBuffer1);//legare ilbuffer dell'indicatore con un array dinamico unidimensionale di tipo doppio. Ci sono 2 versioni della funzione.
SetIndexEmptyValue(0,0.0);//Imposta il valore vuoto per la linea dell'indicatore.
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,218);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,217);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,218);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexEmptyValue(3,0.0);
SetIndexStyle(4,DRAW_ARROW);
SetIndexArrow(4,217);
SetIndexBuffer(4,ExtMapBuffer5);
SetIndexEmptyValue(4,0.0);
SetIndexStyle(5,DRAW_ARROW);
SetIndexArrow(5,218);
SetIndexBuffer(5,ExtMapBuffer6);
SetIndexEmptyValue(5,0.0);
SetIndexStyle(6,DRAW_ARROW);
SetIndexArrow(6,217);
SetIndexBuffer(6,ExtMapBuffer7);
SetIndexEmptyValue(6,0.0);
SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(7,218);
SetIndexBuffer(7,ExtMapBuffer8);
SetIndexEmptyValue(7,0.0);
return(0); }
//+------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore Custor
//+------------------------------------------------------------------+
int deinit() {return(0); }
//------------------------------------------------------------------
bool Fractal(stringa F,int Per,int shift) {
se(Periodo()>Per) ritorno(-1);
Per=Per/Periodo()*2+MathCeil(Per/Periodo()/2);
se(shift<Per)ritorno(-1);
se(shift>Bars-Per)return(-1);
for(int i=1;i<=Per;i++) {
if(shift+i>=Bars || shift-i<0) return(-1);
se(F=="U") {
se(Alto[shift+i]>Alto[shift])ritorna(-1);
se(High[shift-i]>=High[shift])return(-1); }
se(F=="L") {
se(Low[shift+i]<Low[shift])ritorna(-1);
if(Low[shift-i]<=Low[shift])return(-1); } } }
return(1); }
//------------------------------------------------------------------
int start()
{
int D1=1440,H4=240,H1=60,M15=15,B;
doppio P;
int counted_bars=IndicatorCounted();// numero di barre invariate dopo l'ultima chiamata dell'indicatore
B=Bars-counted_bars;
if(counted_bars==0) B--;
if(Periodo()==D1)P=150*Punto;// periodo restituisce il periodo corrente del grafico
se(Periodo()==H4)P=70*Punto;
if(Periodo()==H1)P=40*Punto;
if(Period()==30)P=30*Point;
if(Periodo()==M15)P=20*Punto;
if(Periodo()==5)P=10*Punto;
if(Periodo()==1)P=5*Punto;
for(int shift=B;shift>0;shift--)
{
if(Fractal("U",M15,shift)==1) ExtMapBuffer1[shift]=High[shift]+P;
altrimenti ExtMapBuffer1[shift]=0;
if(Fractal("L",M15,shift)==1) ExtMapBuffer2[shift]=Low[shift]-P;
altrimenti ExtMapBuffer2[shift]=0;
if(Fractal("U",H1,shift)==1) ExtMapBuffer3[shift]=High[shift]+P;
altrimenti ExtMapBuffer3[shift]=0;
if(Fractal("L",H1,shift)==1) ExtMapBuffer4[shift]=Low[shift]-P;
altrimenti ExtMapBuffer4[shift]=0;
if(Fractal("U",H4,shift)==1) ExtMapBuffer5[shift]=High[shift]+P;
altrimenti ExtMapBuffer5[shift]=0;
if(Fractal("L",H4,shift)==1) ExtMapBuffer6[shift]=Low[shift]-P;
altrimenti ExtMapBuffer6[shift]=0;
if(Fractal("U",D1,shift)==1) ExtMapBuffer7[shift]=High[shift]+P;
altrimenti ExtMapBuffer7[shift]=0;
if(Fractal("L",D1,shift)==1) ExtMapBuffer8[shift]=Low[shift]-P;
altrimenti ExtMapBuffer8[shift]=0;
}
if(Comm) Comment("D1 - marrone\n H4 - verde\n H1 - blu\nM15 - rosso ");
ritorno(0);
}
Sono stato rimproverato qui per questo tipo di codice, è la prima volta che mi capita :-)
Il codice dovrebbe essere inserito in un modulo che si apre con Alt+S.
Sono stato rimproverato qui per questo tipo di codice, è la prima volta che mi capita :-)
Devi incollare il codice in un modulo che si apre con Alt+S.
Viene rimproverato? Non in alcun modo. Scrivete il codice come volete. Ma... se vuoi una risposta alla tua domanda, cerca di rispettare coloro a cui stai chiedendo aiuto. È così semplice.
Forum sul trading, sistemi di trading automatico e test di strategia
Qualsiasi domanda per i neofiti su MQL4, aiuto e discussione su algoritmi e codici
Artyom Trishkin, 2018.10.18 08:07
Mettiamola così: create un modello di indicatore nell'editor, aggiungete il giusto numero di variabili di input e buffer di disegno quando lo create.
Successivamente, analizziamo cosa fare dal compito specifico.
L'ho fatto l'ultima volta, ho solo cambiato il nome della variabile e dell'array.
Quando si usa iMA funziona solo su settimane e daires, dove la candela contiene più di 100 punti, non fa nulla su timeframes inferiori. La ragione sembra essere l'arrotondamento.
Se si usa iMAOnArray, la finestra i-ras è vuota in tutti i TF. Non ci sono errori nel registro.
Se si usa iMAOnArray, la finestra i-ra è vuota su tutti i TF. Non ci sono errori nel registro.
State usando iMAOnArray() con periodo 1, cioè il valore di iMAOnArray() sarà essenzialmente il valore dell'array tmp1
Se volete capire cosa state calcolando, accorciate il ciclofor(i=1; i<10; i++)
e staccate tutti i dati che volete calcolare, anche se potrebbe essere più facile non calcolare qualche formula complessa, ma usare iMAOnArray() per costruire iMA e iMAOnArray() - sia iMA che iMAOnArray() sono gli stessi calcoli.... ahimè, se puoi ottenere una risposta a una domanda tecnica su questo forum, solo tu dovresti imparare a calcolare e trattare le informazioni.
L'ultima volta che l'ho fatto, ho solo cambiato il nome della variabile e dell'array.
Quando si usa iMA i-r ha lavorato solo su settimane e giorni, dove c'è più di 100 punti in una candela, non disegna nulla sui TF inferiori. La ragione sembra essere l'arrotondamento.
Se si usa iMAOnArray, la finestra i-ras è vuota in tutti i TF. Non ci sono errori nel registro.
Il primo ciclo calcola i valori del primo buffer;
Il secondo ciclo calcola il MA in base ai valori calcolati nel primo ciclo.
Considerate cosa significa iMAOnArray(). Scrivere MA su Array. Come si traduce? Tutti hanno un traduttore di Google a portata di mano. Mettere-tradurre-ricevere: MA su Array.
Significa che è una media mobile basata su una matrice calcolata e riempita in modo preliminare.
Corrispondentemente: il primo ciclo - preparazione dell'array necessario, e il secondo ciclo - costruzione di una media mobile basata sull'array preparato nel primo ciclo.
E tu cosa fai? Si inserisce un valore nel primo array (gli altri valori non sono ancora stati preparati) e si cerca di costruire il MA su questo valore.
Ti ho dato un modello:
Forum sul trading, sistemi di trading automatico e test di strategia
Qualsiasi domanda, aiuto e discussione su algoritmi e codici per i principianti di MQL4
Artyom Trishkin, 2018.10.18 09:39
Indicatore:
Puoi buttare via tutto ciò che riguarda i cinque e ottenere un modello per i quattro. Anche se questo modello è multipiattaforma - puoi usarlo per entrambi i terminali - basta impostare i buffer e il loro numero. In questo modello ci sono due disegni e un calcolo, che possono essere visti qui:
=anchevoi usate iMAOnArray() con periodo 1, cioè il valore di iMAOnArray() sarà essenzialmente il valore dell'array tmp1
Ho provato diversi valori da usare, 1 rimane come ultima variante di questi esperimenti.
Per qualche ragione, ip1Buf[4] = 2147483647.0 scrive lo stesso numero nel buffer i-r su tutti i TF, per esempio, mentre i valori dell'array sono tutti diversi tmp1[4] = 0.1300000000000097, ecc.
Ma anche in questo caso si dovrebbe tracciare una linea retta, e non c'è assolutamente nulla sul grafico i-r, la scala è segnata da 0 a 0.
=anchevoi usate iMAOnArray() con periodo 1, cioè il valore di iMAOnArray() sarà essenzialmente il valore dell'array tmp1
Ho provato diversi valori da usare, 1 rimane come ultima variante di questi esperimenti.
Per qualche ragione, lo stesso numero viene scritto nel buffer i-ras su tutti i TF, per esempio ip1Buf[4] = 2147483647.0, anche se i valori dell'array sono tutti diversi tmp1[4] = 0.1300000000000097, ecc.
Ma anche in questo caso si dovrebbe tracciare una linea retta, e non c'è assolutamente nulla sul grafico i-r, la scala è segnata da 0 a 0.
2147483647.0 Bene iniziare a usare il motore di ricerca!https://www.mql5.com/ru/forum/224831
Ancora una volta, ho appena scritto Artem, devi leggerlo tu stesso, inizia con un semplice... Disegnare un prezzo di chiusura su un grafico con un indicatore, poi provare a renderlo più complicato, fare lo stesso in un ciclo e nel secondo ciclo fare il calcolo МА basato sul buffer già calcolato dove si trova la chiusura