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

 
ilnur17021992:
SELL_Lvl è il numero di ginocchia (ordini) della griglia di vendita eSELL_NoLossLevel è il livello totale (prezzo) della CU di questi ordini. Bene, l'idea è la seguente: abbiamo bisogno di una linea disegnata a livello di una linea di acquisto e ridisegnata rispettivamente quando vengono aperte nuove linee. Non so come fare.

Non capite come determinare la linea BU di tutti gli ordini?

 

Puoi dirmi come scriverlo per risparmiare risorse e avere prezzi aggiornati?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

o come questo?

 SymbolInfoTick(symb,Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...
 
Vitaly Muzichenko:

Puoi dirmi come scriverlo per risparmiare risorse e avere prezzi aggiornati?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

o come questo?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


La prima opzione è più corretta. Nella seconda, dovresti scrivere questa lineaSymbolInfoTick(symb,Last_Tick); <<<<
 
Vitaly Muzichenko:

Puoi dirmi come scriverlo per risparmiare risorse e avere prezzi aggiornati?

  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...

o come questo?

SymbolInfoTick(OrderSymbol(),Last_Tick); <<<
  for(int i=OrdersTotal(); i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==symb) {
      if(OrderType()==OP_BUY) {
       tk=OrderTicket();
       ask=Last_Tick.ask;
       bid=Last_Tick.bid;
       ...


Direi che dipende dalla dimensione di OrdersTotal() e dalla probabilità di cambiamenti di prezzo durante il ciclo.

Secondo me, ottenere dati freschi direttamente nel ciclo è più corretto.

E penso che le variabili aggiuntive (evidenziate nel codice) siano assolutamente inutili.

 
Alexey Viktorov:

C'è un esempio nella documentazione.

Probabilmente sarebbe meglio passare attraverso gli ordini nel ciclo e, a condizione che l'ordine successivo sia inferiore al precedente, selezionarlo per lavorare ulteriormente con esso. Così, quando usciamo dal ciclo, l'ordine da cancellare è già selezionato.

Oppure, puoi prima salvare la sua posizione nella lista degli ordini nel ciclo e poi selezionarlo dopo essere uscito dal ciclo usando l'indice salvato nel ciclo.

Non è così facile impostare ordini superiori e inferiori se
 
Sergey Gritsay:
La prima opzione è più corretta. La seconda dovrebbe scrivereSymbolInfoTick(symb,Last_Tick); <<<<

Sì, l'ho appena copiato e non l'ho notato.

Mi sto chiedendo seSymbolInfoTick è il modo giusto per metterlo dentro il ciclo, se è necessario, o se può essere messo prima del ciclo. È usato in trailing stop, può tirare una griglia fino al 50pc.

 
Vitaly Muzichenko:

Sì, l'ho appena copiato e non l'ho notato.

Mi sto chiedendo seSymbolInfoTick è il modo giusto per metterlo dentro il ciclo, se è necessario, o se può essere messo prima del ciclo. Usato in trailing stop, può tirare una griglia fino al 50pc.

Per il trailing stop è ovviamente meglio metterlo una volta prima del ciclo.
 
Alexey Viktorov:

Non riesci a capire come determinare la linea BU di tutti gli ordini?

So come determinare la BU, ho bisogno che la linea sia disegnata a questo livello
 
Alexey Viktorov:
Per il trailing stop è ovviamente meglio una volta prima del ciclo.

Ora lo sto lentamente riscrivendo per 5. Voglio dire che il prezzo può cambiare molto rapidamente e il livello può essere inferiore al valore dello stop-loss, il che porterà ad un errore. Voglio dire che il prezzo può cambiare molto rapidamente e il livello sarà inferiore al livello di stop consentito, il che porterà ad un errore.

Ho capito che questo cappello"SymbolInfoTick" è necessario per ottenere i prezzi reali?

 
problema risolto confrontando i prezzi