Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 952

 
vladzeit:

***

1. Richiede il prezzo attuale per lo strumento corrente.

***

2.1 Se il prezzo corrente è Point >= 100 pips, apriamo una posizione.

***

Vuoi prendere uno scarto?

 
Vladimir Karputov:

Vuoi prendere uno scarto?

Vladimir, per mia vergogna, non sono sicuro di capire cosa sia un Gap)

Voglio implementare un semplice algoritmo, in cui un cambiamento di prezzo di un certo numero di pip sarà una condizione per entrare nel mercato, per comprare o vendere... non ha importanza.

Di conseguenza, voglio imparare come ottenere il prezzo corrente per il simbolo, salvarlo in una variabile locale o globale e recuperarlo da lì su un evento, e azzerarlo.

Voglio usarlo principalmente per trovare punti di entrata nel mercato.

Ho appena iniziato a imparare mql5, soprattutto grazie ai tuoi esempi di Expert Advisors, che scrivi molto, grazie).

Sono in grado di mettere insieme i miei algoritmi a partire dai vostri esempi, ma sono confuso sul fatto di ottenere il prezzo corrente e salvarlo in una variabile.

 
vladzeit:

***

Voglio implementare un semplice algoritmo in cui un cambiamento di prezzo di un certo numero di pip sarebbe una condizione per entrare nel mercato, per comprare o vendere... non ha importanza.

***

Dovete capire che se impostate un prezzo sul tick corrente, nel prossimo tick questo prezzo può non cambiare affatto o cambiare di un numero molto piccolo di punti.

Pertanto, è necessario essere più specifici su ciò che si vuole fare:

  • per esempio, ottenere il prezzo corrente una volta in N-secondi.
  • ottenere il prezzo corrente solo alla formazione di una nuova barra.
  • ...
  • e solo allora confrontare questo prezzo con il precedente valore memorizzato.

 
Vladimir Karputov:

Bisogna capire che se si memorizza un prezzo sul tick corrente, al prossimo tick questo prezzo potrebbe non cambiare affatto o cambiare di un numero molto piccolo di punti.

Pertanto, è necessario essere più specifici su ciò che si vuole fare:

  • per esempio, ottenere il prezzo corrente una volta in N-secondi.
  • ottenere il prezzo corrente solo alla formazione di una nuova barra.
  • ...
  • e solo allora confrontare quel prezzo con il precedente valore memorizzato.

Hmmm... Non ho pensato a queste caratteristiche)

  • Per ottenere il prezzo attuale solo nel momento in cui nasce una nuova barra.
Questo esempio mi sarebbe più utile.
 
vladzeit:

Mmm... Queste sono caratteristiche a cui non avevo pensato)

  • Ottieni il prezzo attuale solo quando nasce una nuova barra.
Questo esempio mi sarà più utile.

Cercherò di mostrare un esempio stasera (tardi).

 

Buon pomeriggio!
Sto cercando di accelerare l'indicatore. Sto cercando di velocizzare l'indicatore perché ho una matrice di tempo che dovrebbe essere confrontata con gli indici delle barre e vedo una certa lentezza qui. Ho già controllato, se ho preparato un array con indici e l'ho confrontato con gli indici delle barre ottengo 40K elementi in 7 secondi, ma se ho un array temporale ci vogliono 140 secondi. Ci sono dei trucchi per accelerare l'indicatore?

   bool FindArr(int Bar)
     {
      int Size=CheckSizeTime;
      for(int i=restBars; i<Size; i++)
        {
         datetime BarTime=iTime(NULL,PERIOD_CURRENT,Bar);
         if(BarTime==ArrCol.BarTimeArray[i])
           {
            restBars++;
            return(true);
           }
        }
      return(false);
     }
if(prev_calculated==0)         
        for(int i=0;i<rates_total;i++)
           {
            if(Arr.FindArr(i))
              {
               ColorSectionBuffer[i]=low[i];
               ColorSectionColors[i]=0;
              }
            else
              {
               ColorSectionBuffer[i]=0;
               ColorSectionColors[i]=EMPTY_VALUE;
              }
           }
 
vladzeit:

Mmm... Queste sono caratteristiche a cui non avevo pensato)

  • Ottieni il prezzo attuale solo quando nasce una nuova barra.
Questo esempio mi sarà più utile.
Vladimir Karputov:

Cercherò di mostrare un esempio stasera (tardi).

Qui stava facendo un esempio per qualcuno per ottenere prezzi su ogni tick:

//+------------------------------------------------------------------+
//|                                               Display prices.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   Comment("Ask: ",DoubleToString(m_symbol.Ask(),m_symbol.Digits()),"\n",
           "Bid: ",DoubleToString(m_symbol.Bid(),m_symbol.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Le spiegazioni saranno domani, stanotte sto già dormendo.

Domani ci sarà anche un esempio di un nuovo bar.

File:
 
Vladimir Karputov:

Ecco un esempio di come ottenere i prezzi su ogni tick per qualcun altro:

Lo spiegherò domani, stasera sono già a letto.

Domani ci sarà anche un esempio di un nuovo bar.

Vladimir, grazie. Ho fatto unpo' di conoscenza con la funzioneRefreshRates della classeCSymbolInfo .L'ho visto nei vostri rapporti e letto anche in un primer.

La chiamata di questa funzione inOnTick e l' output dei valori di prezzo inComment sono anche chiari per me dall'esempio.Anche la procedura inOnInit per controllare il simbolo corrente mi è chiara.

In attesa dell'esempio con la nuova barra, cercherò di fare un po' di pratica con il tuo esempio, non l'ho usato nella pratica. Lo proverò.


 
fxsaber:

Grazie, l'ho aggiustato.

Grazie - ora sembra dare solo le directory correttamente.

Tuttavia, mi sono reso conto che le sottodirectory sono separate da un "\", mentre lo standard MQL prevede due "\" slash. Cioè il codice è necessario per generare i percorsi dei file e a causa di una barra è impossibile farlo senza ulteriore post-elaborazione, c'è un'opzione per ottenere due barre in una volta?

 
Aleksey Vyazmikin:

Grazie - ora solo le directory sembrano essere corrette.

Tuttavia, mi sono reso conto che le sottodirectory sono separate da una "\", mentre lo standard MQL prevede due "\" slash. Cioè il codice è necessario per generare i percorsi dei file e a causa di una barra è impossibile farlo senza ulteriore post-elaborazione, c'è un'opzione per ottenere due barre in una volta?

Print("\\");