Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 765

 
Alexey Kozitsyn:

L'evento di movimento del mouse non è sicuramente generato. Con gli altri, penso che sia lo stesso.

E nell'EA?
 
Artyom Trishkin:
E nell'assessore?

Stessa cosa...

 
Alexey Viktorov:

La risposta è stata data prima...

Ma è meglio non da una quantità leggera, ma circa il massimo per cercare di cavarsela con una copia.

Non scriverò un codice di esempio. Un normale programmatore ha solo bisogno di un suggerimento. Ecco un algoritmo approssimativo:

  1. Determiniamo il numero approssimativo di barre in cui il canale è attraversato. Che siano 15.
  2. Copia entrambi i buffer dell'indicatore.
  3. Copiare i valori delle barre usando CopyRates()
  4. Nel ciclo, iniziamo a confrontare i valori del limite superiore del canale e delle barre alte simultaneamente al confronto delle barre basse con il limite inferiore del canale. Se uno di questi incroci viene trovato, l'indice della barra viene memorizzato in una variabile, e si continua a cercare il secondo incrocio. Usciamo dal ciclo quando entrambe le variabili delle barre di intersezione hanno dei valori.

Così, è possibile trovare due intersezioni in una copia e un ciclo, se necessario. Non c'è nemmeno bisogno di ArraySetAsSeries() perché quando si trova l'incrocio è possibile e, secondo me, meglio ricordare il tempo della barra, non il suo numero. Anche se, conoscendo l'ora del bar, non c'è difficoltà a determinarne il numero.

Domanda: cosa sarà più veloce, un ciclo con la copia del buffer dell'indicatore di 1 valore e la copia della barra alta di 1 e il confronto di questi valori, o una singola copia di una certa quantità e il confronto dei valori dei due array tra loro?

Suggerisco di non deviare dal concetto, che, come ho capito, era di copiare una certa quantità di dati delle barre all'inizio del codice, e poi lavorare con questi dati - o suggerisci un'eccezione?

E cosa le fa pensare che io sia un programmatore?

Non credo che abbiate bisogno di indovinare - cosa sarà più veloce, a volte la risposta può non essere ovvia - solo l'esperienza può dare una risposta a tali domande.


 
Vladimir Karputov:

L'ho scritto proprio ieri:

Compito:

su ogni tick ottenere "InpCountCopy" elementi aperti, alti, bassi, chiusi e tempo.

Attuazione:

  1. loop da "0" a "InpCountCopy-1" - il loop prende un open, high, low, close e time alla volta.
  2. In una volta otteniamo gli elementi "InpCountCopy" nella struttura MqlRates e poi facciamo un ciclo attraverso la struttura.

Caratteristiche:

è possibile scegliere come controllare: in OnTick o in OnTimer (1 secondo).

Grazie, cercherò di dare un senso al codice.
 

Dimmi perché questo codice trova un biglietto che non è già nella storia

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


 
Vitaly Muzichenko:

Dimmi perché questo codice trova un biglietto che non è già nella storia


Avete provato a cercare un trade chiuso (OUT)? C'era un ordine - potete vederlo.

 
Vitaly Muzichenko:

Dimmi perché questo codice trova un biglietto che non è già nella storia


Proprio così:

State cercando un ordine, e l'ordine di aprire la posizione = 63425010 ha già fatto il suo, ed è in Storia.

E credo che l'ordine dei biglietti e la posizione dei biglietti siano gli stessi, il che vi ha fuorviato.

Se volete analizzare la Posizione, usate PositionSelect(), poi analizzate le sue proprietà.

 

Cosa è necessario:

Inviamo un ordine, in risposta riceviamo un ticket di posizione, poi un oggetto chiamato "ticket di posizione" viene disegnato sul grafico (non viene specificata la sostituzione). Se apriamo diverse posizioni, rispettivamente, ci sono diversi oggetti con nomi di ticket sul grafico, e se poi ne chiudiamo uno, tutti gli oggetti vengono cancellati, e dobbiamo solo cancellare l'oggetto con il ticket chiuso dalla storia. La funzione di cancellazione funziona su OnTrade

 
Vitaly Muzichenko:

Cosa è necessario:

Inviamo un ordine, in risposta riceviamo un ticket di posizione, poi un oggetto chiamato "ticket di posizione" viene disegnato sul grafico (non viene specificata la sostituzione). Se apriamo diverse posizioni, rispettivamente, ci sono diversi oggetti con nomi di ticket sul grafico, e se poi ne chiudiamo uno, tutti gli oggetti vengono cancellati, e dobbiamo solo cancellare l'oggetto con il ticket chiuso dalla storia. La funzione di cancellazione funziona su OnTrade


Allora di cosa avete bisogno, di un biglietto di un ordine o di un biglietto di una posizione?

 
prostotrader:

Allora di cosa avete bisogno, di un biglietto d'ordine o di un biglietto di posizione?

Devi cancellare gli oggetti con un biglietto che sono già nella storia, ma non quelli che sono ancora sul mercato

Duplicato:

  HistorySelect(0,TimeCurrent()); 
  for(int i=HistoryOrdersTotal()-1; i>=0; i--) {
   string OrdTick=IntegerToString(HistoryOrderGetTicket(i));
   if(OrdTick=="63425010") Print(OrdTick);
  }
2017.07.24 23:58:33.514 RE (EURGBP.m,H1)      63425010


Motivazione: