Erros, bugs, perguntas - página 422

 
Após a actualização para construir 468 no testador, os comércios diagnosticados como [comércio deficiente] já não estão a ser processados. Teste na conta do campeonato de 2010.
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

Boa tarde, membros do fórum.

Por favor, ajude-me a compreender. O indicador não aparece no gráfico por alguma razão - não sei onde está o erro.

Em geral, deve ser afixado no gráfico desta forma:

Mas não tenho nada na janela deste indicador. MT4.

Aqui está o código do indicador. Há algum erro no código ou noutra coisa?

//+------------------------------------------------------------------+
//|                                                        Bands.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Yellow
#property indicator_color3 Red
//---- indicator parameters
extern int    BandsPeriod=50;
extern int    BandsShift=0;
extern double BandsDeviations=2.0;
extern int    TrendBars = 10;
extern bool EnableTextDisplay = true;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
double HighTrend[];
double LowTrend[];
double MidTrend[];

//bool DisplayText = false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MovingBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UpperBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LowerBuffer);
   SetIndexBuffer(3,HighTrend);
   SetIndexBuffer(4,LowTrend);
   SetIndexBuffer(5,MidTrend);
   
//----
   SetIndexDrawBegin(0,BandsPeriod+BandsShift);
   SetIndexDrawBegin(1,BandsPeriod+BandsShift);
   SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
   if(EnableTextDisplay)
   {
      DisplayLabel_1();
      DisplayLabel_2();
      DisplayLabel_3();
   }
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int    i,k,counted_bars=IndicatorCounted();
   double deviation;
   double sum,oldval,newres;
//----
   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_SMA,PRICE_CLOSE,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];
      while(k>=i)
        {
         newres=Close[k]-oldval;
         sum+=newres*newres;
         k--;
        }
      deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
      i--;
     }
