Erros, bugs, perguntas - página 1030

 
Al_key:

E também tenho recebido barshift usando a biblioteca do compositor. Não existe nenhuma ferramenta incorporada no Metatrader?

Na verdade iBarShift() em MT4 funciona provavelmente da mesma forma que na biblioteca do compilador, mas seria melhor tê-lo incorporado - funcionaria mais rapidamente (porque está em C++).
 
MetaDriver:

O seu caso é tratado com um pequeno deslize.

O meu é pior (a propósito, o seu caso sem um deslize costumava funcionar, parou há algumas semanas atrás).

O mesmo esquema deixou de funcionar sem escorregadelas assustadoras em outros gráficos (não actuais):

Código a partir daqui: https://www.mql5.com/ru/code/224

Corujas instaladas, ver.

No actual, atiro o padrão. AMA na tabela, recálculo de picos (em Sleep de 0 a 2350) - eu desço para M1 e nunca mais volto. Após alguns segundos. O AMA aparece, e é tudo.

Tento usar bandeiras (devo guardar duas bandeiras, actual e m1? Se já usei uma actual (bandeira) e agora estou a usar m1 (bandeira 2), então...).

mas duvido... Os carrapatos de segunda-feira virão antes de eu voltar ao actual :)

upd sim, tenho uma centena de objectos na tabela, e mais o AMA, ou seja, é tão pesado.

 
MetaDriver:

"Temos de o fazer, Fedya. Temos de o fazer".

(c) Shurik.

--

Tal erro ocorre, por exemplo, se a memória para o buffer dinâmico não for atribuída (neste caso, em ActualBuffer). Este fragmento de código não o torna claro.

Aqui.

E como alocar memória para o buffer dinâmico?

Acho que, quando eu descobrir, a questão desaparecerá.

Aqui está todo o código

#include <TimeSeries.mqh>

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Actual
#property  indicator_label1  "Actual"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrLime
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- plot Consensus
#property  indicator_label2  "Consensus"
#property  indicator_type2   DRAW_LINE
#property  indicator_color2  clrPeachPuff
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  1
//--- plot Previous
#property  indicator_label3  "Previous"
#property  indicator_type3   DRAW_LINE
#property  indicator_color3  clrLightCyan
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1
//--- indicator buffers
double         ActualBuffer[];
double         ConsensusBuffer[];
double         PreviousBuffer[];
//--- indicator vars
string sDatetime;
string sActual;
string sConsensus;
string sPrevious;
int file_handle;
int barshift;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ActualBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ConsensusBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,PreviousBuffer,INDICATOR_DATA);
   file_handle = FileOpen("CSV - макроэкономика и госкорпстат/Existing Home Sales Change.csv",FILE_READ|FILE_CSV|FILE_ANSI,',');
   while(!FileIsEnding(file_handle))
        {
         sDatetime  = FileReadString(file_handle);
         sActual    = FileReadString(file_handle);
         sConsensus = FileReadString(file_handle);
         sPrevious  = FileReadString(file_handle);
         
         barshift = iBarShift(Symbol(), Period(), datetime(formatdatetime(sDatetime)), false);
         if(StringToDouble(formatstring(sActual)) > 0 && StringToDouble(formatstring(sActual)) < 10000) ActualBuffer[barshift] = StringToDouble(formatstring(sActual));
         Print(formatdatetime(sDatetime));
         Print("iBarShift = ", barshift, " Datetime = ", formatstring(sDatetime), " sActual = ", sActual, " sConsensus = ", sConsensus, " sPrevious = ", sPrevious);
        }
    
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//--- Функции форматирования
string formatstring(string strparam)
   {
      string result = StringSubstr(strparam,1, StringLen(strparam) - 2);
      return(result);
   }
string formatdatetime(string strparam)
   {
      string result = StringSubstr(strparam, 1, 4) + "." + StringSubstr(strparam, 5, 2) + "." + StringSubstr(strparam, 7, 11);
      
      return(result);
   }
 
Al_key:

Aqui.

Como se atribui memória para um buffer dinâmico?

Acho que uma vez que descubro, a questão desaparecerá.

Aqui está todo o código

Ps.

Li sobre o Array Resize ali...aqui está uma cópia

"Após a ligação, um buffer dinâmico de matriz []será indexado como em matrizes regulares, mesmo que a matriz a ser ligada seja pré-definida para ser indexada como em séries temporais. Se quiser alterar a ordem de acesso aos elementos da matriz de indicadores, deve aplicar a função ArraySetAsSeries() depois de ligar a matriz usando a função SetIndexBuffer(). Deve-se ter em mente que as arrays dinâmicas que foram atribuídas como amortecedores indicadores pela função SetIndexBuffer() não devem ser redimensionadas. Para amortecedores indicadores, todas as operações de redimensionamento são realizadas pelo subsistema de execução do terminal".

