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

 
Alekseu Fedotov:

È così semplice.

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));

È così.


Alekseu Fedotov, Purtroppo non è questo. Si ottiene il numero di barra con TF e poi si usa lo stesso TF, ma ne serve un altro (questo è il problema). Abbiamo bisogno di ottenere il numero di barra con TF (per esempio 30) e poi ottenere il MA con TF (1440), a partire da questa barra con TF 30. E 'come se ora (14.30) vorrebbe ottenere MA con TF 1440. Ora - non è un problema, ma trasferirlo a un paio di giorni fa, questo è un problema.

 
STARIJ:
Sì. Dovremmo usare M1, e M5, .... - per controllare. Forse usare l'interpolazione? mt5 ha una cronologia dei tick. Se mi fate sapere dov'è il profitto, darò un'altra occhiata.

Ho bisogno di fare l'analisi tecnica retrospettivamente come se stesse accadendo ora e guardare il risultato. Questo è come se avessi fatto l'analisi tecnica di MA con TF 1d alle 14.30 di ieri e oggi ho ottenuto i risultati del movimento del prezzo dalla MA di ieri. Se oggi uso TF 1440 e guardo dal punto di vista di ieri, i dati dell'analisi tecnica saranno diversi, e quindi i risultati dovrebbero essere diversi.

 
Roman Sharanov:

Aiuto, ho bisogno di disegnare un rettangolo dal massimo della candela precedente a un punto 200p sopra di esso e cronometrare una barra in avanti.

Ho scritto il codice, ma non capisco perché il punto sinistro del rettangolo non si muove? La destra scivola dietro l'hai.

Comportamento inaspettato della funzione... Prima, quando ho provato a creare un oggetto con il nome di uno già esistente, è stato restituito un errore e l'oggetto non ha cambiato i parametri esistenti in nuovi. Ma ora, apparentemente, sono stati fatti dei cambiamenti e ogni volta che high[0] viene cambiato o appare una nuova barra, high[1] ha già un valore diverso e uno dei parametri cambia quando si crea un nuovo rettangolo.

La soluzione è molto semplice: controllare l'esistenza dell'oggetto prima di crearlo.

 
STARIJ:

Si muove



No, non sto disegnando nulla con questo codice

 
Roman Sharanov: No, non disegna nulla con questo codice.

Guarda tutto il mio file.

File:
PR.mq4  3 kb
 
STARIJ:

Guarda il mio file


Oh, capisco, hai MQL4 :)
Ha fatto gli array per serie temporali e ha funzionato, ancora non capisco perché non ha funzionato per me

 
Boss11: Ho bisogno di fare l'analisi tecnica retrospettivamente come se stesse accadendo ora e guardare il risultato. Cioè, come se avessi fatto un'analisi tecnica di MA con TF 1d alle 14.30 di ieri e oggi ottenessi i risultati del movimento del prezzo con la MA di ieri. Se oggi uso TF 1440 e guardo dal punto di vista di ieri, i dati dell'analisi tecnica saranno diversi, e quindi ci si deve aspettare che i risultati siano diversi.

Con TF 1440 tutto è chiaro. ma con M1 come hai scritto c'è un grande margine di errore?

 
STARIJ:

Con TF 1440 tutto è chiaro. ma con M1 come hai scritto grande errore?


Non ho provato con M1, ma penso che il margine di errore sarà minore. M1->M5 sarà più preciso di M30-> 1d

 

Per favore, consigliate la risposta a una domanda specifica. Sto rifacendo la Bollinger.

Cambiato un paio di linee, non disegna barre. Cosa sono i logaritmi?

Formula di volatilità da https://research-journal.org/economical/analiz-razlichnyx-metodov-ocenki-istoricheskoj-volatilnosti-dlya-opcionnoj-torgovli/

int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres,oldpos;
//----
   if(Bars<=BandsPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=BandsPeriod;i++)
        {
         MovingBuffer[Bars-i]=EMPTY_VALUE;
         UpperBuffer[Bars-i]=EMPTY_VALUE;
         LowerBuffer[Bars-i]=EMPTY_VALUE;
        }
//----
   int limit=Bars-counted_bars;
   if(counted_bars>0) limit++;
   for(i=0; i<limit; i++)
      MovingBuffer[i]=iMA(NULL,0,BandsPeriod,BandsShift,MODE_EMA,PRICE_WEIGHTED,i);
//----
   i=Bars-BandsPeriod+1;
   if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
   while(i>=0)
     {
      sum=0.0;
      k=i+BandsPeriod-1;
      oldval=MovingBuffer[i];
      oldpos=i;
      while(k>=i)
        {
         //newres=Close[k]-oldval;
         //sum+=newres*newres;
          sum+=log(fabs(High[k]/Close[k]))*log(fabs(High[k]/Open[k]))+log(fabs(Low[k]/Close[k]))*log(fabs(Low[k]/Open[k]));
         k--;
        }
      deviation=BandsDeviations*MathSqrt(fabs(sum/BandsPeriod));
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
File:
 

Per favore, ditemi come cancellare un oggetto grafico. Ci sono linee verticali i cui nomi sono costruiti dai valori delle variabili.

string name=="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,time,cena); Come posso cancellare solo le linee verticali con il nome test1?

Motivazione: