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

 
Artyom Trishkin:

Ti ho già risposto:

Prendi l'ultimo ordine della lista:

E devi prima scoprire quanto è cambiato lo stato dell'elenco degli ordini. Era 12, è diventato 8 - è cambiato di 4 ordini. Di conseguenza - è necessario stampare tutti e quattro gli ordini. E si stampa sempre solo l'ultimo della lista.

Come si fa a sapere quanto è cambiato? Quando si avvia l'EA, si dovrebbe scrivere il numero di ordini in una variabile, per esempio, int last_total. Poi, ad ogni tick, confronta OrdersTotal() con last_total. Se NON sono uguali, questo è un cambiamento. Scrivi la differenza tra OrdersTotal() e last_total in una variabile, per esempio, num_changes e salva il nuovo stato di OrdersTotal() in last_total.
Ci possono essere alcune sottigliezze qui, per esempio, quando un ordine pendente viene attivato. Ma per ora, dovresti fare quello che devi fare prima.
Conoscendo il numero di ordini pendenti, puoi cercarli nella cronologia. Tuttavia, puoi anche limitare il monitoraggio degli ordini nella lista storica - fai tutto quanto sopra per la lista degli ordini storici, e non per la lista degli ordini di mercato. La differenza tra ciò che era e ciò che è diventato - questa è la quantità di ordini che devi analizzare. Si analizza sempre solo l'ultimo ordine della lista.

Tuttavia, questo non può garantire che l'ultimo ordine nella lista della cronologia sia l'ultimo ordine chiuso. Anche questa è una sfumatura che deve essere considerata. Ma poi.

Grazie mille. Questo rende tutto molto più chiaro. Parole chiave - si dovrebbe stampare non solo uno ma 4 ordini alla volta. Se me lo avessi detto nel primo post non ti avrei torturato.

 
ANDREY:

Grazie mille. Questo ha molto più senso. Le parole chiave sono: stampare non uno ma 4 ordini alla volta. Se me lo avessi detto nel primo post non ti avrei torturato.

Non c'è di che. Finché non impari da solo a fare la logica di questa o quella azione, non ti muoverai dal punto morto - chiederai sul forum. Farete domande sul forum. Non deve essere collegato a ordini/liste/biglietti ecc...

Penso che se si usassero le mele, si potrebbe facilmente creare un algoritmo per tenere traccia di quante mele ci sono sul tavolo, poi si esce per fumare e si torna - ci sono meno mele...
Come fa a saperlo? Facile - 5 mele, 3 mele. Ne mancano due. Il gatto deve aver... Oppure erano cinque e ora sono sei. Ne è uscito uno. Dall'umidità, forse... In entrambi i casi, hai contato la differenza nella tua mente.

In che modo la stessa azione è diversa dal contare gli ordini? Stesse mele... Invece di "in mente" scrivere "in funzione"

 

per favore consigliate come rimuovere la funzione dal codice(decomposizione), se ci sono già più di 200 righe di codice ed è scomodo sfogliarlo tutto. Mi interessa la "meccanica": come la funzione è "scomposta", dove è scritta, per poterla chiamare più tardi nel codice principale.

Se avete un esempio con una descrizione, apprezzerei un link
 
Alexey Kolybelnikov:

per favore consigliate come rimuovere la funzione dal codice(decomposizione), se ci sono già più di 200 linee di codice ed è scomodo sfogliarlo tutto. Mi interessa la "meccanica": come la funzione è "scomposta", dove è scritta, per poterla chiamare più tardi nel codice principale.

Se c'è un esempio con una descrizione, apprezzerei un link

Una volta lo era:

double a = (b + c) / (d - e);


Diventato:

double a = Add(b,c) / Sub(d,e);

//---------

Add(const double v1,const double v2) { return v1 + v2; }

Sub(const double v1,const double v2) { return v1 - v2; }
 
Artyom Trishkin:

Non c'è di che. Finché non imparate a formulare la logica di un'azione, non vi muoverete dal punto morto - farete domande sul forum. E la logica non può essere più semplice - può essere messa insieme con parole semplici. Non deve essere legato a mandati/liste/biglietti ecc...

Penso che con le mele si possa facilmente creare un algoritmo per tracciare la loro quantità - tutto è come nella vita reale: ti ricordi quante mele ci sono sul tavolo, esci a fumare, e quando torni ci sono meno mele...
Come fa a saperlo? Facile - 5 mele, 3 mele. Ne mancano due. Il gatto deve aver... Oppure erano cinque e ora sono sei. Ne è uscito uno. Dall'umidità, forse... In entrambi i casi, hai contato la differenza nella tua mente.

In che modo la stessa azione è diversa dal contare gli ordini? Stesse mele... Invece di "in mente" scrivere "in funzione"

Capito, grazie per il chiarimento. La stessa domanda è stata nella mia mente per molto tempo.... Il mio codice presuppone chela funzione Print() venga stampata frequentemente nel giornale. Automaticamente nel giornale verrà stampato ogni ordine aperto e ogni chiusura di ogni ordine. Ho molti ordini. Di conseguenza, ci sarebbero molte registrazioni sugli ordini. Queste voci mi disturbano spesso mentre guardo i dati nella funzione Print(), che possono anche essere numerosi.

Q: .

Come posso fare in modo che, quando ne ho bisogno, le informazioni sugli ordini aperti e chiusi non vengano mostrate nel giornale, ma solo nella funzione Print().

Si può fare con l'aiuto di qualche funzione MQL4 o devo cambiare il codice del terminale MT4?

Grazie.
 
