Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1896

 
Vitaly Muzichenko #:

Array para toda a história disponível, eu não preciso disso.

Preciso literalmente de 50-100 barras.

Assim.


Qual é o objetivo do indicador? Se não for um segredo, é claro) O problema está na exibição do tempo. Isto é, não é tempo real, é tempo de número. Cada número em sua própria barra da TF.

 
Valeriy Yastremskiy #:

Qual é o objetivo do indicador? Se não for segredo, é claro) O problema que existe, é claro, com a exibição do tempo. Ou seja, não é o tempo real do tiquetaque, mas o tempo contado. Cada número em sua própria barra de TF.

O ponto, para ver os últimos ticks no gráfico aberto :)

P.S. * Mudança de Ask and Bid

Como em Market Watch


 
Tretyakov Rostyslav #:

Porque o valor é 0. Um fractal é formado após n velas

Um fractal é formado se não houver um novo extremo e depois de três barras, estas são 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);

Nada mudou.

Ou algo está errado novamente.

 
Vitaly Muzichenko #:

Eu fiz isso, funciona.

---

Algo me diz que você pode passar sem o ciclo.

Isso é verdade?

Tanto quanto sei, não parece haver nenhuma função de turno na MQL. Portanto, o turno só pode ser feito com a ajuda de um loop. Por que isso não lhe convém?

P.S. Sobre a matriz extra, não foi necessário. Você fez o turno corretamente e escreveu o valor da oferta diretamente no buffer!

 
EVGENII SHELIPOV #:

Boa tarde .

Estou exibindo o valor do fractal diário na forma de seu valor ou de uma linha vertical. A linha não é exibida e o valor é 0.

Aqui está um pedaço de código


Por favor, diga-me o que está errado.

Por que você tem certeza de que o fractal na barra de zero deve ser diferente de zero? Quando, não será 0 só se estiver lá!


Tretyakov Rostyslav #:

Porque o valor é 0. O fractal é formado após n velas

E isto também acontece longede sempre. Somente no caso de a n-ésima barra ser fractal!

 
Vitaly Muzichenko #:

Ou seja, para ver os últimos ticks em um gráfico aberto :)

P.S. * Mudança de Ask and Bid

Como em Market Watch


Eu estava pensando em medidas de velocidade))))

 
Vitaly Muzichenko #:

Ou seja, para ver os últimos ticks em um gráfico aberto :)

P.S. * Mudança de Ask and Bid

Como em Market Watch


O que há de errado com oArrayCopy()?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
ArrayCopy() não é uma boa solução?

ArrayCopy, isto é para copiar de uma matriz para outra. E aqui você precisa mudar os valores antes de adicionar cada carrapato. Portanto, isto só pode ser resolvido usando um loop.

 
Artyom Trishkin #:
ArrayCopy() não lhe convém?

Como usar isto, você pode me mostrar?

Aqui está a tarefa.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Qualquer pergunta de novatos sobre MQL4 e MQL5, ajuda e discussão de algoritmos e códigos

Vitaly Muzichenko, 2022.02.13 15:42

Eu não preciso de uma matriz para toda a história disponível.

Eu literalmente preciso de 50-100 barras

Assim


Aqui está o código pronto, mas o laço é um pouco assustador

#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);
}
//+------------------------------------------------------------------+

---

Novamente, há um loop dentro do ArrayCopy() e provavelmente mais de um. Assim, o código dificilmente ficará mais leve e rápido devido a esta substituição

 
Vitaly Muzichenko #:

Por que você primeiro grava os dados e depois os transfere?

  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }

Isto não corresponde à tabela de carrapatos real!

Esta é a maneira correta de fazer isso.

  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  Buffer1[0]=b;
  Buffer2[0]=a;
Razão: