Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 642

 
paylesss:

Grazie! Riavviare il computer ha aiutato! È un peccato, sono stato seduto qui tutta la mattina))

Ora la cosa più rilevante è la costruzione del terminale e sarebbe auspicabile ricordare cosa avete fatto per far fallire le variabili globali. Se è possibile ripetere la situazione, sarebbe fantastico.

 
Kirill Andreev:

ha scritto un gufo, ma per qualche motivo il trailing stop non funziona... Quale potrebbe essere la ragione?

per farlo funzionare dovete metterlo in OnTick
 
Vladislav Andruschenko:
Deve essere messo in OnTick perché funzioni.
Grazie, farò una prova!!!
 

Salve.

Per favore aiutatemi, voglio modificare tutte le posizioni tranne l'ultima, quella più "giovane". Dove si aggiunge o si sottrae uno?


 int i; total = OrdersTotal();
          for(i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }
 
mila.com:

Salve.

Per favore aiutatemi, voglio modificare tutte le posizioni tranne l'ultima, quella più "giovane". Dove si aggiunge o si sottrae uno?



 int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }


 
-Aleks-:
int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }

Sei sicuro di aver mostrato un modo affidabile per perdere l'ultima posizione nella lista?

Se fai trading in modo realistico, non sei preoccupato che l'ordinamento possa diventare improvvisamente dipendente?

Ancora, IMHO, abbiamo bisogno di due cicli qui - nel primo cerchiamo la posizione più fresca per tempo di apertura, nel secondo modifichiamo tutti tranne quello il cui biglietto è stato trovato nel primo ciclo.

 
mila.com:

Salve.

Per favore aiutatemi, voglio modificare tutte le posizioni tranne l'ultima, quella più "giovane". Dove si aggiunge o si sottrae uno?


Io lo farei.

/********************Script program start function********************/
void OnStart()
{
 int i, t1, t2, clTicket, total = OrdersTotal();
  datetime d1, d2;
   double v1, v2, clVolume;
    for(i = total-1; i > 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t1 = OrderTicket();
         d1 = OrderOpenTime();
        v1 = OrderLots();
       }
      else continue;
        if(OrderSelect(i-1, SELECT_BY_POS))
         {
          t2 = OrderTicket();
           d2 = OrderOpenTime();
          v2 = OrderLots();
         }
        else continue;
        clTicket = d1 > d2 ? t1 : t2;
       clVolume = d1 > d2 ? v1 : v2;
      if(!OrderClose(clTicket, clVolume, OrderClosePrice(), 100)) // закрывает независимо от типа ордера OP_BUY или OP_SELL
       Print("фигня кака-та");
    }
}/********************************************************************/

Non l'ho spuntata e non posso decidere se avrò un "vuoto" nella mia lista di ordini quando chiuderò l'ordine successivo.

Se qualcuno è in grado di spiegare la possibilità che appaia un tale "gap", gliene sarei grato...

Come assicurazione, abbiamo inserito altro continua; se c'è un vuoto, un ordine sarà semplicemente saltato. A me sembra di sì.

 
Alexey Viktorov:

Io lo farei.

Purtroppo, questo non è stato testato e non riesco a capire se c'è un "buco" nella lista degli ordini dopo la chiusura dell'ordine successivo.

Se qualcuno è in grado di spiegare la possibilità che appaia un tale "gap", gliene sarei grato...

Come assicurazione, viene inserito un altro continuo; se c'è un vuoto, salterà semplicemente un ordine. A me sembra così.

Originariamente, la domanda riguardava il saltare l'ultimo ordine. Ed è da lì che si comincia.

Dovete farlo in questo modo:

for(int i = total-2; i >= 0; i--)

Allora non ci saranno vuoti dopo la cancellazione e l'ordine più recente sarà saltato.

 
Alexey Kozitsyn:

La domanda originale era di saltare l'ultimo ordine. Questo è il punto di partenza.

Dovete farlo in questo modo:

Allora non ci saranno salti dopo la cancellazione e l'ordine più recente sarà saltato.

Non l'ultimo della lista, ma il più "giovane" per tempo.

Anche se sono altrettanto sconsiderato. La domanda riguarda la modifica e sto scrivendo vicino... E se lo modificate semplicemente, non ci saranno buchi nella lista degli ordini... Potresti solo aver bisogno di aggiungere variabili e assegnare loro dei valori, e DEVI controllare i parametri per evitare l'errore #1. Beh, Mila può cavarsela da sola.

 
Alexey Kozitsyn:

La domanda originale era di saltare l'ultimo ordine. Questo è il punto di partenza.

Dovete farlo in questo modo:

for(int i = total-2; i >= 0; i--)

Allora non ci sarà nessun salto dopo la cancellazione e l'ordine più recente sarà saltato.

Come potete essere sicuri che non ci sarà una dipendenza di ordinamento, e che vi mancherà l'ordine sbagliato?

Ancora una volta, per trovare in modo affidabile esattamente l'ultimo ordine, esso deve essere identificato dal suo tempo di apertura, non dalla sua posizione nella lista.

Motivazione: