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

 
EVGENII SHELIPOV #:

Buon pomeriggio.

Sto visualizzando il valore del frattale giornaliero sotto forma del suo valore o di una linea verticale. La linea non viene visualizzata e il valore è 0.

Ecco un pezzo di codice


Per favore, ditemi cosa c'è che non va.

Perché il valore è 0. Il frattale si forma dopo n candele.

 
Vitaly Muzichenko #:

Array per tutta la storia disponibile, non ne ho bisogno.

Ho letteralmente bisogno di 50-100 barre.

Come questo.


Qual è lo scopo dell'indicatore? Se non è un segreto ovviamente) Il problema è nella visualizzazione dell'ora. Vale a dire che non è il tempo dei tic reali, ma quello dei numeri. Ogni numero sulla propria barra del TF.

 
Valeriy Yastremskiy #:

Qual è lo scopo dell'indicatore? Se non è un segreto, ovviamente) Il problema è ovviamente la visualizzazione dell'ora. Cioè non è il vero tempo che ticchetta, ma il tempo numerato. Ogni numero sulla propria barra di TF.

Il punto, per vedere gli ultimi tick sul grafico aperto :)

P.S. * Cambio di domanda e offerta

Come in Market Watch


 
Tretyakov Rostyslav #:

Perché il valore è 0. Un frattale si forma dopo n candele

Un frattale è formato se non c'è un nuovo estremo e dopo tre barre quelle sono 0, 1, 2.

double FractalDayUpper = iFractals(Symbol(), PERIOD_D1, MODE_UPPER, 2);
   ObjectCreate("signal00",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal00",OBJPROP_XDISTANCE,600);
   ObjectSet("signal00",OBJPROP_YDISTANCE,100);

Non è cambiato nulla.

O c'è di nuovo qualcosa che non va.

 
Vitaly Muzichenko #:

L'ho fatto, funziona.

---

Qualcosa mi dice che puoi fare a meno del ciclo.

È vero?

Sembra che non ci sia una funzione di spostamento in MQL, per quanto ne so. Quindi, lo spostamento può essere fatto solo con l'aiuto di un ciclo. Perché non ti va bene?

P.S. Per quanto riguarda l'array extra, non era necessario. Hai fatto correttamente lo spostamento e scrivi il valore dell'offerta proprio nel buffer!

 
EVGENII SHELIPOV #:

Buon pomeriggio.

Sto visualizzando il valore del frattale giornaliero sotto forma del suo valore o di una linea verticale. La linea non viene visualizzata e il valore è 0.

Ecco un pezzo di codice


Per favore, ditemi cosa c'è che non va.

Perché siete sicuri che il frattale sulla barra zero debba essere non zero? Quando, non sarà 0 solo se c'è!


Tretyakov Rostyslav #:

Perché il valore è 0. Il frattale si forma dopo n candele

E anche questo accade tutt'altro che sempre. Solo nel caso in cui la barra n-esima sia un frattale!

 
Vitaly Muzichenko #:

Cioè, per vedere gli ultimi tick su un grafico aperto :)

P.S. * Cambio di domanda e offerta

Come in Market Watch


Pensavo a misure di velocità)))

 
Vitaly Muzichenko #:

Cioè, per vedere gli ultimi tick su un grafico aperto :)

P.S. * Cambio di domanda e offerta

Come in Market Watch


Cosa c'è di sbagliato inArrayCopy()?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
ArrayCopy() non è una buona soluzione?

ArrayCopy, serve per copiare da un array ad un altro. E qui è necessario spostare i valori prima di aggiungere ogni tick. Pertanto, può essere risolto solo utilizzando un ciclo.

 
Artyom Trishkin #:
ArrayCopy() non vi soddisfa?

Come usarlo, puoi mostrarmelo?

Ecco il compito.

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione di algoritmi e codici

Vitaly Muzichenko, 2022.02.13 15:42

Non ho bisogno di un array per tutta la storia disponibile.

Ho letteralmente bisogno di 50-100 barre

Come questo


Ecco il codice pronto, ma il ciclo è un po' spaventoso

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDodgerBlue
#property indicator_label1  "Bid"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_label2  "Ask"

double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0,Buffer1);
  ArraySetAsSeries(Buffer1,true);
  SetIndexBuffer(1,Buffer2);
  ArraySetAsSeries(Buffer2,true);
  ArrayInitialize(Buffer1,EMPTY_VALUE);
  ArrayInitialize(Buffer2,EMPTY_VALUE);
  IndicatorSetInteger(INDICATOR_DIGITS,Digits());
  IndicatorSetString(INDICATOR_SHORTNAME,"Tick:");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int H=100;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }
  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  double b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  double a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  return(rates_total);
}
//+------------------------------------------------------------------+

---

Di nuovo, c'è un ciclo dentro ArrayCopy() e probabilmente più di uno. Quindi il codice difficilmente diventerà più leggero e veloce grazie a questa sostituzione