Autoapprendimento del linguaggio MQL5 da zero - pagina 65

 
MrBrooklin:

Ciao, Valery! Grazie mille, la tua versione "...se le posizioni con il nostro magik e al nostro simbolo sono uguali a zero, controlliamo il tempo e apriamo una posizione..." si è rivelata la più semplice ed efficace. L'ho aggiunto alla condizione di controllare il tempo && PositionTotal()==0 e solo una posizione con l'importo necessario è aperta!

Sinceramente, Vladimir.


Purtroppo, MKL non ha un comando che restituisce il numero di posizioni sul simbolo. TotalPosition restituisce tutte le posizioni del conto su tutti i simboli. Pertanto, per ottenere posizioni sul simbolo è necessario cercare tutte le posizioni e confrontare la posizione del simbolo sulla nostra.

Anche. La logica nel tempo di testa, aprirlo e controllare la presenza della nostra posizione, trilling non è sempre ottimale. A volte è meglio controllare prima se la posizione è aperta con il nostro wizard e se lo è, controlliamo l'orario di chiusura, oppure la rintracciamo, o ancora controlliamo l'orario di apertura.

L'obiettivo è quello di ridurre il numero di azioni EA.

 
Valeriy Yastremskiy:

Sfortunatamente, non c'è nessun comando in MKL che restituisca il numero di posizioni su un simbolo. TotalPositions restituisce tutte le posizioni su tutti i simboli. Pertanto, per ottenere posizioni su un simbolo, è necessario cercare tutte le posizioni e confrontare la posizione del simbolo con la nostra.

Anche. La logica nel tempo di testa, aprirlo e controllare la presenza della nostra posizione, trilling non è sempre ottimale. A volte è meglio controllare prima se la posizione è aperta con il nostro wizard e se lo è, controlliamo l'orario di chiusura, oppure la rintracciamo, o ancora controlliamo l'orario di apertura.

L'obiettivo è quello di ridurre il numero di azioni EA.

Tutto è chiaro, Valery! Sto cercando di implementare i vostri consigli.

Sinceramente, Vladimir.

 
Valeriy Yastremskiy:

Se le posizioni con il nostro Magik e sul nostro simbolo sono zero, controlliamo il tempo e apriamo una posizione, se è 1, non apriamo una posizione, controlliamo il tempo di chiusura e il trawl, se è più di 1, avvisiamo e non lavoriamo. Possiamo usare pergamene o controllare iff.

Ciao, Valery! Ho provato a scrivere il codice senza l'enumerazione delle posizioni. L'ho scritto, l'ho controllato e funziona tutto.

   if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
   && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
      OpenBUY();
Sinceramente, Vladimir.
 
MrBrooklin:

Ciao Valery! Ho provato a scrivere il codice senza l'enumerazione delle posizioni. L'ho scritto, l'ho controllato e funziona tutto.

Saluti, Vladimir.

Va bene per un inizio, ma solo per un inizio. Le condizioni sono troppo rigide. Se non ci sono posizioni sul nostro simbolo e non ci sono posizioni con il nostro magik su tutti gli strumenti, allora sembra normale. Nella vita reale si possono avere 2 finestre aperte su un simbolo e un altro può avere una posizione. Potete semplicemente usare Magik per contabilizzare per esempio come trishkin, le prime 3 cifre - codice simbolo e le prossime 2 - codice script/advisor. E il primo passo è quello di codificare manualmente, o generare magik aggiungendo linee a seconda del simbolo della finestra e del codice dello script e poi convertire la linea in un numero.

Il modo classico è quello di cercare tutti gli ordini o posizioni.

Ma questo è troppo per l'inizio.

Ecco perché va bene per cominciare.

 
Valeriy Yastremskiy:

Va bene per iniziare, ma solo per iniziare. Le condizioni sono troppo rigide. Se non ci sono posizioni sul nostro simbolo e non ci sono posizioni con il nostro magik su tutti gli strumenti, allora sembra normale. Nella vita reale si possono avere 2 finestre aperte su un simbolo e un altro può avere una posizione. Potete semplicemente usare Magik per contabilizzare per esempio come trishkin, le prime 3 cifre - codice simbolo e le prossime 2 - codice script/advisor. E il primo passo è quello di codificare manualmente, o generare un magik aggiungendo linee a seconda del simbolo della finestra e del codice dello script e poi convertire la linea in un numero.

Il modo classico è quello di cercare tutti gli ordini o posizioni.

Ma questo è troppo per l'inizio.

Ecco perché va bene per cominciare.

Grazie, Valeriy! Cercare tra tutte le posizioni è uno dei prossimi passi dell'auto-studio che sicuramente farò.

Saluti, Vladimir.

 
Valeriy Yastremskiy:

Per qualche motivo tutti gli ordini o le posizioni sono considerati un classico superamento.

Ahimè, questa è una tradizione nella comunità MQL, tutti gli EA sono sviluppati tenendo conto di un'improvvisa perdita di connessione e/o interruzione di corrente di un PC.

