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

 
Alexey Viktorov:

E poi continuate a usare le stesse parole.


))) Due oggetti, uno più vecchio e uno più giovane, ho bisogno del prezzo del punto dell'oggetto più giovane (più vicino) e ottengo il prezzo del punto dell'oggetto più vecchio (più lontano) nel commento. Perché? Se il ciclo precedente, commentato, ha restituito l'oggetto più lontano, il ciclo attuale deve restituire il più vicino - ultimo ma restituisce il penultimo. Mi manca qualcosa qui.
 
PolarSeaman:
))) Due oggetti, uno più vecchio e uno più giovane, ho bisogno del prezzo del punto dell'oggetto più giovane (più vicino) e ottengo il prezzo del punto dell'oggetto più vecchio (più lontano) nel commento. Perché? Se il ciclo precedente, commentato, ha restituito l'oggetto più lontano, il ciclo attuale deve restituire il più vicino - ultimo ma restituisce il penultimo. Mi manca qualcosa qui.

Uno, e due - per selezionare gli oggetti nel ciclo in base al tempo, è necessario confrontare due tempi - l'oggetto precedente e quello attuale. Se il tempo corrente è più lungo, allora memorizzatelo in una variabile da controllare alla prossima iterazione del ciclo. Alla fine del ciclo, la variabile conterrà l'oggetto più recente creato.

 
YanSay:

Provato, non funziona, devo aver fatto qualcosa di sbagliato(

L'errore più grossolano qui è specificare il valore 100 invece di ticket nell'argomento della funzione OrderDelete().

Il prossimo errore non è così grossolano, ma è legato al fatto che viene controllato il valore calcolato dello Stop Loss invece del suo valore reale.

Anche il tipo di ordine non viene controllato. Cosa succede se abbiamo scelto un ordine a mercato? Come cancellarlo? Il simbolo dell'ordine non è stato controllato.

Prendendo in considerazione questi errori, otteniamo il codice di cancellazione dell'ordine pendente quando il prezzo raggiunge il suo Stop Loss:

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;

   if (OrderSymbol() != Symbol())
      continue;

   if (OrderMagicNumber() != 100)
      continue;

   if (((OrderType == OP_BUYSTOP || OrderType() == OP_BUYLIMIT) && Bid <= OrderStopLoss()) ||
       ((OrderType == OP_SELLSTOP || OrderType() == OP_SELLLIMIT) && Ask >= OrderStopLoss() && OrderStopLoss() > 0.0))
   {
      if (OrderDelete(OrderTicket()))
         RefreshRates();
   }
                                        
}   
Inoltre nel tuo codice controlla che lo Stop Loss sia raggiunto immediatamente dopo l'apertura di un ordine. Sembra che dopo aver aperto un ordine pendente, questo codice non venga più eseguito. Cioè, è necessario separare i rami di esecuzione. Uno è responsabile dell'impostazione dell'ordine e il secondo è responsabile del suo accompagnamento.
Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

Salve signore e signori!

Per favore, ditemi come prendere la combinazione di tasti, per esempio Ctrl+1. So come prendere un tasto della tastiera.

Ma ho bisogno di una combinazione in mt4 - come farlo!

 
Игорь:

Salve signore e signori!

Potete dirmi come catturare la combinazione di tasti come Ctrl+1. So come prendere un tasto della tastiera.

Ho bisogno di una combinazione di Mt4 - come farlo!

L'evento OnChartEvent, analizza i parametri lparam e sparam, perché premere Ctrl+1 è due eventi.

 
Ihor Herasko:

L'evento OnChartEvent, analizza i parametri lparam e sparam, poiché la pressione di Ctrl+1 è due eventi.

No, non funziona, l'ho provato!

Visualizza solo il tasto ctrl e tutti gli altri più 1 e le lettere non funzionano!!!

 
Игорь:

No, non funziona, l'ho provato!

Visualizza solo kntrl press e tutti gli altri più 1 e le lettere non funzionano!!!

Ho scritto:

premere Ctrl+1 è due eventi

Cattura due eventi e analizzali:

2018.04.05 12:26:32.170 Test EURUSD,M15: OnChartEvent, id: CHARTEVENT_KEYDOWN, lparam: 17, dparam: 1.0, sparam: 285
2018.04.05 12:26:32.396 Test EURUSD,M15: OnChartEvent, id: CHARTEVENT_KEYDOWN, lparam: 49, dparam: 1.0, sparam: 2

Questa è una pressione di Ctrl+1.

 
Ihor Herasko:

Ho scritto:

Cattura due eventi e analizzali:

Questa è una pressione di Ctrl+1.

Qui ho solo countercl o 1 e nessun evento sull'altro o mostra il tuo codice!

Dopo aver premuto ctrl nessun altro evento fino a quando non si rilascia ctrl !

Ho trovato l'errore, grazie!

 
Eliminati i duplicati.
 
Vitaly Muzichenko:

Con un profilo? =)

:)