绘制一个正方形或长方形。真的需要帮助... - 页 6 12345678 新评论 Alex_Profit 2016.10.18 16:17 #51 evillive:那么,它在哪里工作?它在每个柱子上画线,而不是在TF上画线。或者在上图中是TF=H1?在一张纸上计算出每个周期迭代时的极限和 i 会是多少。根据我的理解,上面显示的我的例子从来没有交代过。可以使用指标缓冲区来绘制刻度线箭头,也可以使用连接烛台阴影的线条。 PERIOD_H;。在H4时期以下,一切都画得很好。 i = 0; 限制是外部变量,默认=5。extern int barsToProcess = 5; //--- 要显示的周期(行)数。"滴答 "箭头可以使用指标缓冲区绘制,也可以使用连接蜡烛图阴影的线条。"我是这样理解的。在索引为[Limit]的缓冲区中,数组中的高值被分配。double Buf_High[Limit] =mqlRates[0].high;我明白如何在每条杠上打圈。但我不明白如何在每一个H4柱上都这样做。 Vitalie Postolache 2016.10.18 18:14 #52 Alex_Profit:PERIOD_H;。在H4时期以下,一切都画得很好。 i = 0; 限制是一个外部变量,默认=5。extern int barsToProcess = 5; //--- 显示的周期数(行)。"滴答 "箭头可以使用指标缓冲区绘制,也可以使用连接蜡烛图阴影的线条。"我是这样理解的。在索引为[Limit]的缓冲区中,数组中的高值被分配。double Buf_High[Limit] =mqlRates[0].high;我明白如何在每条杠上打圈。但我不明白如何在每一个H4柱上都这样做。在使用循环之前要弄清楚它的工作原理。i = 0只是第一次,然后i++,直到极限。第一次运行指标时,limit=Bars-counted_bars=Bars-0=Bars。在这种情况下,for 循环理论上应该从0算到图表上的条数。但是!!!。第二个while 循环在这里干扰了,它重新计算了i和limit。我不明白为什么我应该这样做,谁教我这样做的......。下面是一个例子,我们设置:bar - 100,barToProcess = 5。在第一个指标运行期间,counted_bars=0,还没有被计算,因此limit=100。这意味着开头的 循环应该被执行100次,从0到99。for 循环的迭代。i=0, limit=barsToProcess=5,while(i<5) - 画有线条和刻度的内部循环被执行5次,从0到4,每次i++,在完成while 后- i=5, limit=5。2. i=5=limit -for 循环完成。这就是了!该指标在下一个tick之前不做任何进一步的工作。一个刻度线来了,counted_bars=99,limit=Bars-counted_bars=100-99=1。for 循环被执行一次,while 循环根本没有被执行(因为条件if(limit>barsToProcess) 没有被满足)。我们将继续下去,直到指标 从图表中卸载 或时间框架被改变,一般来说,直到重新初始化指标。事实上,当指标被加载到图表上时,它只画一次刻度线,在重新初始化之前,它一直处于空闲状态。问题是我们为什么需要这样一个指标?脚本可以处理单个响应。 面向初学者的 MQL4 语言。自定义指标(第 1 预测时间序列(第 2 部分):最小二乘支持向量机(LS-SVM) 可控优化: 模拟退火 Alex_Profit 2016.10.19 03:53 #53 我已经重写了代码。循环的一切似乎都是正确的。仍然存在着划定 "缓冲 "线的问题。#property strict #property indicator_chart_windowextern int Total_bars = 5; //--- Кол-во отображаемых Элементов в истории //--- Глобальные переменные string Name_VLine; //--- Имя Элементовstring Name_CHECK; //--- Имя ЭлементовMqlRates mqlRates[1]; //Структура для хранения информации #property indicator_buffers 1#property indicator_type1 DRAW_LINE // тип графического построения - линия #property indicator_color1 clrRed // цвет линии #property indicator_style1 STYLE_SOLID // стиль линии #property indicator_width1 1 // толщина линии double Buff_High[]; //+------------------------------------------------------------------+int OnInit() { return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+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[]){ SetIndexBuffer(0,Buff_High); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(0,DRAW_SECTION); //+------------------------------------------------------------------+int limit; //--- переменная старт кол-во баров. Линии рисуем о по всем барамint counted_bars = IndicatorCounted(); //--- перем counted_bars = функц. Возвращает количество баров if(counted_bars > 0) counted_bars --; //--- последний посчитанный бар будет пересчитан //--- основной цикл limit = Bars - counted_bars; for(int i = 0; i <= limit; i ++) { if(limit > Total_bars) //--- Если кол-во баров на графике > Кол-ву выбранных элементов { limit = Total_bars-1; //--- тогда кол-во баров на графике = Кол-ву выбранных элементов } datetime t_Line = iTime(Symbol(),PERIOD_H4,i); //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates); //--- Структура для хранения информации //+------------------------ Рисуем вертикальную линии -----------------------------------------------------+ ObjectCreate (Name_VLine + " VLine" + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0); //--- Создаём обьект вертикальную линию ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_STYLE,2); //--- Со стилем ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_COLOR,DimGray); //--- Со цветом ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_WIDTH,0); //--- С толщиной ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_BACK,0); //--- С типом отображения. Объект на заднем плане //--- кубики по хай (В место галочек нужно подставить кубики) ObjectCreate (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high); ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); //--- кубики по лоу (В место галочек нужно подставить кубики) ObjectCreate (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low); ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); // На ТФ Н4 линии рисуются по хайям, // При смене ТФ линия рисуется на растоянии параметра Total_bars. //--- Заполнение буфера Buff_High[i] = mqlRates[0].high ; } return(rates_total);}//+------------------------------------------------------------------+ ArrayIsSeries DRAW_NONE FileReadDouble Alex_Profit 2016.10.19 04:03 #54 evillive:我为什么要这样做,谁教我的,我不明白......。我找到了一个合适的指示器,并将其 "分解",直到剩下我需要的片段。然后我把这些代码片段组合起来,得到了我需要的东西。它是这样的。"我正在学习。" Vitalie Postolache 2016.10.19 05:11 #55 Alex_Profit:我已经重写了代码。循环的一切似乎都是正确的。仍然存在着划定 "缓冲 "线的问题。要粘贴代码,在信息编辑窗口的顶部面板上有一个SRC按钮,它可以很好地插入代码,而且没有空行。线条可能也要由对象来画(趋势),将之前的时间/价格存储在单独的变量中,并作为第二点坐标使用。要用另一个符号来替换一个刻度线 -OBJ_ARROW 和ARROW_CODE。 Alexey Viktorov 2016.10.19 08:59 #56 evillive:为了插入代码,在信息编辑窗口的顶部面板上有一个SRC按钮,可以很好地插入代码,而且没有空行。线条可能也要由对象来画(趋势),将之前的时间/价格存储在单独的变量中,并作为第二点坐标使用。要用另一个符号来替换一个刻度线 -OBJ_ARROW和ARROW_CODE。什么是不喜欢的DRAW_SECTION1 非空线值之间的线段 Alex_Profit 2016.10.19 11:37 #57 AlexeyVik: А чем не нравитсяDRAW_SECTION1 Отрезки между непустыми значениями линии我不知道如何应用它。 Alex_Profit 2016.10.19 11:41 #58 AlexeyVik:有什么理由不喜欢DRAW_SECTION1 线段的非空值之间的线段埃维利夫。这条线可能也要由对象来画(趋势),将之前的时间/价格存储在单独的变量中,并作为第二点坐标使用。这个想法是好的。如果成功的话,我可以试一试。事实上,没有必要画它。只要它能正常工作就好。 Alexey Viktorov 2016.10.19 11:54 #59 Alex_Profit:我不知道如何应用它。只需在OnInit()中,而不是在 SetIndexStyle(0, DRAW_LINE);写SetIndexStyle(0,DRAW_SECTION)。 Alex_Profit 2016.10.19 13:50 #60 不知为何没有变化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[]) { SetIndexBuffer(0,Buff_High); //SetIndexStyle(0,DRAW_LINE); SetIndexStyle(0,DRAW_SECTION); 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么,它在哪里工作?它在每个柱子上画线,而不是在TF上画线。或者在上图中是TF=H1?
在一张纸上计算出每个周期迭代时的极限和 i 会是多少。
根据我的理解,上面显示的我的例子从来没有交代过。
可以使用指标缓冲区来绘制刻度线箭头,也可以使用连接烛台阴影的线条。
PERIOD_H;。在H4时期以下,一切都画得很好。
i = 0;
限制是外部变量,默认=5。
extern int barsToProcess = 5; //--- 要显示的周期(行)数。
"滴答 "箭头可以使用指标缓冲区绘制,也可以使用连接蜡烛图阴影的线条。"
我是这样理解的。
在索引为[Limit]的缓冲区中,数组中的高值被分配。
double Buf_High[Limit] =mqlRates[0].high;
我明白如何在每条杠上打圈。但我不明白如何在每一个H4柱上都这样做。
PERIOD_H;。在H4时期以下,一切都画得很好。
i = 0;
限制是一个外部变量,默认=5。
extern int barsToProcess = 5; //--- 显示的周期数(行)。
"滴答 "箭头可以使用指标缓冲区绘制,也可以使用连接蜡烛图阴影的线条。"
我是这样理解的。
在索引为[Limit]的缓冲区中,数组中的高值被分配。
double Buf_High[Limit] =mqlRates[0].high;
我明白如何在每条杠上打圈。但我不明白如何在每一个H4柱上都这样做。
在使用循环之前要弄清楚它的工作原理。i = 0只是第一次,然后i++,直到极限。
第一次运行指标时,limit=Bars-counted_bars=Bars-0=Bars。
在这种情况下,for 循环理论上应该从0算到图表上的条数。但是!!!。第二个while 循环在这里干扰了,它重新计算了i和limit。
我不明白为什么我应该这样做,谁教我这样做的......。
下面是一个例子,我们设置:bar - 100,barToProcess = 5。
在第一个指标运行期间,counted_bars=0,还没有被计算,因此limit=100。这意味着开头的 循环应该被执行100次,从0到99。
for 循环的迭代。
i=0, limit=barsToProcess=5,while(i<5) - 画有线条和刻度的内部循环被执行5次,从0到4,每次i++,在完成while 后- i=5, limit=5。
2. i=5=limit -for 循环完成。
这就是了!该指标在下一个tick之前不做任何进一步的工作。一个刻度线来了,counted_bars=99,limit=Bars-counted_bars=100-99=1。
for 循环被执行一次,while 循环根本没有被执行(因为条件if(limit>barsToProcess) 没有被满足)。我们将继续下去,直到指标 从图表中卸载 或时间框架被改变,一般来说,直到重新初始化指标。
事实上,当指标被加载到图表上时,它只画一次刻度线,在重新初始化之前,它一直处于空闲状态。问题是我们为什么需要这样一个指标?脚本可以处理单个响应。
我已经重写了代码。循环的一切似乎都是正确的。
仍然存在着划定 "缓冲 "线的问题。
#property strict
#property indicator_chart_window
extern int Total_bars = 5; //--- Кол-во отображаемых Элементов в истории
//--- Глобальные переменные
string Name_VLine; //--- Имя Элементов
string Name_CHECK; //--- Имя Элементов
MqlRates mqlRates[1]; //Структура для хранения информации
#property indicator_buffers 1
#property indicator_type1 DRAW_LINE // тип графического построения - линия
#property indicator_color1 clrRed // цвет линии
#property indicator_style1 STYLE_SOLID // стиль линии
#property indicator_width1 1 // толщина линии
double Buff_High[];
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
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[])
{
SetIndexBuffer(0,Buff_High);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(0,DRAW_SECTION);
//+------------------------------------------------------------------+
int limit; //--- переменная старт кол-во баров. Линии рисуем о по всем барам
int counted_bars = IndicatorCounted(); //--- перем counted_bars = функц. Возвращает количество баров
if(counted_bars > 0) counted_bars --; //--- последний посчитанный бар будет пересчитан
//--- основной цикл
limit = Bars - counted_bars;
for(int i = 0; i <= limit; i ++)
{
if(limit > Total_bars) //--- Если кол-во баров на графике > Кол-ву выбранных элементов
{
limit = Total_bars-1; //--- тогда кол-во баров на графике = Кол-ву выбранных элементов
}
datetime t_Line = iTime(Symbol(),PERIOD_H4,i); //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара
CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates); //--- Структура для хранения информации
//+------------------------ Рисуем вертикальную линии -----------------------------------------------------+
ObjectCreate (Name_VLine + " VLine" + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0); //--- Создаём обьект вертикальную линию
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_STYLE,2); //--- Со стилем
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_COLOR,DimGray); //--- Со цветом
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_WIDTH,0); //--- С толщиной
ObjectSet (Name_VLine + " VLine" + DoubleToStr(i,0),OBJPROP_BACK,0); //--- С типом отображения. Объект на заднем плане
//--- кубики по хай (В место галочек нужно подставить кубики)
ObjectCreate (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high);
ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen);
//--- кубики по лоу (В место галочек нужно подставить кубики)
ObjectCreate (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low);
ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen);
// На ТФ Н4 линии рисуются по хайям,
// При смене ТФ линия рисуется на растоянии параметра Total_bars.
//--- Заполнение буфера
Buff_High[i] = mqlRates[0].high ;
}
return(rates_total);
}
//+------------------------------------------------------------------+
我为什么要这样做,谁教我的,我不明白......。
我找到了一个合适的指示器,并将其 "分解",直到剩下我需要的片段。然后我把这些代码片段组合起来,得到了我需要的东西。它是这样的。
"我正在学习。"
我已经重写了代码。循环的一切似乎都是正确的。
仍然存在着划定 "缓冲 "线的问题。
要粘贴代码,在信息编辑窗口的顶部面板上有一个SRC按钮,它可以很好地插入代码,而且没有空行。
线条可能也要由对象来画(趋势),将之前的时间/价格存储在单独的变量中,并作为第二点坐标使用。
要用另一个符号来替换一个刻度线 -OBJ_ARROW 和ARROW_CODE。
为了插入代码,在信息编辑窗口的顶部面板上有一个SRC按钮,可以很好地插入代码,而且没有空行。
线条可能也要由对象来画(趋势),将之前的时间/价格存储在单独的变量中,并作为第二点坐标使用。
要用另一个符号来替换一个刻度线 -OBJ_ARROW和ARROW_CODE。
什么是不喜欢的
1
非空线值之间的线段
А чем не нравится
1
Отрезки между непустыми значениями линии
我不知道如何应用它。
有什么理由不喜欢
1
线段的非空值之间的线段
这条线可能也要由对象来画(趋势),将之前的时间/价格存储在单独的变量中,并作为第二点坐标使用。
这个想法是好的。如果成功的话,我可以试一试。
事实上,没有必要画它。只要它能正常工作就好。
Alex_Profit:
我不知道如何应用它。
只需在OnInit()中,而不是在
SetIndexStyle(0, DRAW_LINE);
写
SetIndexStyle(0,DRAW_SECTION)。
不知为何没有变化