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

 
Alexey Viktorov:

Uno di loro sono io. E non ho mai studiato C# o C++ e non ho mai saputo cosa sia OOP.

Vi prego di capire la semplice verità, che mql5 differisce da mql5 solo nella funzione OrderSend() e forse qualche altra funzione che non ricordo. Un'altra differenza importante è la direzione dell'indicizzazione dei buffer degli indicatori. Tuttavia, può essere risolto molto rapidamente, ma è meglio abituarsi alle nuove caratteristiche. E ottenere i valori degli indicatori rimane lo stesso. Non ho letto il libro di Kovalev, non so cosa ci sia, ma dubito che qualsiasi soluzione di questo libro non possa essere scritta usando il MetaEditor mql4 aggiornato.

Fico. )))) Non ha funzionato per me, davvero carico di Fortran procedurale e Basic. È un buon tutorial, ben strutturato, abbastanza chiaro e può davvero essere preso come base, se i creatori hanno bisogno di studenti, naturalmente. Purtroppo non ce ne sono altri. Non ne ho abbastanza di PLO, quindi devo leggere gli articoli. Ho provato molti dei tutorial sul terminale MT4 aggiornato. Ci sono molte osservazioni sui tipi di dati che non sono dati. Il compilatore non ha visto alcun errore anche nel controllo rigoroso.

 
Valeriy Yastremskiy:

Fico. )))) Non l'ho capito, però, con Fortran procedurale e Basic nel carico. Buon tutorial, ben strutturato, abbastanza chiaro e potrebbe davvero essere preso come base, se i creatori hanno bisogno di studenti, naturalmente. Purtroppo non ce ne sono altri. Non ne ho abbastanza di PLO, quindi devo leggere gli articoli. Ho provato molti dei tutorial sul terminale MT4 aggiornato. Ci sono molte osservazioni sui tipi di dati che non sono dati. Il compilatore non ha visto alcun errore anche nel controllo rigoroso.

Ecco i miei pensieri sull'OOP. E non sarebbe male leggere tutto il thread dall'inizio.

ООП для школьников.
ООП для школьников.
  • 2019.10.04
  • www.mql5.com
======================================================================================================================== В этой теме будет нескольк...
 

Saluti. Per favore avvisate, dopo aver selezionato un ordine non è chiaro per quale motivo il biglietto cambia. Codice:

      for(int i=OrdersTotal()-1; i>=0; i--){
         if(OrderSelect(i ,SELECT_BY_POS, MODE_TRADES)){
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType()==OP_BUYSTOP){
               Print("111  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
               temp=OrderTicket();
               if( OrderOpenPrice()>start_bid
               +((MathCeil( (Bid-start_bid)/(bs_distance*Point) )+bs_orders+Orders("bs")+1)*bs_distance*Point) ){
                  Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice()); 
                  if(!OrderDelete(OrderTicket(), clrBlack)){
                     Print("333 OrderDelete bs Bid ", Bid, "  OrderTicket() ", OrderTicket(), "  OrderType() ", StringType(OrderType()));
                  }
               }
            }
         } 
      }

Ci sono due ordini nel mercato,BUYSTOP ticket 10 eBUY ticket 9 .

Diario:


 
Alexey Viktorov:

Ecco i miei pensieri sull'OOP. E non sarebbe male leggere tutto il thread dall'inizio.

Grazie, sono d'accordo))))

 
Andrey Sokolov:

Saluti. Per favore avvisate, dopo aver selezionato un ordine non è chiaro per quale motivo il biglietto cambia. Codice:

Ci sono due ordini nel mercato,BUYSTOP ticket 10 eBUY ticket 9 .

Diario:


Suppongo che una delle funzioni scritte in proprio stia passando attraverso gli ordini (ad esempioOrdini("bs")) e quindi rieseguendo OrderSelect(). nel momento in cui ritorna al ciclo presentato, tutti i dati sono dati per l'ultimo ordine selezionato lì.

 
Igor Zakharov:

Suppongo che una delle funzioni scritte in proprio passi attraverso gli ordini (per esempioOrdini("bs")), e di conseguenza re OrderSelect(). al momento di tornare al ciclo presentato, tutti i dati sono dati per l'ultimo ordine selezionato lì.

grazie

 
Andrey Sokolov:

Saluti. Per favore avvisate, dopo aver selezionato un ordine non è chiaro per quale motivo il biglietto cambia. Codice:

Ci sono due ordini nel mercato,BUYSTOP ticket 10 eBUY ticket 9 .

Diario:


Il tuo codice di lavoro non corrisponde al codice pubblicato.

Print("222 OrderDelete bs Bid ", Bid, "  OrderOpenPrice() ", OrderOpenPrice());

Dove in questo codice viene stampato "OrderTicket()

Fate attenzione alle chiamate ad altre funzioni utente che possono includere la selezione dell'ordine.

 
Alexey Viktorov:

Siete venuti nel posto giusto. Ecco un consiglio su come fare correttamente mql4, guidato dalla nuova documentazione di mql4.

Se trovi difficile scrivere qualcosa, allora fai una domanda concreta, cosa hai scritto e cosa non sei riuscito a ottenere. Basta tenere a mente che nessuno leggerà un codice chilometrico con una sola linea incomprensibile. Io certamente no.

Lei è la persona a cui era rivolta la mia domanda. Perché sulla base della vostra richiesta ho reso il mio codice Mql4 per il tester breve, solo per mostrare chiaramente il mio problema. Ma purtroppo Artem non l'ha capito.

Vi sarò molto grato se potete cambiare il codice per risolvere il mio problema. Ancora una volta vi dirò la sua essenza.

Quando chiudo ogni ordine (e ce ne sono molti aperti allo stesso tempo), ho bisogno di stampare () alcuni parametri di un ordine chiuso. Ho imparato a farlo con molto successo. Ma..... c'è un problema che la mia mente non è sufficiente a risolvere. Alcuni ordini sono chiusi da stop sullo stesso tick e allo stesso prezzo. In questo caso, il programma ignora il primo ordine chiuso e stampa Print() solo l'ultimo ordine chiuso. E non si stampa dopo il primo.

Q: .

Quale costruzione linguistica può essere usata per far sì che il programma stampi () nei casi che ho descritto sopra anche dopo il primo ordine chiuso dallo stop?

int H;
int L;
int TP;  
int start()
{
int Ht = OrdersHistoryTotal();
if (OrderSelect (Ht-1,SELECT_BY_POS, MODE_HISTORY))                                             
if (TP!=OrderTicket( ))
{
Print("---------------------------------------------------------------=",TimeToString(OrderOpenTime()) );
TP=OrderTicket( );
}

if (TimeCurrent()==1262598040)
if (H==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.6217,1.60919,"300",10 );
H=1;
}
if (TimeCurrent()==1262601140)
if (L==0)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,1.62199,1.61758,"300",10 );
L=1;
}
return(0);


 
ANDREY:

Lei è esattamente la persona a cui era rivolta la mia domanda. Perché sulla base della vostra richiesta ho reso il mio codice Mql4 per il tester breve, solo per dimostrare chiaramente il mio problema. Ma purtroppo Artem non l'ha capito.

Vi sarò molto grato se potete cambiare il codice per risolvere il mio problema. Ancora una volta vi dirò la sua essenza.

Quando chiudo ogni ordine (e ce ne sono molti aperti allo stesso tempo), ho bisogno di stampare () alcuni parametri di un ordine chiuso. Ho imparato a farlo con molto successo. Ma..... c'è un problema che la mia mente non è sufficiente a risolvere. Alcuni ordini sono chiusi da stop sullo stesso tick e allo stesso prezzo. In questo caso, il programma ignora il primo ordine chiuso e stampa Print() solo l'ultimo ordine chiuso. E non si stampa dopo il primo.

Q: .

Quale costruzione linguistica può essere usata per far sì che l'applicazione stampi Print () anche dopo che il primo ordine si è chiuso a stop, nei casi che ho descritto sopra?


Cosa fa il tuo codice oltre ad aprire due posizioni di vendita, ognuna ad un tempo strettamente specificato, e stampare il tempo di apertura dell'ultima posizione quando è permesso? Questo è tutto. Utilizzando variabili non inizializzate, che possono portare a "miracoli" nel comportamento del codice, e molto, molto vecchio start() handler, che è stato tirato da scaffale polveroso con anni di ragnatele, e nel mercato (un giorno si vuole vendere qualcosa) con antichi handler non mancherà mai validatore - dirà che il tipo di programma sbagliato.

 
ANDREY:

Lei è la persona a cui era rivolta la mia domanda. Perché sulla base della vostra richiesta ho reso il mio codice Mql4 per il tester breve, solo per dimostrare chiaramente il mio problema. Ma purtroppo Artem non l'ha capito.

Vi sarò molto grato se potete cambiare il codice per risolvere il mio problema. Ancora una volta vi dirò la sua essenza.

Quando chiudo ogni ordine (e ce ne sono molti aperti allo stesso tempo), ho bisogno di stampare () alcuni parametri di un ordine chiuso. Ho imparato a farlo con molto successo. Ma..... c'è un problema che la mia mente non è sufficiente a risolvere. Alcuni ordini sono chiusi da stop sullo stesso tick e allo stesso prezzo. In questo caso, il programma ignora il primo ordine chiuso e stampa Print() solo l'ultimo ordine chiuso. E non si stampa dopo il primo.

Q: .

Quale struttura di linguaggio può essere usata per far sì che il programma stampi () anche dopo che il primo ordine si è chiuso a stop nei casi che ho descritto sopra?

Non ricordo la risposta di Artem. Tutti i codici nei suoi articoli sono o multiterminali o hanno due versioni, una per mql5 e un'altra per mql4. Ho controllato queste versioni su mql4. Tutto funziona correttamente e rileva la chiusura per stop o take e non fa errori.

Sì, questi articoli sono difficili da capire, ma ne vale la pena se non siete più vecchi di me. E io, per essere un programmatore, sono oscenamente vecchio.

L'altra opzione è più semplice, ma funzionerà molto più lentamente. Scrivere i biglietti d'ordine in una matrice, e usando questa matrice selezionare l'ordine, controllare il tempo di chiusura dell'ordine. Se è maggiore di zero, significa che è chiuso. Se il commento di un ordine chiuso contiene le lettere "sl", significa che l'ordine è chiuso con uno stop. Se l'ordine viene chiuso, viene cancellato dall'array. Oppure, dopo che la matrice è stata completata, viene riempita con gli ordini aperti rimanenti. L'immaginazione vola in generale.

L'opzione che scegliete dipende da voi. E leggi alcuni dei miei post sul libro di testo di Kovalev. Il tutorial suggerisce di scrivere int start(), mentre nel mql4 aggiornato, void OnTick() dovrebbe essere scritto per Expert Advisors.

Per gli indicatori e gli script, fate riferimento alla documentazione. E a proposito, è molto più facile scrivere indicatori in mql4 aggiornato di quando Sergey ha scritto questo tutorial.