Discussione su "Come scrivere una DLL per MQL5 e scambiare dati in 10 minuti". - pagina 7

 

pisara:

...IMHO lo sviluppo del linguaggio di scrittura MT dovrebbe servire ai compiti specifici del commercio, cioè raccolta di informazioni, analisi, test, gestione del commercio e integrazione con altri sistemi - tutto questo può e IMHO dovrebbe essere fatto ad un alto livello di strumenti di sviluppo moderni, cioè integrando ed estendendo il framework standard selezionato usando metodi generalmente accettati in esso (OOP, ecc.). Il compito non è quello di scrivere una piattaforma chiusa e autosufficiente su un mix di C/C++ o altro, ma, prima di tutto, di scrivere le basi della piattaforma di trading, i suoi servizi, API e interfaccia utente...

Moe IMHO è in completo accordo con il tuo IMHO. È bello esporre persone che la pensano come te. Associo MT al proverbio "il diavolo si annida nelle piccole cose" e sospetto gravi difetti architettonici, altrimenti perché ci sono così tanti "mattoni" - "Hey cittadino! Non andare lì, vai qui! Altrimenti la neve ti cadrà sulla testa - sarai completamente morto!".

Allo stesso tempo, bisogna ammettere che MT non è affatto il peggior prodotto con cui ho avuto a che fare.

 

Renat писал(а) :

....MQL4.community ha già degli articoli sull'interazione Matad - MetaTrader 4:


Forse mi è sfuggito qualcosa, o forse ti è sfuggito qualcosa. Non riesco a trovare alcun articolo sull'interazione tra Matkad e MT4. Sì, ho Matlab. Non ho Matcad ((.

Una volta ho ordinato MT4B<-> Matcad link ai programmatori. L'unico accettabile (stabile) era la comunicazione tramite operazioni su file. MT4-scrive le quotazioni in un file-Matkad legge-elabora-inserisce i risultati in un file (acquisto/vendita di valuta)-MT4 legge ed esegue. Ma a volte si blocca per ragioni sconosciute... ha trascorso più di 3 mesi ma ancora non è riuscito a risolvere il problema.

Da un lato il tuo desiderio di fare tutto in un unico pacchetto, sì, bene e buono. È la stabilità e l'affidabilità del sistema.

Ma d'altra parte ci sono linguaggi di programmazione di alto livello (Matlab, Matcad) per i quali è già stato scritto molto, speso miliardi di anni umani. E collegare questa potenza a MT5 sarebbe fantastico. Non hai abbastanza forza o capacità per raggiungere il livello di queste lingue...

P.S. Voglio attirare la tua attenzione sul fatto che entrambi questi linguaggi sono specializzati per lavorare con gli array (algebra matriciale), esattamente ciò di cui hai bisogno...

 
Prival:

Forse mi sono perso qualcosa, o forse ti sei espresso male. Non riesco a trovare da nessuna parte un articolo sulla connessione tra Matcad e MT4. Matlab è lì. Ma Matcab non è disponibile ((.

Sì, ho confuso Matcad e Matlab. Mi dispiace.


Una volta ho ordinato MT4B<-> Matcad link ai programmatori. L'unica connessione accettabile (stabile) era attraverso operazioni di file. MT4-scrive le quotazioni in un file-Matkad legge-elabora-inserisce i risultati in un file (acquisto/vendita di valuta)-MT4 legge ed esegue. Ma a volte si blocca per ragioni sconosciute... abbiamo passato più di 3 mesi, ma non siamo ancora riusciti a risolvere il problema.

Provate a fare un pacchetto con MQL5 - è un linguaggio più potente, efficiente e sicuro.

Puoi iniziare un lavoro pubblico aperto sull'integrazione di Matkad con MT5 per ottenere un buon risultato. In questo modo entrambi gli errori possono essere corretti rapidamente e il risultato può essere buono.

 
Renat писал(а) :
Sì, ho confuso Matkad e Matlab. Mi dispiace.


Provate a fare un pacchetto con MQL5 - è un linguaggio più potente, efficiente e sicuro.

Per ottenere un buon risultato, possiamo iniziare un lavoro pubblico aperto sull'integrazione di Matkad con MT5. In questo modo è possibile correggere rapidamente gli errori e ottenere un buon risultato.

Puoi fare molto, ma prima di tutto penso che sei tu che dovresti essere interessato a tali progetti (immagina solo come il tuo pubblico aumenterà e forex e cambio + scrivere programmi su matlab standard ).

E il lavoro pubblico, aperto, ecc. non mi interessa da molto tempo. Anch'io do valore al mio tempo. Stanco di fare errori come questi.

//+----------------------------------------------------------------------------+
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование                                                       |
//|    t1 - время                                                              |
//+----------------------------------------------------------------------------+
void SetVLine(string nm="", datetime t1=0, color cl=Red)
  {
  if (t1<=0) return; //t1=Time[0];
  if (ObjectFind(0,nm)<0) ObjectCreate(0, nm, OBJ_VLINE, 0, t1, 2);
  else Print("Ошибка создания SetVLine ",nm," ",GetLastError()," t1=",t1);
  
  ObjectSetInteger(0, nm, OBJPROP_COLOR, cl);
  ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_DOT);
  ObjectSetInteger(0, nm, OBJPROP_BACK, true);        // рисовать как фон
  ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false); // запретить выделение объекта мышкой
  }

