Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1118

 
Artyom Trishkin:

Non c'è bisogno di indovinare. Bisogna pensare e capire cosa si sta facendo e per quale scopo. Quando qualcosa deve essere scritto e quando non deve esserlo.

Si pensa che la stampa debba contenere una stringa e che qualsiasi valore numerico debba essere convertito in una stringa.
Ma questo esempio ha mostrato che il compilatore sta diventando lento. E come non indovinare quando il compilatore salta e quando no.

 
Roman:

Sembrerebbe che la stampa debba essere convertita in stringa, quindi qualsiasi valore numerico deve essere convertito in stringa.
Ma questo esempio ha mostrato che il compilatore si blocca. Come non indovinare quando il compilatore salta e quando no.

Di nuovo - il codice qui - cosa non è chiaro?

ZS. Se si tratta di questo:

Print((string)(uint)PeriodSeconds(PERIOD_MN1)*1000)

... Non l'ho controllato - l'ho solo ribattuto nel post.

Effettua la conversione funzionale in stringa:

Print(string((uint)PeriodSeconds(PERIOD_MN1)*1000));
 

Amici!

Sto lottando con il problema di collegare una DLL a MQL. Sto descrivendo il mio problema:

1. All'inizio ho provato a scrivere una libreria .dll in C#. Ho scoperto che MQL4 non "mangia" tali librerie, poiché tutti i metodi all'interno della dll sono chiusi, se scritti in C#. Ho iniziato a cercare attivamente una soluzione al problema. Ho trovato diverse varianti su Internet, come il collegamento della libreria "DLL Export", scaricata da NuGet. Ho provato diversi modi, ma non ha funzionato. Non voglio davvero avere una soluzione "fragile" a questo problema, secondo il principio "funziona oggi e non domani". Ho provato in questo modo, e in realtà c'è molto di come funziona altrimenti:

using System.Runtime.InteropServices;
using RGiesecke.DllExport;

[DllExport("Good", CallingConvention.Cdecl)] // + заменял на просто [DllExport] - не помогает
public static string Good() {

   return "GHBBBGGDDDD !!!!! РУССКИЙ! :) " + 5.ToString();
}


2. Ho capito che molto probabilmente avrei dovuto scrivere una libreria C++ stabile e funzionante. Collegato dalla 1a volta, le query di prova sono passate senza problemi. Ma quando ho iniziato a provare a restituire un messaggio di testo (a MQL) con un metodo (da DLL), ho incontrato un nuovo problema - ho ottenuto la risposta"?????‡?-" in MQL. Ho provato a decodificare il messaggio, ma non ha funzionato! Ho provato a restituire il valore attraverso un parametro di funzione - ho ottenuto "?". Ho cercato un sacco di cose e non ho ancora trovato una soluzione. Questa è la variante che ho scelto, ma restituisce dei punti interrogativi:

extern "C" __declspec(dllexport) char* __stdcall ToString(char* &str)
{
        str = " - 889 - dsa - просто!";
        return "--- Привет! ---";
}


Ricevo una risposta sotto forma di:

La decodifica non aiuta...


Ciò che è necessario essenzialmente:

1) esiste una vera soluzione a questo problema tramite C#? Ho bisogno di una soluzione stabile e bella! Le mezze misure, anche se funzionano ora, ma possono cadere con una nuova costruzione, non è un'opzione.

2) Se non c'è una soluzione C#, passate al C++. Come inviare correttamente i messaggi in entrambe le direzioni senza perdere qualità? (MQL - DLL - MQL). Ho bisogno di una variante che funzioni ugualmente per MT4 e MT5.

 
Artyom Trishkin:

Di nuovo - codice qui - cosa non è chiaro?

Non è chiaro perché vengono restituite costanti da H1 in su che non corrispondono al periodo come prima di H1

Print("PERIOD_M1=",PERIOD_M1);
Print("PERIOD_M5=",PERIOD_M5);
Print("PERIOD_M30=",PERIOD_M30);
Print("PERIOD_H1=",PERIOD_H1);
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_M1=1
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_M5=5
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_M30=30
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_H1=16385
2020.04.10 03:47:03.627 VP (EPM20,H4)   PERIOD_H4=16388

Lo stesso viene restituito dalla variabile _Period.

 
Roman:

Non è chiaro perché vengono restituite costanti da H1 in su che non corrispondono al periodo come prima di H1

Lo stesso viene restituito dalla variabile _Period.

 
Artyom Trishkin:

Artyom non impazzire ))
Perché a M30 vengono visualizzati esattamente i valori di TF
1
5
30

E su H1 inizia con 16385
Beh, non è logico restituire prima il valore ai minuti e poi all'inferno.
E non si adatta alla descrizione nell'aiuto per _Period come valore di ritorno del timeframe.

 
Roman:

Artyom non impazzire ))
Perché a M30 vengono visualizzati esattamente i valori di TF
1
5
30

E su H1 inizia con 16385
Beh, non è logico restituire prima il valore ai minuti e poi all'inferno.
E non si adatta alla descrizione nell'aiuto per _Period come valore di ritorno dell'intervallo di tempo.

Valore del timeframe. Non il numero di minuti. Non il numero di secondi, non il numero di oche da Baba Nyura, ma il valore del tempo.

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Il valore dell'intervallo di tempo. Non il numero di minuti. Non il numero di secondi, non il numero di oche da Baba Nyura, ma il valore del tempo.

Questo è ciò di cui stiamo parlando, che le costanti devono essere uguali ai valori di tempo!
E portare il significato logico e matematico della corrispondenza.
Perché questi valori sono utilizzati nei calcoli.

M1 = 1
M5 = 5
M30 = 30
H1 = 60
H4 = 240
D1
= 1440

Altrimenti si perde il significato dei valori restituiti.
Perciò è un bug secondo me.

 
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?
  • www.mql5.com
Так уж сложилось, что сейчас мало кто из разработчиков помнит, как написать простую DLL библиотеку и в чем особенности связывания разнородных систем. Я постараюсь за 10 минут на примерах показать весь процесс создания простых DLL библиотек и раскрою некоторые технические детали нашей реализации связывания. Демонстрация будет на примере Visual...
 
Artyom Trishkin:

Mi sorprende che tu abbia la pazienza di ripetere tutto per così tanto tempo e al mattino... Anche se sei già al mattino dopo un'altra notte insonne)).

Almeno mettetelo in quarantena per 24 ore per leggere attentamente la documentazione. Che sfortuna... È la prima volta che un asso delle varietà del linguaggio C dice una tale sciocchezza. E questa è la prima volta che viene spiegato tutto...

Immaginate che questo sia stato capito in Service Desk. Probabilmente non hanno quel tipo di equilibrio lì, ecco perché l'hanno chiuso.