ANDREY:

Capito, grazie per il chiarimento. La stessa domanda è stata nella mia mente per molto tempo.... Il mio codice presuppone che la funzione Print() venga stampata frequentemente nel giornale. Automaticamente nel registro verrà stampato ogni ordine aperto e ogni chiusura di ogni ordine. Ho molti ordini. Di conseguenza, ci sarebbero molte registrazioni sugli ordini. Queste voci mi disturbano spesso mentre guardo i dati nella funzione Print(), che possono anche essere numerosi.

Q: .

Come posso fare in modo che, quando ne ho bisogno, le informazioni sugli ordini aperti e chiusi non vengano mostrate nel giornale, ma solo nella funzione Print().

Può essere fatto usando qualche funzione MQL4, o richiede cambiamenti nel codice del terminale MT4?

Grazie.

Se fai l'indagine, è meglio che la scrivi in un file. Non so come visualizzare le azioni con gli ordini nel file di log e penso che non ci sia una cosa del genere. Questo è il livello di voci di inizio e fine dell'operazione EA. Queste sono voci di file di log. Il file conterrà solo quello che volete, il log conterrà i record del terminale oltre ai vostri. Si possono fare modifiche nel terminale, si può anche scrivere il proprio))) ma quanto costerà?

 
Alexey Kolybelnikov:

per favore consigliate come rimuovere la funzione dal codice(decomposizione), se ci sono già più di 200 linee di codice ed è scomodo sfogliarlo tutto. Mi interessa la "meccanica": come la funzione è "scomposta", dove è scritta, per poterla chiamare più tardi nel codice principale.

Se c'è un esempio con una descrizione, sarei grato per un link

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

e più avanti nei link... In generale: mettete tutto ciò che è "extra" nella libreria *.mqh, all'inizio del codice principale. Il compilatore lo "incollerà" insieme

Ma in generale, 200 linee non sono troppe - usando i pulsanti di si può stare tranquilli con più di mille linee.

 
Valeriy Yastremskiy:

Se state facendo una ricerca è meglio scrivere su un file. Non so come mostrare le azioni degli ordini nel file di log e non credo che ce ne siano, questo è il livello dei record di inizio e fine dell'EA. Queste sono voci di file di log. Il file conterrà solo quello che volete, il log conterrà i record del terminale oltre ai vostri. Si possono fare modifiche nel terminale, si può anche scrivere il proprio))) ma quanto costerà?

Grazie per il suggerimento. Ma non credo di aver mai scritto un EA in un file. Ho sempre scritto gli EA in MetaEditor 4. Per vedere cosa ha fatto Pront() durante tutto il periodo del test, scelgo Log - Open tab. Si apre un file in Notepad con lo stesso contenuto della scheda Log. A me sembra un file di log.
Ma mi sembra di non riuscire a cancellare tutti gli ordini aperti e chiusi da questo file notepad. Per essere più precisi, è così. Ma è un lavoro molto noioso e che richiede tempo.
Ti sarei molto grato se mi dicessi il segreto di come rendere il mio codice aperto e chiuso gli ordini, ma nel file, le informazioni di apertura e chiusura di tutti gli ordini non erano, e c'erano solo voci della funzione Pront().
Grazie per l'aiuto.

 
ANDREY:


Sapete dove posso leggere di più sugli ultimi aggiornamenti di MQL4? Ci sono molte informazioni, ma è difficile trovare ciò che serve.

https://www.mql5.com/ru/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY:

Grazie per il suggerimento. Ma non credo di aver mai scritto EA in un file. Ho sempre scritto EA in MetaEditor 4. Per vedere l'output della funzione Pront() per tutto il periodo del test, seleziono Log - Open tab. Si apre un file in Notepad con lo stesso contenuto della scheda Log. Mi sembra che sia un file di registro.
Ma mi sembra di non essere in grado di cancellare tutti gli ordini aperti e chiusi da questo file in Notepad. Per essere più precisi, è così. Ma è un lavoro molto noioso e che richiede tempo.
Ti sarei molto grato se mi dicessi il segreto di come rendere il mio codice aperto e chiuso gli ordini, ma nel file, le informazioni di apertura e chiusura di tutti gli ordini non erano, e c'erano solo voci della funzione Pront().
Grazie per l'aiuto.

int OnInit()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1/Point; // чтобы не делить на пойнт
   tx=TimeCurrent();// задание времени начала работы советника
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

   FileClose( Handle );                // Закрываем файл
   Alert("Файл ",File_Name," закрыт.");// Сообщение
     
//--- destroy timer
   EventKillTimer();

  }

void OnTick()    // Функция start() раньше называлась
  {
.................
 Qnt_Symb=FileWrite(Handle,Symbol()," ТФ ",Period(),"Открыт ордер Buy по цене ",Ask,
            "Ticket = ",Ticket," ProfB=",ProfB," MxProfB=",MxProfB, " ProfS=",ProfS," MxProfS=",MxProfS);//Запись в файл
            if(Qnt_Symb<=0) // Если не получилось
              {
               Alert("Ошибка записи в файл ",GetLastError());// Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//Открытие файла
   if(Handle==-1) // Неудача при открытии файла
     {
      Alert("Ошибка при открытии файла. ",// Сообщение об ошибке
            "Возможно, файл занят другим приложением");

     }

   return(Handle);
  }
//+------------------------------------------------------------------+

Nel tester, il file sarà nella cartella \tester\files, e se lo metti nella finestra, sarà nella cartella \MQL4\Files. E Kovalev lo ha in dettaglio.

Motivazione: