Announcement

Collapse
No announcement yet.

Corsi programmazione MQL avanzati

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Corsi programmazione MQL avanzati

    Ciao a tutti, vorrei sapere se conoscete qualcuno che fa i corsi di programmazione MQL avanzati, sopratutto sulla parte di programmazione che collega la mt4 ad un sito/foglio excell. Sopratutto la parte per la creazione degli EA che prendono varie informazione da qualsiasi sito e in base a quelle, fanno quello che devono. Qualcuno è esperto in quel campo? Grazie

    Non so se dovevo inserire l'annuncio sulla parte commerciale, se è così, chiedo scusa.

    #2
    Non mi considero un esperto del campo "comunicazione" tra MT4 e altri programmi...
    Ho giusto creato qualche EA in passato, nulla di più.:23.itwasntme_80_ani

    In qualsiasi caso, le "comunicazioni" con programmi esterni possono avvenire solo con l'ausilio di librerie (DLL).

    Se vuoi comunicare tra MT4 ed Excel, sul sito ufficiale dell'MQL4 c'è: MS Excel: Data Exchange and Management.
    Ottima DLL (mt4excel.dll), ci ho lavorato in passato con Excel 2003, 2007, 2010 e 2012 senza problemi.
    L'ho usata molto e continuo ad usarla...:01.smile_80_anim_gi

    Per la lettura di informazioni su un sito da parte di un EA, la DLL che devi usare è già presente su Windows.
    Si chiama wininet.dll e al suo interno ci sono tutte le funzioni per comunicare con un sito.
    Le informazioni e gli esempi sull'utilizzo di questa libreria sono immense anche solo facendo una ricerca su Google.
    Ho usato questa DLL in passato per acquisire alcune informazioni semplici da siti web e funziona bene.

    Per quanto riguarda la tua richiesta, purtroppo non conosco nessun esperto di questo "campo".
    Usare una libreria in MQL4 è comunque una cosa semplice, di solito.:14.wondering_80_ani
    Skype: cadddami

    Comment


      #3
      Ciao Caddami, sempre disponibile. Beh allora inizio a vedere da me le librerie. Pensando che a febbraio l'anno scorso non sapevo niente di programmazione, adesso riesco a creare degli EA/indicatori da solo e questo grazie anche a te che mi hai aiutato molto ancora nel vecchio forum Cmq se hai e puoi mettere qualche EA di esempio per prendere spunto, e capire un pò la logica, mi sarà sicuramente di grande aiuto. Grazie ancora

      Comment


        #4
        Provo a scriverti il codice di un EA che esporta ogni informazioni dei tick che riceve la MT4 su Excel.:01.smile_80_anim_gi
        Ogni tick viene messo su una riga, quindi man mano che riceve tick il file si allunga.

        Nell'esempio importo solo alcune delle funzioni che la libreria mette a disposizione (comunque nel link del mio post precedente c'è scritto tutto).
        Ti allego anche l'EA al post.
        Ecco l'esempio:
        Code:
        //Importo le funzioni dalla libreria.
        #import "mt4excel.dll"
           bool    ExcelOpen();
           bool    ExcelClose();
           bool    ExcelOpenFile(char &FileName[]);
           bool    ExcelSave();
           bool    ExcelSaveAs(char &FileName[]);
           bool    ExcelAddSheet(char &Name[]);
           double  ExcelGetValueCell(int X,int Y);
           string  ExcelGetTextCell(int X,int Y);
           string  ExcelGetFormulaCell(int X,int Y);
           bool    ExcelSetValueCell(int X,int Y,double Value);
           bool    ExcelSetTextCell(int X,int Y,char &Value[]);
           string  ExcelGetLastErrorText();
        #import
        //+------------------------------------------------------------------+
        //| Variabili globali                                                |
        //+------------------------------------------------------------------+
        int Riga;
        //+------------------------------------------------------------------+
        //| Expert initialization function                                   |
        //+------------------------------------------------------------------+
        int OnInit()
          {
           ExcelOpen(); //Apro il file.
          
           //Preparo i vettori.
           char valuta[],data[],orario[],ask[],bid[],volume[];
          
           //Trasformo le stringhe in vettori di caratteri.
           StringToCharArray("Valuta",valuta);
           StringToCharArray("Data",data);
           StringToCharArray("Orario",orario);
           StringToCharArray("Ask",ask);
           StringToCharArray("Bid",bid);
           StringToCharArray("Volume",volume);
          
           //Scrivo il nome di ogni colonna.
           ExcelSetTextCell(1,1,valuta);
           ExcelSetTextCell(1,2,data);
           ExcelSetTextCell(1,3,orario);
           ExcelSetTextCell(1,4,ask);
           ExcelSetTextCell(1,5,bid);
           ExcelSetTextCell(1,6,volume);
           //Aggiorno la riga.
           Riga=2;
           return(INIT_SUCCEEDED);
          }
        //+------------------------------------------------------------------+
        //| Expert deinitialization function                                 |
        //+------------------------------------------------------------------+
        void OnDeinit(const int reason)
          {
           //Preparo il vettore.
           char cartella[];
          
           //Trasformo la stringa in un vettore di caratteri.
           StringToCharArray("C:\\Users\\Damiano\\Desktop\\Tick.xlsx",cartella);
          
           //Salvo il file nella cartella specificata.
           ExcelSaveAs(cartella);
           //Chiudo il file.
           ExcelClose();
          }
        //+------------------------------------------------------------------+
        //| Expert tick function                                             |
        //+------------------------------------------------------------------+
        void OnTick()
          {
           //Preparo i vettori.
           char simbolo[],data[],orario[];
          
           //Trasformo le stringhe in vettori di caratteri.
           StringToCharArray(Symbol(),simbolo);
           StringToCharArray(TimeToStr(TimeCurrent(),TIME_DATE),data);
           StringToCharArray(TimeToStr(TimeCurrent(),TIME_MINUTES|TIME_SECONDS),orario);
          
           //Scrivo i dati sul file.
           ExcelSetTextCell(Riga,1,simbolo);
           ExcelSetTextCell(Riga,2,data);
           ExcelSetTextCell(Riga,3,orario);
           ExcelSetValueCell(Riga,4,Ask);
           ExcelSetValueCell(Riga,5,Bid);
           ExcelSetValueCell(Riga,6,Volume[0]);
           //Aggiorno la riga.
           Riga++;
          }
        Questo è un EA semplice semplice, completo e funzionante (non sono nemmeno 100 righe di codice).
        Ricordati che per farlo funzionare bene devi cambiare l'indirizzo (directory) che vedi nella OnDeinit().

        Come vedi dal codice, quando passi una stringa ad una funzione importata da DLL, devi prima trasformarla in una stringa di caratteri (char).
        Questo perché la MT4 dalla build 600 in poi usa la codifica UNICODE per l'invio di stringhe (prima usava la codifica ASCII, quindi potevi passare la stringa normalmente).
        Fortunatamente l'MQL4 ha già una per traformare le stringhe in vettori di caratteri chiamata (come vedi dall'esempio di codice sopra) StringToCharArray().

        Quindi siccome tutti gli esempi di importazione di funzioni dal librerie sono sempre obsoleti (come quelli del link) ti devi ricordare di aggiornarli.
        Ti faccio un esempio.
        Nel link del mio post precedente, queste 3 funzioni che hanno come parametri delle stringhe vengono importate così:
        Code:
        bool ExcelOpenFile(string FileName);
        bool ExcelSaveAs(string FileName);
        bool ExcelAddSheet(string Name);
        Questo tipo d'importazione va bene solo per la codifica ASCII.
        Per la codifica UNICODE devi modificare i parametri così:
        Code:
        bool ExcelOpenFile(char &FileName[]);
        bool ExcelSaveAs(char &FileName[]);
        bool ExcelAddSheet(char &Name[]);
        Questa modifica la devi fare con qualsiasi DLL che usi con l'MQL4.
        Come puoi vedere, ogni parametro è diventato da string a char, il passaggio del parametro non avviene più per valore ma per referenza (&) e con un vettore ([]) al posto della variabile.
        Se questa mia ultima riga non ti è chiara, questo è il link alla guida sul passaggio dei parametri.

        Non ho più appunti da fare, divertiti con l'EA.:01.smile_80_anim_gi

        Per quanto riguarda la lettura di informazioni da un sito, attualmente non ho sottomano nulla che possa essere utile come esempio facile.
        Comunque della wininet si trova un sacco di materiale in giro.:05.wink_80_anim_gif
        Attached Files
        Skype: cadddami

        Comment


          #5
          Grazie Damiano! Utilissimo!

          ​Invece per "copiare" un trade, quando viene eseguito, da una metatrader ad un'altra e' possibile ? Bisogna sempre usare le dll o si puo' fare anche tramite semplice codice mql? Ho trovato pochi riferimenti in rete...solo qualche EA pronto (ma senza codice)

          Grazie!
          sten

          Comment


            #6
            Sì, purtroppo con il solo MQL4 non lo puoi fare.
            Non credo ci siano altre alternative alle DLL per la comunicazione tra 2 EA (uno su ogni MT4).
            Skype: cadddami

            Comment

            Working...
            X