Unisciti alla nostra fan page
- Pubblicati da::
- Michael Schoen
- Visualizzazioni:
- 17
- Valutazioni:
- Pubblicato:
-
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Per caso mi sono imbattuto in MQL5 e sono stato costretto a mettere insieme una libreria MySQL. Come per ogni libreria, spero che gli esempi mostrino come la libreria può essere utilizzata. Come per ogni libreria in realtà la cosa più importante sono gli esempi di utilizzo ;)
Esempi:
Lettura dei dati
#include <EAX\EAX_Mysql.mqh> EAX_Mysql *db = new EAX_Mysql(); db.connect("myhost.mydomain.com", "myusername", "mypassword", "mydatabase", "mytable"); int iResults = db.read_rows("SELECT password, COUNT(*) as Hits FROM users GROUP BY password"); for (int i=0; i < iResults; i++) { string password = (string) db.get("password",i); int hits = (int) db.get("Hits", i); }
Alimentazione dei dati
#include <EAX\EAX_Mysql.mqh> // globale EAX_Mysql *db = new EAX_Mysql(); void OnInit() { db.connect("myhost.mydomain.com", "myusername", "mypassword", "metatrader", "Ticks"; } void OnTick() { MqlTick tick; SymbolInfoTick(_Symbol,tick); // Aggiungere un nuovo set di dati per la tabella Ticks db.AddNew("Ticks"); // riempire con valori... db.set("symbol", _Symbol); // È possibile inviare le cifre ai campi del DB se MySQL è in grado di convertirle. db.set("ask", tick.ask); db.set("bid", tick.bid); db.set("last", tick.last); db.set("time", TimeToString(tick.time,TIME_DATE) + " " + TimeToString(tick.time,TIME_SECONDS)); db.set("volume", tick.volume); db.write(); } void OnDeinit() { // pulire la memoria delete db; }
Interazione con i dati
EAX_Mysql *db = new EAX_Mysql(); db.connect("myhost.mydomain.com", "myusername", "mypassword", "metatrader", "mytable") // Selezionare la tabella AgentiOnline (necessario per identificare la chiave primaria corretta) db.select("AgentsOnline"); // Leggere l'insieme di dati con la chiave primaria 5 db.read("5"); // modificare qualsiasi colonna, db.set("lastupdate", (string) TimeLocal()); // scriverlo di nuovo db.write();
Installazione:
- Identificare la directory dei dati MQL5 (MQL5).
- Scaricare Connector/C (libmysql) per il vostro ambiente MetaTrader (32 o 64 bit) e inserire libymsql.dll in "MQL5\Libraries".
- creare una cartella EAX sotto Include.
- Inserire EAX_Mysql.mqh in "MQL5\Include\EAX".
Problemi:
- Poiché utilizza internamente un puntatore di connessione condiviso, la libreria non può gestire più di una connessione DB alla volta (non avevo bisogno di aggiungere/migrare un pooling di connessioni).
- nessuna gestione di errori reali (mysql), che facciano cadere la connessione al db.
- nessuna gestione degli errori/riconnessione al DB (=> db pooling).
- nessun supporto per le chiavi primarie a più colonne.
- Ancora in fase beta - inviatemi un'email se volete fare un beta/test.
- I tipi di dati non sono gestiti (internamente sono solo stringhe), ma devono essere gestiti dal codice/dal database.
- La comunicazione con il database è ISO - troppo pigro per adattare l'aritmetica dei puntatori e delle stringhe all'UTF-8.
Crediti:
- http://mqlmagazine.com/mql-programming/mql5-connecting-to-mysql/
- https://www.mql5.com/it/articles/364
Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/855
ExtObjects
Funzioni dedicate per leggere e scrivere le proprietà degli oggetti.
Candle ZigZag
Candle ZigZag è un indicatore che cambia la sua gamba se cambia il colore di una candela.
Mostra livello giorno aperto
Indicatore che visualizza il livello di apertura del giorno su qualsiasi TF
iMio
Nella rappresentazione grafica, la techanalysis rappresenta la linea di tendenza a destra delle candele sul breakdown (in verde). Dopo il breakdown, si ipotizza il movimento lungo la linea rossa.