错误、漏洞、问题 - 页 1393

 
galustyan10:

你好,你能告诉我,当我在MT5上开立一个真实账户 时,公司员工需要多长时间给我打电话并完成开户程序?

你为什么大喊大叫?当你注册账户时,你会收到你的登录名和密码。通常是在经纪人的网站上开一个个人账户。

 
编译错误:'a' - 不是静态成员
class A     { int a; };
class B : A { void a(); };
void B::a() {}
否则
class A     { int a; };
class B : A { void a() {} };
是好的。有什么区别?
 

MT5 1159。如果在 "个性化 "中设置了中号或大号字体,则水平比例不匹配。Win7, 32b

 

MT5如何在一个单独的窗口中自动缩放指标?

在一个单独的窗口中显示指标

终端做出的最大值为0.5603,而整个历史上 任何指标缓冲区 的实际最大值为0.0605。不用说,在MT4中没有这样的问题。

 
Ilya Malev:

MT5如何在一个单独的窗口中自动缩放指标?


终端做出的最大值为0.5603,而整个历史上 任何指标缓冲区 的实际最大值为0.0605。不用说,在MT4中没有这样的问题。

检查你在指标缓冲区中的数值。你可以用 "Crosshair "手动操作,你也可以用MQL5操作。
 
Karputov Vladimir:
检查你在指标缓冲区中的数值。你可以用 "Crosshair "手动操作,你也可以用MQL5操作。

我告诉你,整个历史上的最大值是0.0605。在OnCalculate中通过比较每个条形图上每个缓冲区的最大值进行检查。

P.S.我实际上已经知道问题出在哪里了。MT4和MT5中计算最大值的算法不同。我想了解改变这种算法的合理性,但这是一个反问句。

问题出在MT4中--数据窗口中 显示的指标缓冲值会影响单独的指标窗口的比例,即使它们在图表上的显示被禁用(DRAW_NONE风格)。我解决了这个问题,把它们变成了负数,并把最小值固定为0。一切都显示得很完美,因为只有高于固定的最小值(0)的指标值才会参与比例计算。现在,低于固定最小值的数值参与比例计算。换句话说,他们没有增加从比例计算中删除缓冲值的能力(或者说我还没有想出办法),但他们已经删除了通过将缓冲值赶到最小或最大值以下而将其排除在比例之外的能力。(这都适用于不显示的DRAW_NONE缓冲区)

 
Ilya Malev:

我告诉你,整个历史上的最大值是0.0605。在OnCalculate中通过比较每个条形图上每个缓冲区的最大值进行检查。

P.S.我实际上已经知道问题出在哪里了。MT4和MT5中计算最大值的算法不同。我想了解改变这种算法的合理性,但这是一个反问句。

无论传递给指标缓冲区 的是什么值,它们都将是相同的。另一种变体:在开始时,你不分析指标缓冲区的每个元素,结果在缓冲区得到随机值。

所以,不看代码是不行的。

 
Karputov Vladimir:

另一个选择是:在开始的时候,你不计算指标缓冲区的每一个元素,最后在缓冲区中出现随机值。

我已经想明白了。顺便说一下,这也是MT5的一个意外惊喜 :)
 
Karputov Vladimir:

无论如何,你不能不看这里的代码。

好的,这里的代码是

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_minimum 0
#property  indicator_color1 clrRed
#property  indicator_type1 DRAW_LINE
#property  indicator_label1 "Стд.Откл."

double buffer1[], buffer2[];

int i_std=INVALID_HANDLE;

void OnInit(){
   SetIndexBuffer(0, buffer1);
   SetIndexBuffer(1, buffer2);
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE);
   PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);
   ArraySetAsSeries(buffer1, true);
   ArraySetAsSeries(buffer2, true);
   i_std=iStdDev(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE);
}

void OnDeinit(const int reason){
   if(i_std!=INVALID_HANDLE)  IndicatorRelease(i_std);
}

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[]){

   for(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--){
      buffer1[i]=_ind(i_std, 0, i);
      buffer2[i]=-MathRand()%5;
   }
   return(rates_total);
}

double _ind(int hnd, int buf, int index){
   if(index < 0) return(EMPTY_VALUE);
   double Arr[];
   return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);
}
 

我不知道这是否是一个错误或奇怪的行为,但在MT4策略测试器中,指标的缓冲区大小约为1000 +/- 3个单元。

对于其他类型的测试--演示或真实--缓冲区内的单元数与终端设置 中允许的条数差不多。

我想问这是一个错误还是本来就应该如此,我还注意到在测试时可以编辑指标而不需要停止测试者。我还没有在任何地方读到关于专家顾问的信息,但感谢你的提醒!