Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 21

 
bablusut:

Grazie per la risposta ... Così, per cercare gli ordini nella storia del trading, usiamo la funzioneOrdersHistoryTotal, che, dopo aver scartato tutto ciò che non ci serve, si presenta così

for(int i=OrdersHistoryTotal()-1; i>=0; i--) // - la domanda qui è cosa significa "accTotal" nel template della funzione che abbiamo scartato, e perché avete preso "i--" e non "i++" come nel template?
- la seconda funzioneOrderComment restituisce il commento dell'ordine selezionato se è stato selezionato dalla funzione precedenteOrdersHistoryTotal, prende la forma

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- dove"i", questo è "i>=0" dalla funzione precedente, e "SELECT_BY_TICKET" è stato sostituito con "SELECT_BY_POS" e "MODE_HISTORY" è stato aggiunto- perché?

- La terza linea è la definizione, in realtà non abbiamo bisogno di controllare l'ordine necessario poiché abbiamo solo ordini a mercato chiusi da TP e SL in questa storia (potremmo avere un ordine pendente chiuso, ma sarà raro), tutti gli altri parametri di ordine non sono importanti per noi. L'unica cosa importante è che la quantità di ordini chiusi nella storia aumenterà costantemente, è possibile fare in modo che il nostro ricalcolo prenda una certa quantità degli ultimi ordini, per esempio 5-10, e non tutti?

- Le ultime quattro linee sono abbastanza chiare, l'unica domanda riguarda la funzione PlaySound, il cui codice dovrebbe essere inserito dopo ogni linea"Print("..." come questa



OrderComment restituisce il commento dell'ordine selezionato, se è stato selezionato dalla funzione precedenteOrdersHistoryTotal - questa funzione non seleziona nulla - restituisce il numero totale di ordini chiusi e cancellati(Il numero di ordini chiusi e cancellati nella storia del conto corrente, caricato nel terminale client. La dimensione della lista della cronologia dipende dalle impostazioni correnti della scheda "Cronologia account" del terminale. Citazione dal tutorial).


accTotal nell'esempio del tutorial:

int i,accTotal=OrdersHistoryTotal(); - Questa è una variabile int - che prende il valore OrdersHistoryTotal
for(i=0;i<accTotal;i++)// Come eseguire il loop attraverso la lista della storia non è importante dal primo all'ultimo ordine o viceversa, va ancora attraverso tutta la lista in sequenza.

Ma nel caso precedente, abbiamo 1 variabile in meno, ma la richiesta OrdersHistoryTotalviene elaborata in ogni ciclo.

SELECT_BY_POS - il parametro index contiene il numero di indice dell'ordine nella lista, la lista stessa è il secondo operatore - MODE_HISTORY è la lista dei chiusi, MODE_TRADES - aperti o in sospeso. SELECT_BY_TICKET - il numero del biglietto è passato nel parametro indice. Che dovrebbe essere preso da qualche parte prima della selezione dell'ordine.


- Le

ultime quattro righe sono generalmente chiare, l'unica domanda riguarda la funzione PlaySound, il cui codice dovrebbe essere inserito dopo ogni linea "Print("..." nella seguente forma:

bool PlaySound(

string payment // file name

)

; ..

.

O è anche convertito in qualche modo?

Dichiarare

bool PlaySound( nell'intestazione del programma - avrete la possibilità di attivare e disattivare il suono nel file impostato extern bool Play = TRUE;

poi cosa stamperà Print? E a quali condizioni?

Qual è lo scopo di questa azione? Riprodurre un suono quando l'ordine viene chiuso e scrivere il commento (per TP o SL)?






 
bablusut:
Graziea Vitalie Postolache per l'aiuto, grazie per il consiglio, e le informazioni su questi libri di testo è probabilmente un po 'tardi per me a studiare nel mio sesto decennio, probabilmente non posso fare così tanto, avrei dovuto prima, ma non c'era tempo. Vi sto davvero annoiando qui, scusate se è così, non continuerò, me ne vado.
Preferisco avere un argomento separato, voglio che funzioni così. Sarei interessato, per esempio, a vedere diverse opzioni e anche a capire quale di esse è più corretta dal punto di vista della logica.
 

A proposito, ho anche una domanda.

Ho bisogno di scrivere un assegno di Spread.

Ho usato una semplice richiesta del suo valore e il divieto di aprire un ordine se lo spread supera il valore specificato.

Ma quello che è successo è che quando lo spread sta diminuendo, l'EA apre un ordine e quello spread sta aumentando.

Ora non riesco a trovare il modo corretto per tenerne conto: se aggiungiamo lo spread all'array ogni tick, quanto sarà grande l'array? E poi, per quanto tempo durerà?

Naturalmente, possiamo non usare valori simili o usare solo valori più piccoli e più grandi, ma in questo caso dobbiamo azzerarlo in qualche modo.

E soprattutto, non riesco a capire se devo prendere in considerazione lo spread minimo e massimo o un'indicazione dei suoi salti.
 
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Potete dirmi quale valore di Spread sarà salvato? Lo stato all'inizio dell'apertura del bar?
 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Potete dirmi quale valore di Spread sarà salvato? È lo stato all'inizio dell'apertura del bar?

int spread;// spread

cioè nessun

 
A1exPit:
struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     real_volume;  // биржевой объем
  };
Potete dirmi quale valore di Spread sarà salvato? È lo stato all'inizio dell'apertura del bar?
Se si richiede la barra corrente, allora lo spread corrente, se dalla storia, allora al momento della chiusura.
 
Vitalie Postolache:
Se si chiede la barra attuale, allora lo spread attuale, se dalla storia, allora al momento della chiusura.
Grazie.
 

Ho capito bene che per scrivere i dati nell'array, è necessario assegnare a ogni cella un valore diverso array1[i] = x; indicando un numero di cella specifico

o l'array può essere riempito in modo sequenziale da i=0 in poi?

 
A1exPit:

Ho capito bene che per scrivere i dati nell'array, è necessario assegnare a ogni cella un valore diverso array1[i] = x; indicando un numero di cella specifico

o l'array può essere riempito in modo sequenziale da i=0 in poi?

Qual è la differenza? Mi sembra che questi siano solo due modi diversi
 
Renat Akhtyamov:
Che differenza c'è? Penso che siano solo due percorsi diversi.
Intendevo dire che quando si passano dati a un array, questo si riempie in modo sequenziale, cioè array1[] = x; in quale cella verrà scritto il valore di x se il numero della cella non è specificato esplicitamente?
Motivazione: