Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1427

 
Valeriy Yastremskiy #:

L'algoritmo deve essere preciso e la comprensione delle condizioni della sua applicazione. È impossibile scrivere codice in altro modo. Il codice è la realizzazione di un algoritmo di azioni, non può essere impreciso.

E qui è meglio scriverlo prima da soli, e forse gli errori saranno corretti.

Capite i segni di uguale, più è meno.

Ciao, Valery! Sono completamente d'accordo con te. Per scrivere un codice corretto, è necessaria una condizione esatta per l'apertura di una posizione. Anche questo codice funziona:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+

ma la questione è se deve funzionare come intendeva Vitaly. Francamente non capisco perché ogni 20 secondi (o anche ogni 10, 5 o 1 secondo) si debba controllare la differenza di prezzo. Che cosa può dare in termini di determinazione della direzione dell'ulteriore movimento dei prezzi?

Saluti, Vladimir.

 
MrBrooklin #:

Ciao, Valery! Sono completamente d'accordo con te. Per scrivere un codice corretto, è necessaria una condizione esatta per l'apertura di una posizione. Anche questo codice funziona:

ma la questione è se deve funzionare come intendeva Vitaly. Francamente non capisco perché ogni 20 secondi (o anche ogni 10, 5 o 1 secondo) si debba controllare la differenza di prezzo. A cosa serve per determinare la direzione di un ulteriore movimento dei prezzi?

Saluti, Vladimir.

MrBrooklin #:

Ciao, Valery! Sono completamente d'accordo con te. Per scrivere un codice corretto, è necessaria una condizione esatta per l'apertura di una posizione. Anche questo codice funziona:

ma la questione è se deve funzionare come intendeva Vitaly. Francamente non capisco perché ogni 20 secondi (o anche ogni 10, 5 o 1 secondo) si debba controllare la differenza di prezzo. A cosa serve per determinare la direzione di un ulteriore movimento dei prezzi?

Saluti, Vladimir.

Avete descritto il compito in modo errato! Non si tratta di "una volta ogni 20 secondi", ma di controllare ogni secondo con gli indicatori che sono passati da un po' di tempo. Per quanto riguarda il "perché", non è una domanda per questa discussione. (E 20 secondi è solo un esempio).

È come una media mobile, dove la prima candela viene confrontata con la seconda. Solo che devo calcolare tutto all'interno della candela corrente (a zero minuti) (o meglio ancora su un grafico a linee). Dopo tutto, 20 secondi possono scorrere fino alla prima candela).

 
vitaliy zamkovoy #:
Non state descrivendo correttamente il compito! Non si tratta di "una volta ogni 20 secondi", ma di controllare ogni secondo i valori passati da tempo. Per quanto riguarda il "perché", questa non è una domanda per questa discussione. (E 20 secondi è solo un esempio).

Sì, errore mio, non ho capito bene cosa vuoi fare/controllare.

Saluti, Vladimir.

 

Ma se la distanza pari alla vostra costante viene percorsa non in un numero pari di secondi, ma per esempio in 10,964 secondi o 11,283 secondi, cosa succede? La condizione sarà soddisfatta o no?

Saluti, Vladimir.

 
MrBrooklin #:

Ma se la distanza pari alla vostra costante viene percorsa non in un numero pari di secondi, ma ad esempio in 10,964 secondi o in 11,283 secondi, cosa succede? La condizione sarà soddisfatta o no?

Saluti, Vladimir.

Con il termine "confronto con una costante" non intendo l'uguaglianza, ma "più" "meno". In caso di differenza positiva si confronta con la costante con segno +, e in caso di differenza negativa si confronta con la costante con segno " - ". Se nel primo caso si supera la costante, si acquista. Nel secondo caso, se il valore è inferiore - vendiamo.
 
vitaliy zamkovoy #:
Con il termine "confronto con una costante" non intendo l'uguaglianza, ma "più" "meno".

Ora è tutto chiaro.

Saluti, Vladimir.

 
MrBrooklin #:

Ora tutto ha un senso.

Saluti, Vladimir.

Ho aggiornato i messaggi. Per favore, rileggeteli.
 

Sono così stufo di leggere tutte queste sciocchezze... Dopo tutto, il codice è di sole QUATTRO righe e le discussioni sono lunghe 3 pagine.

  MqlTick mqlTick[], symbTick; // объявили переменные
  SymbolInfoTick(_Symbol, symbTick); // это последний тик
  CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
  double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива

20.000 millisecondi sono 20 secondi.

Poi, mettete una condizione sulla dimensione della variabile delta più/piccolo, sinistra/destra o nord/yuh....

 
MrBrooklin #:

Ora tutto ha un senso.

Saluti, Vladimir.

MrBrooklin #:

Ora tutto ha senso.

Saluti, Vladimir.

vitaliy zamkovoy #:
Ho aggiornato i messaggi qui presenti. Vi prego di rileggerli.
Alexey Viktorov è uno snob, ma ha capito subito il trucco. 😆
 
vitaliy zamkovoy #:
Con il termine "confronto con una costante" non intendo l'uguaglianza, ma "più" "meno". Se la differenza è positiva, la confrontiamo con una costante con segno +; se la differenza è negativa, la confrontiamo con una costante con segno -. Se nel primo caso superiamo la costante, acquistiamo. Nel secondo caso, se il valore è inferiore - vendiamo.

Ora è tutto chiaro.

Saluti, Vladimir.

P.S. L'unica cosa che posso consigliare è di guardare il mio messaggio qui per interesse e poi guardare come si è comportato il prezzo dopo questo messaggio. È tornato a 0,98000, o più precisamente a 0,9806, e poi è risalito, come mostra la freccia rossa sullo screenshot del grafico dei prezzi. Questa raccomandazione serve solo a farvi riflettere.