Erros, bugs, perguntas - página 525

 

Boa tarde, é possível alterar de alguma forma a ferramenta gráfica padrão? Mais especificamente: adicionar uma linha vertical à grelha de Fibo, traçada a um factor de 1,3

 

uma pergunta sobre a utilização de indicadores. Escrevi um código de teste.

int Fractals;
double bar_val[];
bool start;
int OnInit()
{
   Fractals = iFractals(_Symbol, _Period);
   if (Fractals == INVALID_HANDLE) return (1);
   if (!ArrayResize(bar_val, 2)) return (1);
   if (!ArraySetAsSeries(bar_val, true)) return (1);
   start = false;
   return(0);
}

void OnTick()
{
   if (start) return; else start = true;
   for (int i = 0; i < 10; i++)
   {
      CopyBuffer(Fractals, UPPER_LINE, i, 2, bar_val);
      if (EMPTY_VALUE != bar_val[0])
         Print("1. i = " + string(i) + ", bar_val = " + string(bar_val[0]));
      CopyBuffer(Fractals, LOWER_LINE, i, 2, bar_val);
      if (EMPTY_VALUE != bar_val[0])
         Print("2. i = " + string(i) + ", bar_val = " + string(bar_val[0]));
   }
}

Apresenta periodicamente fractal com i = 2, mas não está presente no ecrã (a partir do indicador padrão Fractals)

Por favor, informe qual é o erro

 
Por alguma razão, entre 2001 e 2006 nenhum perito está a ser testado. Olhei para o euro e a libra esterlina. Fechou o terminal, apagou o histórico. Descarreguei-o novamente. Mesmo assim. É possível abrir negócios até 2001. E de 2001 a 2006 salta quando há sinais. Porquê?
 

Os botões de tempo na barra de terminais estão presos. Por vezes vários de uma só vez quando mudam frequentemente de uma TF para outra. Talvez seja devido a um grande número de janelas, indicadores, modelos... Contudo, costumava ter tantas janelas como tinha, mas este efeito não foi observado. A imagem do ecrã é um exemplo de inconsistência entre o botão de tempo pressionado e o valor real mostrado no canto superior esquerdo do gráfico. Mais de um efeito a longo prazo, embora se produza mais cedo ou mais tarde.

Por vezes não se pressiona nada.

 

Posso controlar o tamanho da janela usando mql5?

 
ilunga:

uma pergunta sobre a utilização de indicadores. Escrevi um código de teste.

Apresenta periodicamente fractal com i = 2, mas não está presente no ecrã (a partir do indicador padrão Fractals)

Por favor, informe qual é o erro

Não devo saber, num relance, como lidar com o código do Conselheiro Especialista
 
tol64:
Por alguma razão, entre 2001 e 2006 nenhum perito está a ser testado. Olhei para o euro e a libra esterlina. Fechou o terminal, apagou o histórico. Descarreguei-o novamente. Mesmo assim. É possível abrir negócios até 2001. E de 2001 a 2006 salta quando há sinais. Porquê?
Informação adicional. Isto só acontece se tiver seleccionado D1 nas definições do testador. Se eu seleccionar o prazo D1 nas definições do Expert Advisor e um TF mais pequeno nas definições do testador, então não haverá saltos. Isto é um insecto ou há alguma explicação?
 

Fiz um indicador simples, mas não percebo porque não quer funcionar;(

//+------------------------------------------------------------------+
//|                                                      testind.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   1
//--- plot Vol
#property indicator_label1  "UniPrice"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrLightSlateGray
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#include <MovingAverages.mqh>
//--- input parameters
input int      Smooth=50;
//--- indicator buffers
double         SmoothSpreadBuffer[];
double         SpreadBuffer[];
double         UniPriceBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,UniPriceBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,SpreadBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,SmoothSpreadBuffer,INDICATOR_CALCULATIONS);
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int i;
   for(i=1;i<rates_total;i++)
     {
      SpreadBuffer[i]=(high[i]-low[i]);
     }  
     
   SmoothedMAOnBuffer(rates_total,prev_calculated,
                         1,  // с какого индекса есть значения в массиве для сглаживания 
                         Smooth,  // период экспроненциальной средней
                         SpreadBuffer,       // буфер для взятия средней
                         SmoothSpreadBuffer);  // в этот буфер помещаем значения средней      
   for(i=1;i<rates_total;i++)
     {
      UniPriceBuffer[i]=close[i]/SmoothSpreadBuffer[i];//не показывает
      //UniPriceBuffer[i]=close[i]/SmoothSpreadBuffer[rates_total-1];//показывает
      //UniPriceBuffer[i]=close[i];//показывает
      //UniPriceBuffer[i]=SmoothSpreadBuffer[i];//показывает
     }  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Porque não quer dividir um pelo outro e mostrar o resultado?

Por vezes dá um resultado, mas não corresponde à realidade, por exemplo o EURUSD deve ter um valor entre 300-400 no relógio...

 
Olegts:

Fiz um indicador simples, mas não percebo porque não quer funcionar;(

fechar[i] quando o substituo, SmoothSpreadBuffer[i] quando o substituo, porque não quer dividir um pelo outro e mostrar o resultado?

É verdade, por vezes dá um resultado, mas não corresponde à realidade, por exemplo, o relógio EURUSD deveria ter um valor na ordem dos 300-400...

UniPriceBuffer[i]=close[i]/SmoothSpreadBuffer[i];

Basta substituir aqui os valores de EURUSD pela hora actual e obtê-los-á:

Ma, por exemplo, com uma média de 16 a preços de fecho

UniPriceBuffer[i] = 1,33846 / 1.33932 = 0,99935

ou melhor para usar

handle=iMA(name,period,ma_period,ma_shift,ma_method,applied_price);
и т.д
 

Após a última construção, o terminal fica pendurado no carregamento. Não há acesso ao menu ou ao menu de contexto. Sem acesso ao menu ou menu de contexto. WIn7. A janela de síntese dos símbolos está vazia. O ícone de ligação é vermelho. Sem carga de CPU. O que fazer e quando é que a estabilidade estará disponível?

Описание:
  Ошибка привела к остановке взаимодействия программы с Windows.

Сигнатура проблемы:
  Имя события проблемы:    AppHangB1
  Имя приложения:    terminal.exe
  Версия приложения:    5.0.0.514
  Отметка времени приложения:    00343800
  Сигнатура зависания:    86b5
  Тип зависания:    1
  Версия ОС:    6.1.7601.2.1.0.256.1
  Код языка:    1049
  Доп. сигнатура зависания 1:    86b56845a796dcc49c1ed94bca152915
  Доп. сигнатура зависания 2:    4dea
  Доп. сигнатура зависания 3:    4dea45bbcdd37e9fd7bef8af1f8c0d94
  Доп. сигнатура зависания 4:    1df5
  Доп. сигнатура зависания 5:    1df5990b738955081f33bb6a466caece
  Доп. сигнатура зависания 6:    b4e6
  Доп. сигнатура зависания 7:    b4e6e85bfba9e3852328760498392cb4