Come può questa procedura produrre questo?

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) SetVLine creation error VLine_838524 4202 t1= 2010.05.06 00:00

Questa è una stronzata.

ERRARE_OGGETTO_NON_TROVATO

4202

Oggetto grafico non trovato

Se non è stato trovato nessun oggetto. Il programma dovrebbe averlo creato. Ma l'oggetto è lì if(...) quindi perché ottiene 4202.

Forse sono solo stanco ed è ora di andare a letto.

 

A Prival.

Se formulate un problema MatCad abbastanza interessante (non molto complicato per cominciare), sono sicuro che ci saranno persone disposte a partecipare al compito.

 
Prival:

2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) Errore nella creazione di SetVLine VLine_838524 4202 t1= 2010

Se non è stato trovato nessun oggetto. Il programma avrebbe dovuto crearlo. Ma l'oggetto esiste if(...) perché viene restituito 4202.

L'errore era rimasto dalla precedente chiamata di funzione. Utilizzare ResetLastError()
 


Buon giorno! Parlando di passare stringhe in funzioni dalla DLL

Ho il seguente codice:

#include <WinUser32.mqh>.

#importare "mt4excel.dll"

bool ExcelOpen();//apre Excel e crea una pagina bianca

bool ExcelSetTextCell(int X,int Y,char Value[]);//Scrivere il testo nella cella

/*

altri tagliati

*/

#importare

void OnTick()

{

MqlRates tassi [];

int copied=CopyRates("EURUSD",PERIOD_M1,0,1,rates);

ExcelSetTextCell(1,1, "Tool");

ExcelSetTextCell(2,1, "EURUSD");

ExcelSetValueCell(2,2,rates[0];

}

Come detto, Excel visualizza solo la prima lettera di quella passata lì usando ExcelSetTextCell. Dopo aver letto questo thread, ho capito qual è la ragione, ma non sono sicuro di come ottenere ciò di cui ho bisogno. Il punto è che non ho scritto la DLL, è una libreria di funzioni per lavorare con Excel tramite MT4. Per ovvie ragioni MT5 prende un puntatore a una stringa con solo il primo carattere. La domanda è: come posso far passare a MT5 ciò di cui ho bisogno, se non posso modificare il codice sorgente della DLL? Per quanto ho capito, è necessario aggiungere qualcosa come

_DLLAPI void __stdcall demo(char *stream, char*buf){ buf=stream;}

Sarei grato per i commenti degli sviluppatori di MT5

Grazie!

 

ns_k, non dimenticare che le stringhe in MQL5 sono unicode.

Ci sono 2 soluzioni possibili.

1. Rielaborare (modificare) la dll per accettare stringhe unicode

2. Convertire una stringa in un array da solo

 
stringo:

ns_k, non dimenticare che le stringhe in MQL5 sono unicode.

Ci sono 2 soluzioni possibili.

1. Rielaborare (modificare) la dll per accettare stringhe unicode

2. Convertire la stringa in un array da solo

La seconda soluzione funziona per me. Dimmi, devo cambiare anche la dichiarazione della funzione? Cioè invece di

bool ExcelSetTextCell(int X,int Y, string Value);//Scrivere il testo nella cella

Devo scrivere una dichiarazione dove il terzo parametro sarà un array? Se sì, come farlo non lo capisco. Grazie!

Però l'ho capito, ho solo dovuto pensare un po'. Grazie per l'aiuto!!!

 

Dichiarazione di una funzione DLL

bool  ExcelSetTextCell(int X,int Y, uchar& Value[]);
Chiamare una funzione DLL
//--- объявляем массив символов
uchar value[];
//--- преобразуем юникод строку в однобайтный массив
StringToCharArray("EURUSD", value);
//--- передаем полученные данные массива по ссылке
ExcelSetTextCell(2,1,value);
Motivazione: