错误、漏洞、问题 - 页 1093 1...108610871088108910901091109210931094109510961097109810991100...3184 新评论 Anatoli Kazharski 2014.01.14 18:52 #10921 zfs: 那里是空的,尽管颜色是在代码中设置的。说了这么多,积极的结果是存在的,但它消失了,不管它听起来多么荒谬)。 那么一个再现问题的简短代码将有助于解决这个问题。 Vasiliy Smirnov 2014.01.15 01:22 #10922 tol64: 那么,重现该问题的简短代码将有所帮助。#property indicator_separate_window #property indicator_buffers 6 // Количество буферов для расчёта индикатора #property indicator_plots 2 // Количество графических серий #property indicator_label1 "Open;High;Low;Close" //перечисление методов отображения индикатора enum ViewInd { Line, // линии Bar, // бары Candles // свечи }; input ViewInd _ViewInd= Line; //вид индикатора double op[],cl[],hi[],lo[],s[]; double buffer_color_line[];//Буфер для индекса цвета int OnInit() { for (int i=0;i<=5;i++) PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0); ArrayInitialize(op,0);ArrayInitialize(cl,0); ArrayInitialize(hi,0);ArrayInitialize(lo,0); ArrayInitialize(s,0); if(_ViewInd==Line){ SetIndexBuffer(5,s,INDICATOR_DATA);//Привязка массива к буферу PlotIndexSetInteger(5,PLOT_DRAW_TYPE,DRAW_LINE); PlotIndexSetInteger(5,PLOT_LINE_STYLE,STYLE_SOLID); PlotIndexSetInteger(5,PLOT_LINE_COLOR,clrRed); ArraySetAsSeries(s,true); } else{ SetIndexBuffer(0,op,INDICATOR_DATA); SetIndexBuffer(1,hi,INDICATOR_DATA); SetIndexBuffer(2,lo,INDICATOR_DATA); SetIndexBuffer(3,cl,INDICATOR_DATA); SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX);//Сопоставляем массив-буфер индексов цветов с буфером индикатора ArraySetAsSeries(op,true); ArraySetAsSeries(hi,true); ArraySetAsSeries(lo,true); ArraySetAsSeries(cl,true); ArraySetAsSeries(buffer_color_line,true); //Задаем количество индексов цветов для графического построения PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,2); if (_ViewInd==Candles)PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_COLOR_CANDLES); else PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_BARS); //Задаем цвет для каждого индекса PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue); //Нулевой индекс -> Синий PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrOrange); //Первый индекс -> Оранжевый } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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[]) { int limit;//MQL 4 RULEZZZ int counted_bars=prev_calculated; //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; limit=rates_total-counted_bars; for (int i=0;i<limit;i++){ if(_ViewInd==Line)s[i]=MathRand(); else{ op[i]=MathRand(); cl[i]=MathRand(); if (op[i]>cl[i])buffer_color_line[i]=1;else buffer_color_line[i]=0; hi[i]=32767; lo[i]=0; } } return(rates_total); } //+------------------------------------------------------------------+ 情况是这样的。 Andrew Petras 2014.01.15 11:18 #10923 zfs: 像这样。简称后的数值会这样显示for (int i=0;i<=5;i++) {PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0);};这是 关于缓冲区内的顺序。https://www.mql5.com/ru/forum/12882#comment_539990 В каком порядке делать SetIndexBuffer() и зависит ли он он порядка директив #property indicator_x ? www.mql5.com может ли кто-то на пальцах обьяснить правила привязки индикаторного буфера к опр. Vasiliy Smirnov 2014.01.15 11:58 #10924 以及它如何帮助我,我什么都不明白)。可以改变一些东西使其发挥作用,但它仍然是歪的,我想知道更多关于它的信息。 Anatoli Kazharski 2014.01.15 12:02 #10925 zfs: 情况是这样的。完全混乱,一塌糊涂。)这是一个工作版本(纠正了错误并刷了一遍)。//+------------------------------------------------------------------+ //| #Test.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window //--- #property indicator_buffers 5 // Количество буферов для расчёта индикатора #property indicator_plots 1 // Количество графических серий //--- #property indicator_color1 clrDodgerBlue,C'0,50,100' //--- Перечисление методов отображения индикатора enum ViewInd { Line, // линии Bar, // бары Candles // свечи }; //--- Внешние параметры input ViewInd _ViewInd=Line; // Вид индикатора //--- double op[],cl[],hi[],lo[]; double buffer_color_line[]; // Буфер для индекса цвета //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(_ViewInd==Line) { //--- Привязка массива к буферу SetIndexBuffer(0,cl,INDICATOR_DATA); //--- PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE); PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); } else { SetIndexBuffer(0,op,INDICATOR_DATA); SetIndexBuffer(1,hi,INDICATOR_DATA); SetIndexBuffer(2,lo,INDICATOR_DATA); SetIndexBuffer(3,cl,INDICATOR_DATA); //--- Сопоставляем массив-буфер индексов цветов с буфером индикатора SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX); //--- if(_ViewInd==Candles) PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_CANDLES); else PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_BARS); } //--- Установим метки для текущего таймфрейма // В режиме линия только цена закрытия if(_ViewInd==Line) PlotIndexSetString(0,PLOT_LABEL,"Close"); //--- В других режимах все цены баров/свеч // В качестве разделителя используется ";" else if(_ViewInd==Bar || _ViewInd==Candles) PlotIndexSetString(0,PLOT_LABEL,"Open;"+"High;"+"Low;"+"Close"); //--- PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); //--- ArrayInitialize(op,0); ArrayInitialize(cl,0); ArrayInitialize(hi,0); ArrayInitialize(lo,0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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[]) { int limit=0; //MQL 4 RULEZZZ //--- if(prev_calculated==0) limit=0; else limit=prev_calculated-1; //--- for(int i=limit; i<rates_total; i++) { if(_ViewInd==Line) cl[i]=MathRand(); else { op[i]=MathRand(); cl[i]=MathRand(); hi[i]=32767; lo[i]=1; //--- if(op[i]>cl[i]) buffer_color_line[i]=1; else buffer_color_line[i]=0; } } //--- return(rates_total); } //+------------------------------------------------------------------+ Andrew Petras 2014.01.15 12:12 #10926 它是如何工作的if(_ViewInd==Line){ } else{ if (_ViewInd==Candles) else如果enum ViewInd { Line, // линии Bar, // бары Candles // свечи }; ?仔细检查所有的条件和括号,在没有循环的情况下,线性地设置缓冲区属性,从上面的链接订购。 Anatoli Kazharski 2014.01.15 12:14 #10927 Silent:...仔细检查所有的条件和括号,在没有循环的情况下,线性地设置缓冲区属性,从上面的链接订购。 那里根本就不需要一个循环。更准确地说,在所有的映射选项中,该属性只需要为一个缓冲区设置。 Andrew Petras 2014.01.15 12:17 #10928 tol64: 根本就不需要一个循环。 一般来说是的,但如果有很多缓冲区,就会短一些:-)虽然我不这么做。对我来说,阅读线性肖像更容易。 Anatoli Kazharski 2014.01.15 12:19 #10929 Silent: 一般来说是的,但如果有很多缓冲区,那就有点短了:-)虽然我不这么做。对我来说,阅读线性杂烩更容易。 事实上,可以有如此多的缓冲区(最大512个),以至于在没有循环的情况下更难读取编织的内容。)在这个变体中,只有一个缓冲区。 Vasiliy Smirnov 2014.01.15 12:33 #10930 tol64: 根本就不需要一个循环。 大)。谢谢你。像时钟一样。白兰地正在冷却)。 1...108610871088108910901091109210931094109510961097109810991100...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那里是空的,尽管颜色是在代码中设置的。说了这么多,积极的结果是存在的,但它消失了,不管它听起来多么荒谬)。
那么,重现该问题的简短代码将有所帮助。
像这样。
简称后的数值会这样显示
这是 关于缓冲区内的顺序。https://www.mql5.com/ru/forum/12882#comment_539990情况是这样的。
完全混乱,一塌糊涂。)这是一个工作版本(纠正了错误并刷了一遍)。
它是如何工作的
如果
?
仔细检查所有的条件和括号,在没有循环的情况下,线性地设置缓冲区属性,从上面的链接订购。
...
仔细检查所有的条件和括号,在没有循环的情况下,线性地设置缓冲区属性,从上面的链接订购。
根本就不需要一个循环。
一般来说是的,但如果有很多缓冲区,那就有点短了:-)虽然我不这么做。对我来说,阅读线性杂烩更容易。
根本就不需要一个循环。