错误、漏洞、问题 - 页 422

 
在测试器中升级到468版本后,被诊断为[交易失效]的交易不再被处理。在2010年冠军 账户上测试。
Automated Trading Championship 2010
  • championship.mql5.com
Automated Trading Championship 2010
 

下午好,论坛用户。

请帮助我理解。由于某种原因,该指标没有出现在图表上--我不知道错误在哪里。

一般来说,它应该像这样显示在图表上。

但我在这个指标的窗口里就是什么都没有。MT4。

以下是该指标的代码。是代码有误还是其他方面有误?

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

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

对不起,你还是到MT4网站去吧

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


是MT5。

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


谁能告诉我,允许的最大bin文件大小 是多少?

这可以由顾问打开阅读,因为25米有3百万。

可能25米和300万个数值不会被读取,但50.000个数值会被读取?

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

对不起,你还是到MT4网站去吧

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


是MT5。

谢谢,我会去的。
 
Im_hungry:

有谁能告诉我,允许的最大bin文件大小是多少?

这可能是由专家顾问打开阅读,因为25米与3毫升。

不愿意打开,但打开后有500,000个值?

对开发商而言。文件中没有关于文件大小 限制的内容。
 
Im_hungry:


有谁能告诉我,允许的最大bin文件大小是多少?

这可能是由专家顾问打开阅读,因为25米与3毫升。

不愿意打开,但打开后有500,000个值?

我假设文件被读入数组?- 很可能只是内存不够。
 
字符串


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

它返回的数值几乎相同(差别只有一个柱状),这怎么可能呢?

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

在想法中,一个函数应该返回在当前图表上查看多少条(例如5000条),另一个函数只返回适合屏幕的数量(在我的例子中,刚刚超过380条)。

Build 466, Full 7 x64

 
olyakish:
航线


它返回的数值几乎相同(差别只有一个柱状),这怎么可能呢?

在想法中,一个函数应该返回当前图表中可供查看的条数总数(例如5000条),另一个函数应该只返回适合屏幕的条数(在我的例子中刚刚超过380条)。

Build 466, Fortock OS 7 x64

这就对了。可见的条数。
ChartGetInteger(0,CHART_VISIBLE_BARS)

总是比第一个(左边)可见条的数量多1。

ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR)

最后一栏(右边)的数字是0。

除非图表是滚动的。如果图表是 "滚动 "的,<第一个可见条数>=<可见条数>+<图表条数的移动>-1。

还有你写的东西。

......要查看的总条数是多少(例如,5000条)......。

是有点不同。

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

关于不能打开的文件大小,以及对于2010年和2009年的2008年不愿意打开。

我试图打开一个用此代码创建的文件,但一直得到一个错误信息

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

任何时间间隔,除了2011年,01年,01年打开,其余都没有。

什么样的问题?

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

有一点不同。


我担心那是不可能的。

TerminalInfoInteger(TERMINAL_MAXBARS); 

例如,我在设置中勾选了50000条,但现实中加载了11375条。


该方法

PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,);


以及在这里使用哪个数字。

ZS 这里是Init的内容

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

而历史上的垃圾却没有被清除......