//----

   double TestVal1 = 0;
   double TrendValueHigh = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = UpperBuffer[i] - UpperBuffer[1+1];
         TrendValueHigh = TrendValueHigh - TestVal1;

   }
   double TrendValueLow = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = LowerBuffer[i] - LowerBuffer[1+1];
         TrendValueLow = TrendValueLow - TestVal1;

   }   
   double TrendValueMid = 0;
   for(i=0;i<TrendBars;i++)
   {
         TestVal1 = MovingBuffer[i] - MovingBuffer[1+1];
         TrendValueMid = TrendValueMid - TestVal1;

   }  
   
   
   MidTrend[0] = TrendValueMid * 1000;
   HighTrend[0] = TrendValueHigh * 1000;
   LowTrend[0] = TrendValueLow * 1000;


   if(EnableTextDisplay)
   {
      ObjectSetText("Label_Message1","High " + DoubleToStr(HighTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message2","Mid " + DoubleToStr(MidTrend[0], 2),14,"Arial",Yellow);
      ObjectSetText("Label_Message3","Low " + DoubleToStr(LowTrend[0], 2),14,"Arial",Yellow);
   }


   return(0);
  }
  
  int  DisplayLabel_1()  
{
   ObjectCreate("Label_Message1", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message1", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message1", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message1", OBJPROP_YDISTANCE, 15);// Y coordinate

   ObjectSetText("Label_Message1","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_2()  
{
   ObjectCreate("Label_Message2", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message2", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message2", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message2", OBJPROP_YDISTANCE, 35);// Y coordinate

   ObjectSetText("Label_Message2","",14,"Arial",White);
   
   return(0);      
}
int  DisplayLabel_3()  
{
   ObjectCreate("Label_Message3", OBJ_LABEL, 0, 0, 0);// Creating obj.
   ObjectSet("Label_Message3", OBJPROP_CORNER, 1);    // Reference corner
   ObjectSet("Label_Message3", OBJPROP_XDISTANCE, 10);// X coordinate
   ObjectSet("Label_Message3", OBJPROP_YDISTANCE, 55);// Y coordinate

   ObjectSetText("Label_Message3","",14,"Arial",White);
   
   return(0);      
}

//+------------------------------------------------------------------+
 

Desculpe, mas prefere ir para o sítio MT4

http://forum.mql4.com/ru/


É o MT5.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


Alguém me pode dizer qual é o tamanho máximo permitido do ficheiro do contentor

que pode ser aberto pelo consultor para leitura, porque 25 m com 3 mln.

Pode ser que 25 metros e 3 milhões de dezenas de valores não sejam lidos, mas 500.000 valores serão lidos?

MQL4: форум по механическим торговым системам и тестированию стратегий
  • www.mql5.com
MQL4: форум по механическим торговым системам и тестированию стратегий
 
Im_hungry:

Desculpe, mas prefere ir para o sítio MT4

https://www.mql5.com/ru/forum


É o MT5.

Obrigado, eu vou lá.
 
Im_hungry:

Alguém me pode dizer qual é o tamanho máximo permitido para o ficheiro do contentor

que pode ser aberto pelo Consultor Especialista para leitura, porque 25 m com 3 mln.

não quer abrir, mas abre com 500.000 valores ?

Aos promotores. Não há nada sobre a limitação do tamanho do ficheiro na documentação.
 
Im_hungry:


Alguém me pode dizer qual é o tamanho máximo permitido para o ficheiro do contentor

que pode ser aberto pelo Consultor Especialista para leitura, porque 25 m com 3 mln.

não quer abrir, mas abre com 500.000 valores?

Presumo que o ficheiro seja lido na matriz? - O mais provável é que não haja RAM suficiente.
 
Cordão


Print((int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)," ",(int)ChartGetInteger(0,CHART_VISIBLE_BARS));

Devolve quase os mesmos valores (a diferença é apenas uma barra), como é isso possível?

2011.06.18 00:03:45     CHFJPY (CHFJPY,M15)     384 385

Na ideia uma função deve retornar quantas barras para ver no gráfico actual (por exemplo 5000) e a outra apenas o número que cabe no ecrã (no meu caso pouco mais de 380).

Construir 466, Completo 7 x64

 
olyakish:
A linha


Devolve quase os mesmos valores (a diferença é apenas uma barra), como é isso possível?

Na ideia uma função deve retornar o número total de barras para visualização no gráfico actual (por exemplo 5000) e a outra deve retornar apenas o número que cabe no ecrã (no meu caso pouco mais de 380).

Build 466, Fortock OS 7 x64

É isso mesmo. Número de barras visíveis:
ChartGetInteger(0,CHART_VISIBLE_BARS)

é sempre 1 a mais do que o número da primeira barra (esquerda) visível:

ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)

A última barra (à direita) tem o número 0.

A menos que o gráfico seja percorrido. Se o gráfico for "rolado", <número da primeira barra visível> = <número de barras visíveis> + <o deslocamento do gráfico em barras>-1.

E o que se escreve:

...quantas barras totais para ver sim o gráfico actual (por exemplo 5000)...

é um pouco diferente:

TerminalInfoInteger(TERMINAL_MAXBARS);   // Максимальное количество баров на графике
 

Sobre não abrir o tamanho do ficheiro, e para o ano de 2010 e 2009 2008 não quer abrir,

Tentei abrir um ficheiro criado usando este código mas continuo a receber uma mensagem de erro

2 значения - первое целое (хранит время в секундах)

второе дробное (цену или еще что),


Когда время (т.е. секунды) в файле совпадает с временем, текущим, используем второе значение

и выводим его. Все это я реализовал следующим образом - работает без косяков - пока :-)


double proverka()
{
 handle= FileOpen("kor.bin", FILE_BIN|FILE_READ);
 if(handle<0) Print("-----Неоткрывается :-)");
 ulong file=FileSize(handle);
 ulong N = 0.0;
 double kor = 0.0;
 datetime bar[1];
 CopyTime(Symbol_1,NULL,0,1,bar);
 ulong New = (ulong) bar[0];
 while (N < file)
  {
   kor=FileReadDouble(handle); 
   N = FileTell(handle);
   if (kor == New) 
    {
     double ss = FileReadDouble(handle);
     FileClose(handle);
     return (ss);
     break;
    }
  } 
 FileClose(handle);
 return (kor);
}

Qualquer intervalo de tempo, excepto 2011, 01, 01 abre o resto não,

Que tipo de problema?

Документация по MQL5: Файловые операции / FileOpen
Документация по MQL5: Файловые операции / FileOpen
  • www.mql5.com
Файловые операции / FileOpen - Документация по MQL5
 
uncleVic:

é um pouco diferente:


Receio que isso não vá funcionar.

TerminalInfoInteger(TERMINAL_MAXBARS); 

Por exemplo, tenho 50000 barras verificadas nas minhas definições, mas 11375 barras carregadas na realidade.


O método

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);


E qual o número a utilizar aqui.

ZS Aqui está o que está noInit

   SetIndexBuffer(0,CHF,INDICATOR_DATA);
   PlotIndexSetString(0,PLOT_LABEL,"CHF");
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrMagenta);
   ArraySetAsSeries(CHF,true);
   ArrayInitialize(CHF,EMPTY_VALUE);
   //PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);

E o lixo da história não é limpo...