Estou confuso.

 
Silent:
Guardar perfil configurado no ficheiro por defeito - Perfis - Predefinição
Tipo de defeito, ainda sem dados para carregar. A primeira vez em duas horas, tudo se desmoronou.
 
Al_key:

Aqui.

Como se atribui memória para um buffer dinâmico?

Acho que uma vez que descubro, a questão desaparecerá.

Aqui está o código completo

INDICADOR_DATA são os dados a serem desenhados. Este tampão (tamanho) é controlado pelo terminal (por taxas_total, tal como eu o entendo).

Adicionar amortecedores para cálculos intermédios (INDICADOR_CALCULATIONS). Para eles, definir o tamanho.

PS I have #include <TimeSeries.mqh> can "t open for some reason, does not compile".

A actualização de segunda-feira deve esperar, algo está errado aqui.

 
Silent:

INDICADOR_DATA são os dados a serem desenhados. Este tampão (tamanho) é controlado pelo terminal (por taxas_total, como eu entendo).

Adicionar amortecedores para cálculos intermédios (INDICADOR_CALCULATIONS). Para eles, definir o tamanho.

PS I have #include <TimeSeries.mqh> can "t open for some reason, does not compile".

A actualização de segunda-feira deve esperar, algo está errado aqui.

Já tentou mudar, ainda assim o mesmo erro. Tentarei pelo menos colocar valores numa matriz regular, talvez algo funcione.
 
Al_key:
Tentei alterá-lo, mas ainda assim cometi o mesmo erro. Tentarei pelo menos colocar valores numa matriz regular, talvez algo resulte.

Aqui está uma simples que funciona. Em INDICATOR_DATA escrevemos a partir de INDICATOR_CALCULATIONS.

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrOrangeRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input string   s="EURUSD";
input ENUM_TIMEFRAMES      tf;          // D1
input int      countBars=100;          // count
//--- put parameters
int   copied,i;
//--- indicator buffers
double         Label1Buffer[];
//--- buffers
double         p_Symbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,p_Symbol,INDICATOR_CALCULATIONS);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   if(prev_calculated==0)
     {
      ArrayInitialize(Label1Buffer,EMPTY_VALUE);
      ArrayInitialize(p_Symbol,EMPTY_VALUE);
      ArraySetAsSeries(Label1Buffer,true);
      ArraySetAsSeries(p_Symbol,true);
      ArraySetAsSeries(price,true);
     };
   ArrayCopy(p_Symbol,price,0,0,countBars);
   if(_LastError!=0) {Print(_LastError); return(prev_calculated);};
   if(_LastError==0)
     {
      for(i=countBars;i>0;i--)
        {
         Label1Buffer[i]=p_Symbol[i];
         Print("limitBars i = "+IntegerToString(i));
        };
     };
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Silent:

INDICADOR_DATA são os dados a serem desenhados. Este tampão (tamanho) é controlado pelo terminal (por taxas_total, como eu entendo).

Adicionar amortecedores para cálculos intermédios (INDICADOR_CALCULATIONS). Para eles, definir o tamanho.

PS I have #include <TimeSeries.mqh> can "t open for some reason, does not compile".

A actualização de segunda-feira deve esperar, algo não está bem aqui.

Leve aqui: https://www.mql5.com/ru/code/1008

Acabei de o encontrar, é por isso que ainda não senti o código. E ainda não vai funcionar - o público aqui está a levar-me às compras.

Penso que tudo irá funcionar, se o código do problema for movido de OnInit() para OnCalculate(). Há muito tempo que conheço a característica de Cinco - nenhum código no OnInit funciona bem. É provável que a verdadeira autodistribuição de buffers registados através de SetIndexBuffer() só termine após a saída do OnInit(), porque tem de acontecer em segundo plano (é automático, certo?).

TimeSeries - Библиотека функций для работы с таймсериями
TimeSeries - Библиотека функций для работы с таймсериями
  • votos: 12
  • 2012.08.24
  • Andrey Khatimlianskii
  • www.mql5.com
Библиотека функций для работы с таймсериями: iBars, iTime, iOpen, iHigh, iLow, iClose, iVolume, iHighest, iLowest, iBarshift. Для всех функций доступен краткий вариант вызова (с символом и периодом текущего графика).
 

Notei que apenas 3 dos 8 agentes podem correr ao mesmo tempo quando recebem tarefas da nuvem.
Embora se fizer o seu teste em paralelo, os outros agentes também estão habilitados.

Será assim que deve ser?