来自一个 "傻瓜 "的问题 - 页 57

 
Lizar:

我打算看一下文章中发布的版本。到目前为止,做了一些专家的间谍,效果很好。

MetaDriver。

我不认为这项技术在测试器中会起作用。

它是有效的。

它能在测试器中工作,真是太好了。我还没有能够实施它。但这可能是由于缺乏经验。我现在已经确定了一个计时器,但这是一个很长的计时器。

当我试图将专家顾问附在图表上时,我得到了这样一条信息。

我不明白美元兑日元与此有什么关系。我甚至把代码中初始化时获取句柄的部分也注释掉了,但这个信息还是出现了。

 
Lizar:

它是有效的。

康斯坦丁,我的理解是否正确,通常驻留在OnTick()OnTimer() 中的EA可执行代码,需要放在OnChartEvent() 中,以使你的方案在多货币模式下工作,无论是实时还是测试器。
 
tol64:

它能在测试器中工作,真是太好了。我还没能实现它。但这是由于缺乏经验,我想。我暂时定下了定时器,但它太长了。

当我试图将专家顾问附在图表上时,我得到了这样一条信息。

我不明白美元兑日元与此有什么关系。我甚至在代码中注释了初始化时获取句柄的内容,但这个信息仍然出现。

还没有看。

Tol64
康斯坦丁,我的理解是否正确,通常驻留在OnTick()OnTimer() 中的EA可执行代码,需要放在OnChartEvent() 中,以使你的方案在多货币模式下工作,无论是实时还是测试器。

是的。

 
tol64:

它能在测试器中工作,真是太好了。我还没能实现它。但那是由于缺乏经验,我想。我暂时定下了定时器,但它太长了。

当我试图将专家顾问附在图表上时,我得到了这样一条信息。

我不明白美元兑日元与此有什么关系。我甚至把代码中初始化时获得句柄的部分也注释掉了,但信息还是出来了。

我已经看了。专家顾问正在工作。只是在错误信息 中出现了一个错字。

它给你的是一个信息,即在MarketWatch窗口中没有选择该符号。要么将专家顾问工作的符号设置为MarketWatch窗口,要么在OnInit()中注释掉对相应符号的spyros的调用。

我在此附上exSpy控制面板MCM.mq5的修改版本。

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
附加的文件:
 
Lizar:

我已经看了一下。该专家正在工作。只是在错误信息 中出现了一个错字。

它给你的信息是,在MarketWatch窗口中没有选择该符号。要么将专家顾问工作的符号设置为MarketWatch窗口,要么在OnInit()中注释掉对相应符号的spyros的调用。

我附上exSpy控制面板MCM.mq5的修改版本。

我甚至嘲笑自己的不重视))))。USDJPY在市场观察窗口中。没有其他符号,指纹只是有相同的信息。)))

谢谢。

 
tol64:
康斯坦丁,我的理解是否正确,专家顾问的可执行代码,通常位于OnTick()OnTimer() 中,应该放在OnChartEvent() 中,以使你的方案在多货币模式下工作,无论是实时还是测试器。

最好是以单独的程序和函数的形式实现所有需要的功能(我推荐后者),然后从专家顾问的任何地方调用它。

如果你使用OOP,所有需要的功能都可以作为主类(通常是专家类的后裔)的一组方法来实现。

 
Interesting:

最好将所有必要的功能作为独立的程序和函数来实现(我推荐后者),然后从专家顾问的任何地方调用它。

如果你使用OOP,你可以将所有必要的功能作为主类(通常是专家顾问类的后裔)的几个方法集来实现。

目前,所有功能几乎都是以这种方式实现的。几乎。也就是说,整个代码是几个包含基本计算的函数。我还没有完全掌握OOP,但我已经可以看到使用OOP的利润。代码在一天天增长,很快就会在没有OOP的情况下使用它,这将是非常不方便的。

我已经创建了一个单独的主题,在那里我给你提供了各种多货币测试方法的结果:多货币专家顾问测试结果。在这个问题上,仍有许多事情对我来说是不清楚的。

 

为什么我的报价没有加载?例如,在欧元兑美元上,他们只加载到该年的8月。这就是全部。他们不想再装下去了。有没有其他地方可以让我找到带引号的文件?

我已将条形图的数量 设置为无限。我刷新了好几次。我按了几次HOME键。它仍然不工作。

 

还有,所有MT5文件及其细节的 "公布的完整清单 "在哪里。

今天刚从猴面包上下来,抱歉。

 

一个多时空的分形指标

该指标的本质是在另一个时间框架上显示一个(或同时显示几个)时间框架的分形。

文章来源:https://www.mql5.com/ru/code/7304, MQL4中的指标代码

首先,我试着从.mq4-版本中复制和粘贴,并为.mq5做了一些微小的修正(我甚至没有引用这段代码--当我发现在MQL4源代码中不小心操作了像High[shift+i]这样的数组后,问题就发生了。

bool Fractal (string F,int Per, int shift) {...}

我试着在MQL5中重写它(在OnCalculate之外没有这种数组的默认可见性)。

然后我试着为MQL5重写,用不同的参数PERIOD_....调用几个iFractals处理。结果,分形就散开了,尽管有时只有TF上与之对应的单一系列的分形箭头可以充分拟合。值得注意的是,当我从其他不同的时间段回到终端的同一时间段时,分形出现的情况不同,这表明:这个陌生的指标在终端的数据以一种难以理解的方式徘徊,尽管我一直认为相同的错误画面应该稳定地重复。当然,第二个变体甚至不包含bool Fractal(string F,int Per,int shift) {...},我想把这个问题交给有经验的指标开发者。

这是我设法画的东西。

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

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 B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

很明显,它在OnCalculate以及bool类型的外部函数中缺少一些条件检查,或者我根本没有正确使用我的代码中已有的东西。另外,也许数组需要在正确的地方正确初始化,并设置为时间序列?