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

 

Come connettersi ai server Meta Quotes in modo che la libreria dll possa inviare ordini e scambiare dati in modo che il linguaggio c++, non mql4, sia coinvolto nell'implementazione EA il più possibile?


È possibile disegnare oggetti in MT4 usando la libreria dll, cosa si può imparare a riguardo?

 
Mihail Matkovskij:

Ma perché con iBars(symbol, timeframe) la storia risulta essere incompleta, mentre con iBars(Symbol(), Period()) è abbastanza normale? E succede solo quando il terminale viene riavviato, non sempre. E le variabili symbol, timeframe sono inizializzate correttamente, nella sezione di inizializzazione (ho controllato io stesso).

Prova a spremere il mio esempio:https://c.mql5.com/3/324/Test.mq5

Sequenza di azioni:

1. Lancia il file compilato al grafico. I messaggi che si ricevono quando si fa questo:

2. Terminate il terminale e riavviatelo. I messaggi nel log saranno i seguenti:

Risolto.

Invece di questo codice

public:  
  Loader(): symbol(Symbol()), timeframe(Period()) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe)); // Данный вызов iBars() даёт 0 при перезапуске терминала
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); // Этот же вызов iBars() работает нормально
  }

Ho scritto quanto segue

public:  
  Loader(): symbol(NULL), timeframe(PERIOD_CURRENT) 
  {
    Print(__FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString(timeframe));
    ResetLastError();
    Print(__FUNCTION__ + " bars: " + (string)iBars(symbol, timeframe));
    Print(__FUNCTION__ + " Error: " + (string)GetLastError());
    Print(__FUNCTION__ + " bars (2): " + (string)iBars(Symbol(), Period())); 
  }

Ora non ci sono errori quando si riavvia il terminale. Ma simbolo e timeframe devono essere inizializzati solo con valori vuoti.

Ecco due versioni del codice sorgente, con il bug e quello funzionante. Vi ricordo che la sequenza dei test è la seguente:https://www.mql5.com/ru/forum/160683/page1189#comment_17047032

File:
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29:

Come connettersi ai server Meta Quotes in modo che la libreria dll possa inviare ordini e scambiare dati in modo che l'implementazione dell'Expert Advisor coinvolga il più possibile il linguaggio C++ e non mql4?

Non c'è modo. Il protocollo è chiuso.

È possibile disegnare oggetti in MT4 usando la libreria dll? Cosa posso studiare a riguardo?

No, non potete.

 
Seric29:

Wow, lo controllerò. So che si possono inizializzare variabili con elementi di array con funzioni, ma non sapevo che cambiasse automaticamente, non credo che ci sia una cosa del genere neanche in c++, controllerò più tardi.

Ho fatto un errore (

Se avete bisogno di ricalcolare il lotto prima delle operazioni di trading, è meglio mettere la definizione del lotto all'inizio di OnTick

o (come l'ho cambiato) OnTimer

 

Ciao, per favore aiutami ad emettere tutti i valori, posso emettere solo gli ultimi. E la seconda domanda, come emettere questi valori con uno spostamento a destra(impostare qualsiasi spostamento). Grazie!

   for(int p = 0; p < 4; p++)
      for(int c = 0; c < 4; c++)
         for(int ps = 0; ps < 4; ps++)
            Comment(StringFormat("Выводим значения\nP = %G\nC = %G\nPS = %d", p, c, ps));
 

Dove posso leggere sui delimitatori nella stampa? Si tratta di delimitatori più o virgola, non riesco a capirlo, è complicato

Stampa(a, b + "abc") ;

 
Koldun Zloy:

Negativo. Il protocollo è chiuso.

Non si può.

Cosa significa che il protocollo è chiuso. Ci sono funzioni di apertura dell'ordine in mql4, è essenzialmente solo codice. Lo stesso vale per gli oggetti grafici. Ho sentito che mql4 è un prodotto commerciale ed è per questo che non c'è codice sorgente o funzioni incorporate (per esempio Arrayresize/Range ecc.). Per esempio, non mi sento a mio agio a usare mql4 per scrivere un programma, è un linguaggio troppo morto, molto limitato. Che dire della lingua Win API 32, non può fare nulla per le mie domande? Immagino che tutto sia chiuso anche per Win API 32.

 
Seric29:

Cosa significa che il protocollo è chiuso. Ci sono funzioni di apertura dell'ordine in mql4, è essenzialmente solo codice semplice. Lo stesso vale per gli oggetti grafici. Ho sentito che mql4 è un prodotto commerciale ed è per questo che non c'è codice sorgente o funzioni incorporate (per esempio Arrayresize/Range ecc.). Per esempio, non mi sento a mio agio a usare mql4 per scrivere un programma, è un linguaggio troppo morto, molto limitato. Che dire della lingua Win API 32, non può fare nulla per le mie domande? Probabilmente, tutto è bloccato anche per Win API 32.

Sarebbe meglio fare un argomento separato, sarà più vivace)

 
MakarFX:

Ho commesso un errore.

Se avete bisogno di ricalcolare il lotto prima di fare un'operazione di trading, è meglio mettere la definizione del lotto all'inizio di OnTick

o (come l'ho cambiato) OnTimer

Quello che voglio dire è che hai inizializzato la variabile "lotto" con un'espressione, non puoi avere questa espressione riempita automaticamente. Potete anche controllarlo, prendere un semplice contatore, assegnare il valore del contatore durante l'inizializzazione e poi cambiare il contatore e il valore di Lot non cambierà a meno che non lo cambiate voi stessi. Funziona in C++.

int Pomidor=9;
int Pomidor1(int q=Pomidor){return q;}//при инициализации
Вызов
Print(Pomidor());// результат будет автоматически равен Pomidor и это будет регулярная смена значений 

Ma non funziona in mql4, funziona solo così

int Pomidor1(int q=67){return q;}

Risultato 67.

 
Valeriy Yastremskiy:

Meglio fare un topic a parte, sarà più vivace)

Stavo anche pensando, l'argomento è rilevante ma naturalmente non il fatto che vale la pena di intasare il forum, forse non è interessante per molte persone. Sono interessato, mi piace scrivere codice in C++.