新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 357

 
STARIJ:
试着在文件中写上 日期、时间、出价和每一个刻度 的计算结果。然后将其上传到Excel并进行检查。每十几行的程序都要进行核对,这几乎是没有意义的!

但你看,你在条件运算符的每个分支中都有返回,也就是说,它总是被执行。所以我们把它从条件运算符中拿出来。

Bid[1] - 是这样吗?


谢谢你。我现在就去试试。我理解了你的代码要点,这对我来说已经是一个很大的成就了:)我也看到了自己的不足之处。

什么是SRC按钮?

 
STARIJ:
尝试 日期、时间、出价和你的计算结果写到文件中每一个刻度。然后将其上传到Excel并进行检查。每十几行的程序都要进行核对,这几乎是没有意义的!

但你看,你在条件运算符的每个分支中都有返回,也就是说,它总是被执行。所以我们把它从条件运算符的范围中拿出来。

Bid[1] - 是这样的吗?


我已经在自定义指标的"构造函数 "中插入了代码。我已经把它编好了。编译器产生了1个警告:两个OnCalculate被定义了。将使用OHLC版本(我不明白它是什么意思)。

得到了汇编的产品。把它附在图表上。图表的独立窗口被打开,但它没有显示任何关于直方图的信息,尽管有刻度。

有什么问题吗?请指教?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

我把代码插入了自定义指标的"构造函数 "中。编纂了它。编译器给了我1个警告:两个OnCalculate被定义。将使用OHLC版本(我不知道它是什么意思)。

得到了汇编的产品。把它附在图表上。图表的独立窗口被打开,但它没有显示任何关于直方图的信息,尽管有刻度。

有什么问题吗?你能提供建议吗?

当你在这里粘贴代码时,使用信息编辑器SRC的按钮--在信息领域的顶部,在信息格式面板上有许多有用的东西。

抬起你的眼睛,就在你打字的文本上方,这并不难,是吗?而且,人们看正常的代码而不是看招摇过市的代码会更愉快,不是吗?

我已经在你的帖子中正确插入了你的代码(SRC)。

 
Artyom Trishkin:

当你在这里粘贴代码时,使用SRC帖子编辑器按钮--在输入框顶部的帖子格式化面板中,有很多有用的东西。

抬起你的眼睛,就在你打字的文字上方,这并不难,不是吗?而且,人们看的是正常的代码,而不是挥霍的东西,这更让人高兴,不是吗?

我把你的代码正确地放在你的帖子里(SRC)。


是的,谢谢。我不知道这一点。

 
YarTrade:

向编译器发出了1个警告:定义了两个OnCalculate。将使用OHLC版本(不确定这意味着什么)。

得到了汇编的产品。把它附在图表上。图表的独立窗口被打开,但它没有显示任何关于直方图的信息,尽管有刻度。

有什么问题吗?请指教?

这个函数以前叫Start,现在在专家顾问中叫OnTick,在指标中叫OnCalculate。编译器警告说:你在不同的名字下有两次相同的函数。将Start的内容移到OnCalculate,并删除Start。你还需要在你的程序中描述,它应该显示什么和如何显示。首先为自己决定--什么形象必须存在?最好是通过编写脚本开始学习MQL语言。一个专家顾问更复杂,一个指标更复杂

 
STARIJ:

该函数过去被称为Start,现在在EA中被称为OnTick,在指标中被称为OnCalculate。编译器警告说:你在不同的名字下有两次相同的函数。将Start的内容移到OnCalculate,并删除Start。你还需要在你的程序中描述,它应该显示什么和如何显示。首先为自己决定--什么形象必须存在?最好是通过编写脚本开始学习MQL语言。专家顾问更难,指标则更难。


我不能在OnCalculate 中插入Start的内容,并且得到了很多的错误

 
YarTrade: 我不能把Start的内容插入OnCalculate中,它产生了很多错误


指示器只显示从开始的信息。数据窗口(Ctrl-D)显示光标所指向的蜡烛图的数据。

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

以及你如何用函数的名称来表述所创造的情况?
[删除]  
STARIJ:
那么你如何用函数名称来制定所创造的情况呢?

开始--过时的名字。OnTick()是刻度处理函数的实际名称。

总之,你如何定义它没有任何区别,只是 "潮流 "这个词让我微笑。

 
Alexey Kozitsyn:

开始--过时的名字。OnTick()是刻度处理函数的实际名称。

总之,你如何定义它并不重要,只是 "潮流 "这个词让你微笑。

过时是指不再使用。但是,开始活着,并将继续活着。