Discussione sull’articolo "L'uso delle Librerie MQL5 Standard Trade Class nella scrittura di un Expert Advisor"
Articolo molto utile per me. Tutto è molto più facile se si usano le librerie!
Richiesta agli sviluppatori: scrivete una classe per lavorare con High[i] , Low[i]. Open[i], Close[i]. Penso che questa classe sarà utile a tutti! Ho risolto questo problema da solo, ma non sono sicuro che sia corretto, perché i test richiedono molto tempo....
#include <Indicators\Series.mqh> double High[]; CiHigh z;
perché questo codice dà un errore
'1.mq5' 1.mq5 1 1
'Series.mqh' Series.mqh 1 1
'ArrayObj.mqh' ArrayObj.mqh 1 1
'Array.mqh' Array.mqh 1 1
'Object.mqh' Object.mqh 1 1
'StdLibErr.mqh' StdLibErr.mqh 1 1
'ArrayDouble.mqh' ArrayDouble.mqh 1 1
'CiHigh' - dichiarazione senza tipo 1.mq5 12 2
1 errore/i, 0 avviso/i 2 1
se non è difficile scrivere come ottenere
Stampa High[2], per esempio.
perché questo codice dà un errore
se non è difficile, si prega di scrivere come ottenere
Stampare High[2], ad esempio.
c'è un errore di stampa nella documentazione. Questa classe si trova nel file TimeSeries.mqh.
Esempio di utilizzo (lo script stampa gli ultimi tre massimi del grafico corrente):
#include <Indicators\TimeSeries.mqh> //+------------------------------------------------------------------+ //| Funzione di avvio del programma di script| //+------------------------------------------------------------------+ void OnStart() { //--- double High[]; CiHigh z; int count=3; if(z.Create(_Symbol,_Period)==true) { if(z.GetData(0,count,High)==count) { for(int i=0; i<count; i++) Print(i,"=",High[i]); } else Print("Fallito il recupero di ",count," dati di serie temporali".); } else Print("Errore nella creazione di serie temporali".); } //+------------------------------------------------------------------+
c'è un errore di stampa nella documentazione. Questa classe si trova nel file TimeSeries.mqh.
Esempio di utilizzo (lo script produce gli ultimi tre massimi del grafico corrente):
Capisco che ognuno programma per se stesso e per le sue esigenze, ma fondamentalmente non mi piace il gruppo di classi di serie temporali, perché fondamentalmente consistono tutte in un metodo e in una parte descrittiva più che funzionale, e di solito è necessario avere tutte le serie temporali per un particolare strumento, ho fatto una classe in cui ci sono tutte le serie temporali per lo strumento necessario, nei metodi è fatta la storia di paginazione, approssimativamente come questo:
struct str_bars{ datetime time[]; // Array Timeseries contenente l'ora di apertura di ogni barra del grafico corrente double open[]; // Array Timeseries contenente i prezzi di apertura di ogni barra del grafico corrente. double close[]; // Array Timeseries contenente i prezzi di chiusura di ogni barra del grafico corrente. double high[]; // Array Timeseries contenente i prezzi massimi di ogni barra del grafico corrente. double low[]; // Un array di serie temporali contenente i prezzi minimi di ogni barra del grafico corrente. }; struct str_info{ double point; // Dimensione del punto dello strumento corrente nella valuta di quotazione int spread; // Spread attuale }; //____________________________________________________________________ class currency { public: //---- данные MqlTick TICK; // dati di tick str_bars BAR; // dati della serie temporale str_info INFO; // informazioni sullo strumento int error; //---- методы int create(string sym,ENUM_TIMEFRAMES period, int numbars); int refresh(void); private: string symbol; ENUM_TIMEFRAMES per; int num; datetime lastbar_time; int tmpint1,tmpint2; int ch_load(void); }; //____________________________________________________________________
Lavoro con la mia classe solo nella parte di dati già preparati, e naturalmente la classe stessa riceve i dati chiamando il metodo refresh()
c'è un'imprecisione nell'articolo
double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); // prezzo del lotto/numero di margini richiesti
dovrebbe essere
double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price); //--- prezzo del lotto/numero di margine richiesto
Ottimo articolo. Grazie all'autore. Vorrei anche scrivere un controllo dello Stop_Level prima di piazzare un ordine, e un controllo del valore dello spread. Il fatto è che se lo spread è fluttuante, allora a valori elevati non si può entrare nel mercato, perché non è redditizio. Questo aiuterà l'Expert Advisor a non operare durante le notizie. Vorrei anche controllare la deviazione - il ragionamento è simile. C'è anche una domanda sulla libreria: cos'è una funzione (che tipo di processo denota e descrive)?
Livello di congelamento
Ottiene la distanza delle operazioni di congelamento in punti.
int FreezeLevel() const |
in un linguaggio semplice - per favore spiegatelo se lo conoscete.
E un'altra domanda. Possiamo scoprire i limiti, ad esempio lo Stop_Level al momento attuale (diciamo 10 punti). Inseriamo un ordine pendente con SL=10 punti. Dopo, ad esempio, un'ora il prezzo raggiunge il prezzo specificato nell'ordine, ma lo Stop_Level in questo momento è pari, ad esempio, a 15 pip. Cosa succederà: l'ordine pendente funzionerà o sarà respinto? Inoltre, quando il prezzo raggiunge il prezzo specificato nell'ordine, ma lo spread è cambiato - significa che l'entrata o l'uscita è possibile a un prezzo peggiore rispetto a quello previsto al momento dell'apertura dell'ordine, oppure l'ordine non funzionerà affatto?
Cosa sto facendo di sbagliato? Perché il Bid non viene stampato?
Ecco il log del lavoro
2011.01.31 20:20:18 00(EURUSD,M1) EURUSD 0
Ecco il codice
#include <Trade\SymbolInfo.mqh> //--- Classe CSymbolInfo CSymbolInfo my_symbol; //--- Oggetto della classe CSymbolInfo //+------------------------------------------------------------------+ //| Funzione di inizializzazione dell'esperto| //+------------------------------------------------------------------+ int OnInit() { return(0); } //+------------------------------------------------------------------+ //| Funzione di deinizializzazione dell'esperto| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Funzione tick dell'esperto| //+------------------------------------------------------------------+ void OnTick() { my_symbol.Name(_Symbol); my_symbol.Refresh(); Print(_Symbol," ",my_symbol.Bid()); } //+------------------------------------------------------------------+

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Il nuovo articolo L'uso delle Librerie MQL5 Standard Trade Class nella scrittura di un Expert Advisor è stato pubblicato:
Questo articolo spiega come utilizzare le principali funzionalità di MQL5 Standard Trade Class nella scrittura di Expert Advisor che implementano la chiusura e la modifica della posizione, l'immissione e l'eliminazione di ordini in sospeso e la verifica del margine prima di piazzare un trade. Abbiamo anche dimostrato come le classi di trading possono essere utilizzate per ottenere dettagli su ordini e transazioni.
Finora abbiamo visto come possiamo utilizzare le librerie di classi di trading per scrivere un Expert Advisor. La prossima cosa è testare il nostro Expert Advisor con lo Strategy Tester e vederne le prestazioni.
Compila il codice EA e poi caricalo nello Strategy Tester.
Figura 3. Report di compilazione di Expert Advisor
Sul grafico GBPUSD giornaliero utilizzando le impostazioni predefinite: Take Profit - 270, Stop Loss - 100 e Trails Point (TP/SL) - 32, avremo i seguenti risultati:
Figura 4. Rapporto di prova di Expert Advisor - Grafico giornaliero GBPUSD
Autore: Samuel Olowoyo