da un lato questa è una buona metodologia, ma dall'altro lato questo impone grandi restrizioni allo stile di scrittura del codice EA - EA lavora solo con i master degli ordini. Per esempio, se avete bisogno di scrivere una martingala, EA cercherà nella storia l'ultimo ordine con i suoi master e guarderà il profitto/perdita e deciderà se aumentare il nuovo lotto o no

... in generale dalla creazione di MT - tutti stanno aspettando che internet scompaia e la strategia stessa non è più così importante ))

 
Igor Makanu:

Ahimè, questa è una tradizione nella comunità MQL, tutti gli EA sono sviluppati con in mente un'improvvisa perdita di connessione e/o interruzione di corrente del PC.

Da un lato questa è una buona metodologia, ma dall'altro impone grandi restrizioni allo stile di scrittura del codice EA - l'EA lavora solo con i master degli ordini. Per esempio, se hai bisogno di scrivere una martingala, l'EA cercherà nello storico l'ultimo ordine con i suoi master e guarderà il profitto/perdita e deciderà se aumentare il nuovo lotto o no

... in generale dalla creazione di MT - tutti stanno aspettando che Internet scompaia, e la strategia stessa non è più così importante ))

Ciao Igor, grazie per aver condiviso queste informazioni molto utili.

Sinceramente, Vladimir.

 
Igor Makanu:

Ahimè, questa è una tradizione nella comunità MQL, tutti gli EA sono sviluppati con in mente un'improvvisa perdita di connessione e/o interruzione di corrente del PC.

Da un lato questa è una buona metodologia, ma dall'altro impone grandi restrizioni allo stile di scrittura del codice EA - l'EA lavora solo con i master degli ordini. Per esempio, se hai bisogno di scrivere una martingala, l'EA cercherà nello storico l'ultimo ordine con i suoi master e guarderà il profitto/perdita e deciderà se aumentare il nuovo lotto o no

... In generale dalla creazione di MT - tutti stanno aspettando che internet scompaia e la strategia stessa non è più così importante ))

La protezione contro il fuoco, le inondazioni e la follia dovrebbe sempre esserci!) Di solito mi limito a fermarmi in caso di perdita di connessione con DT.

 

Buona giornata e buon umore a tutti!

Sto continuando a studiare il linguaggio di programmazione MQL5. Ho iniziato uno studio dettagliato dell'operatore for loop, che secondo il Riferimento MQL5, e cito:

L'operatore for loop

Esegue l'operatore finché l'espressione controllata non diventa falsa. L'espressione è controllata prima di ogni iterazione


Vado alla descrizione dell'operatore for loop e lì leggo che:

Оператор for состоит из трех выражений и выполняемого оператора:

for(выражение1; выражение2; выражение3) 
   оператор;

Выражение1 описывает инициализацию цикла. Выражение2 - проверка условия завершения цикла.
Если оно истинно, то выполняется оператор тела цикла for. Все повторяется, пока выражение2 не станет ложным. 
Если оно ложно, цикл заканчивается и управление передается следующему оператору. 
ВыражениеЗ вычисляется после каждой итерации.

L'operatore esegue un operatore? OK. Prendo ed eseguo l'operatore for loop per provare tutte le posizioni aperte e poi digito l'istruzione if con le condizioni di cui ho bisogno:

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
         && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
         OpenBUY();
     }

e poi non succede niente. La posizione Buy non viene aperta. Come faccio a capire questo? Devo fare qualcosa di sbagliato, o non capisco affatto il termine dell'istruzione for correttamente?

Caro esperto! Per favore consigliatemi, ma non a parole, non in un codice corretto, altrimenti non imparerò mai il linguaggio di programmazione MQL5.

Sinceramente, Vladimir.
 
MrBrooklin:

Buona giornata e buon umore a tutti!

Sto continuando a studiare il linguaggio di programmazione MQL5. Ho iniziato uno studio dettagliato dell'operatore for loop, che secondo il Riferimento MQL5, e cito:

L'operatore for loop

Esegue l'operatore finché l'espressione controllata non diventa falsa. L'espressione è controllata prima di ogni iterazione


Vado alla descrizione dell'operatore for loop e lì leggo che:

L'operatore esegue un operatore? OK. Prendo ed eseguo l'operatore for loop per provare tutte le posizioni aperte e poi digito l'istruzione if con le condizioni di cui ho bisogno:

e non succede niente. La posizione Buy non viene aperta. Come faccio a capire questo? Devo fare qualcosa di sbagliato o non capisco affatto lo scopo dell'operatore for loop?

Cari specialisti! Vi chiedo di dare un feedback, ma non a parole, altrimenti non imparerò mai il linguaggio di programmazione MQL5.

Sinceramente, Vladimir.

L'operatore del ciclo e gli operatori nel corpo del ciclo. Non è proprio una lingua russa classica.

Tutto è buono, naturalmente, ma dov'è l'iteratore i nel corpo del ciclo? E per ottenere il carattere di posizione e il suo simbolo magico, deve essere prima selezionato. La descrizione della posizione è una struttura (in MQL5 tutto è una struttura, ordini, tempo e affari), ed è compilata attraverso la selezione, dall'iteratore che non è un biglietto di posizione, ma un numero di posizione. E bisogna ricordare che la struttura della descrizione della posizione è sempre l'ultima scelta.