Errores, fallos, preguntas - página 422

 
Después de actualizar a la compilación 468 en el probador, las operaciones diagnosticadas como [comercio desactivado] ya no se procesan. Pruebas en la cuenta del campeonato 2010.
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

Buenas tardes, miembros del foro.

Por favor, ayúdenme a entender. El indicador no aparece en el gráfico por alguna razón, no sé dónde está el error.

En general, debería aparecer en el gráfico así:

Pero no tengo nada en la ventana de este indicador. MT4.

Aquí está el código del indicador. ¿Hay un error en el código o en algo más?

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

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

Lo siento, pero es mejor ir a la página web de MT4

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


Es MT5.

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


¿Puede alguien decirme cuál es el tamaño máximo de archivo bin permitido

que puede ser abierto por el asesor para la lectura, porque 25 m con 3 mln.

¿Puede ser que no se lean 25 metros y 3 millones de decenas de valor, pero sí 500.000 valores?

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

Lo siento, pero es mejor ir a la página web de MT4

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


Es MT5.

Gracias, iré allí.
 
Im_hungry:

¿Puede alguien decirme cuál es el tamaño máximo de archivo bin permitido

que puede ser abierto por el Asesor Experto para la lectura, porque 25 m con 3 mln.

no quiere abrirse, pero se abre con 500.000 valores ?

A los desarrolladores. No hay nada sobre la limitación del tamaño de los archivos en la documentación.
 
Im_hungry:


¿Puede alguien decirme cuál es el tamaño máximo de archivo bin permitido

que puede ser abierto por el Asesor Experto para la lectura, porque 25 m con 3 mln.

no quiere abrirse, pero se abre con 500.000 valores?

¿Supongo que el archivo se lee en la matriz? - Lo más probable es que no haya suficiente RAM.
 
Cadena


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

Devuelve casi los mismos valores (la diferencia es sólo una barra), ¿cómo es posible?

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

En idea una función debería devolver cuántas barras ver en el gráfico actual (por ejemplo 5000) y la otra sólo el número que cabe en la pantalla (en mi caso algo más de 380).

Build 466, Full 7 x64

 
olyakish:
La línea


Devuelve casi los mismos valores (la diferencia es sólo una barra), ¿cómo es posible?

En idea una función debería devolver el número total de barras para ver en el gráfico actual (por ejemplo 5000) y la otra debería devolver sólo el número que cabe en la pantalla (en mi caso algo más de 380).

Compilación 466, Fortock OS 7 x64

Así es. Número de barras visibles:
ChartGetInteger(0,CHART_VISIBLE_BARS)

es siempre 1 más que el número de la primera barra (izquierda) visible:

ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)

La última barra (derecha) tiene el número 0.

A menos que el gráfico se desplace. Si el gráfico está "desplazado", <número de la primera barra visible> = <número de barras visibles> + <desplazamiento del gráfico en barras>-1.

Y lo que escribes:

...cuántas barras totales ver sí el gráfico actual (por ejemplo, 5000)...

es un poco diferente:

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

Acerca de no abrir el tamaño del archivo, y para el año 2010 y 2009 2008 no quiere abrir,

He intentado abrir un archivo creado con este código, pero sigue apareciendo un mensaje de error

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);
}

Cualquier intervalo de tiempo excepto 2011, 01, 01 abre el resto no,

¿Qué tipo de problema?

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

es un poco diferente:


Me temo que eso no va a funcionar.

TerminalInfoInteger(TERMINAL_MAXBARS); 

Por ejemplo, tengo 50000 barras marcadas en mi configuración pero 11375 barras cargadas en la realidad.


El método

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);


Y qué número utilizar aquí.

ZS Esto es lo que hay enInit

   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,);

Y la basura de la historia no se limpia...