新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1041 1...103410351036103710381039104010411042104310441045104610471048...1953 新评论 [删除] 2020.01.16 09:42 #10401 Igor Makanu: 试着用不同的方式提问,你的问题可能不清楚 我试着解释一下。但请记住,我不是一个程序员,实际上。 我们有一个滴答指标,在投标值上建立一个曲线。 #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Aqua double x[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(1); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,x); SetIndexDrawBegin(0,0); SetIndexLabel(0,"x"); SetIndexShift(0,0); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double b=MarketInfo(Symbol(),MODE_BID); x[0]=b; for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];} return(0); } //+------------------------------------------------------------------+ 现在我想做的是。 将指标附在图表 上。获取bid1在第一个tick上的第一个值。记住它(我是这样做的--我进入第二个缓冲区y[0],并在init()中记录其值。) 在第二次打勾时,我们得到bid2的第二个值。 然后我们需要得到积分的差异。delta=bid1-bid2(我是这样做的:delta=x[0]-x[1])。 现在把delta加到y[0]上,得到y[1]的值,它实际上与bid2的值相对应。 指标曲线应该与我们要找的曲线相同,但它是用出价差的计算值来绘制的。 这个指标需要作为进一步计算的模板。 不要扔石头。我尽我所能地解释。 谢谢你。 Igor Makanu 2020.01.16 10:01 #10402 Oleg Bondarev: 我试着解释一下。但请记住,实际上我是一个程序员新手。 我们有一个Tick指标,它通过出价值建立一个曲线。 现在我想做的是。 将指标 固定在图表上。获取bid1在第一个tick上的第一个值。记住它(我是这样做的--我进入第二个缓冲区y[0],并在init()中记录其值。) 在第二次打勾时,我们得到bid2的第二个值。 然后我们需要得到积分的差异。delta=bid1-bid2(我是这样做的:delta=x[0]-x[1])。 现在把delta加到y[0]上,得到y[1]的值,它实际上与bid2的值相对应。 指标曲线应该与我们要找的曲线相同,但它是用出价差的计算值来绘制的。 这个指标需要作为进一步计算的模板。 不要扔石头。我试图尽可能地解释。 谢谢你。 不清楚你想做什么 这里有一个普遍的问题--你用指标缓冲区作为一个数组来存储ticks(Bid),指标缓冲区的大小改变了终端本身,此外,终端在一个新的条形图出现时也会改变指标缓冲区本身。 你应该使用一个数组来存储ticks,并使用一个指标缓冲区来绘制 我已经创建了一个与你类似的代码,我在一个数组中保存刻度线 #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int TickCount=10; //Размер массива тиков //--- indicator buffers double Label1Buffer[]; double TickArr[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); ArrayResize(TickArr,TickCount); //изменим размер массива ArrayInitialize(TickArr,SymbolInfoDouble(_Symbol,SYMBOL_BID)); // проинициализируем массив значением текущего Bid //--- 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[]) { for(int i=ArraySize(TickArr)-1;i>0;i--) { TickArr[i] = TickArr[i-1]; // сдвинули массив } TickArr[0] = SymbolInfoDouble(_Symbol,SYMBOL_BID); // в 0-й элемент массива запомнили новый Bid //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ 现在,你应该在这段代码中加入你的计算,并按照你的想法使用指标缓冲区Label1Buffer来绘制它 Yevhenii Levchenko 2020.01.16 12:28 #10403 如果他们增加了以编程方式改变另一个指标的属性的可能性,那就更好了。粗略地说,在图表中添加(以编程方式)另一个指标后,你可以设置其颜色、风格和线条的粗细 [删除] 2020.01.16 12:44 #10404 Igor Makanu: 不清楚你想做什么 这就是确切的问题--你用指标缓冲区作为数组来存储ticks(Bid),指标缓冲区的大小改变了终端本身,此外--当一个新的bar出现时,终端会自己移动指标缓冲区。 你应该使用一个数组来存储ticks,并使用一个指标缓冲区来绘制 我已经创建了一个与你类似的代码,我在一个数组中保存刻度线 现在,你必须在这段代码中加入你的计算,并按照你的想法,使用指标缓冲区Label1Buffer来绘制它 谢谢你的答复。我再折磨你一下。 我是否在这里加入计算? int OnCalculate() 以下是我的计算结果。 if(TickArr[0]>TickArr[1]) { Label1Buffer[0]=Label1Buffer[1]+(TickArr[0]-TickArr[1]); } if(TickArr[0]<TickArr[1]) { Label1Buffer[0]=Label1Buffer[1]-(TickArr[0]-TickArr[1]); } if(TickArr[0]==TickArr[1]) { Label1Buffer[0]=Label1Buffer[1]; } 添加了它,但什么也没有。 Alexey Viktorov 2020.01.16 12:45 #10405 Yevhenii Levchenko: 如果他们增加了以编程方式改变另一个指标的属性的可能性,那就更好了。粗略地说,在图表中添加(以编程方式)另一个指标后,你可以设置线条的 颜色、样式和厚度 使用画布并绘制卡通。 [删除] 2020.01.16 14:40 #10406 我再附一张图片。 Igor Makanu 2020.01.16 15:06 #10407 Oleg Bondarev: 添加了,也没有。 这不是它的工作方式 )))) 在MQL中使用指示器缓冲区 绘图,意味着在指示器缓冲区中放入一个值 - 在我的例子中,它是Label1Buffer(分配一个值)。 在你的例子中,你只在满足条件时才赋值,如果不满足条件则不赋值?- 所以什么都不会被印出来。 再说一遍,我创建了一个 "模板",其中数组TickArr包含了ticks Bid的值,但在你的条件中,你使用了指标缓冲区的前值--谁把什么值放在这些缓冲区中? 试着在指标缓冲区边上画一条线,然后你就可以比较一下刻度了。 Alexey Viktorov 2020.01.16 15:49 #10408 Oleg Bondarev: 我再附一张图片。 如果角度反过来呢?如何进行计算呢? Aleksey Mavrin 2020.01.16 15:55 #10409 Oleg Bondarev:我再附一张图片。 如果你说你在编程方面几乎是个零,那么你为什么要承担这种非标准的任务,也许你应该从简单的任务开始?还是为了提高你的基础知识?为你做这件事更容易,是的。 [删除] 2020.01.16 17:53 #10410 Igor Makanu: 那是不可能的 )))) 在MQL中使用指示器缓冲区 进行绘图,这意味着将一个值(分配一个值)放到指示器缓冲区中 - 在我的例子中,Label1Buffer 在你的例子中,你只在满足条件时才赋值,如果不满足条件则不赋值?- 所以什么都不会被印出来。 再说一遍,我创建了一个 "模板",其中数组TickArr包含了ticks Bid的值,但在你的条件中,你使用了指标缓冲区的前值--谁把什么值放在这些缓冲区中? 试着在指标缓冲区边上画一条线,然后你就可以比较一下刻度线。 我警告说,我是一个黑客)。 我是这样做的。 #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int TickCount=100000; //Размер массива тиков input int TickCountb=100000; //--- indicator buffers double Label1Buffer[]; double TickArr[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,Label1Buffer); ArrayResize(TickArr,TickCount); ArrayResize(Label1Buffer,TickCountb); //изменим размер массива ArrayInitialize(TickArr,MarketInfo(Symbol(),MODE_BID)); // проинициализируем массив значением текущего Bid //--- 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[]) { for(int i=ArraySize(TickArr)-1;i>0;i--) { TickArr[i] = TickArr[i-1]; // сдвинули массив } TickArr[0] = MarketInfo(Symbol(),MODE_BID); // в 0-й элемент массива запомнили новый Bid for(int j=ArraySize(TickArr)-1;j>0;j--) { Label1Buffer[j] = Label1Buffer[j-1]; // сдвинули массив } Label1Buffer[0]= TickArr[0]; //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ 现在它画出了滴答图,但有一些断线。 我在做一个4。 1...103410351036103710381039104010411042104310441045104610471048...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
试着用不同的方式提问,你的问题可能不清楚
我试着解释一下。但请记住,我不是一个程序员,实际上。
我们有一个滴答指标,在投标值上建立一个曲线。
现在我想做的是。
将指标附在图表 上。获取bid1在第一个tick上的第一个值。记住它(我是这样做的--我进入第二个缓冲区y[0],并在init()中记录其值。)
在第二次打勾时,我们得到bid2的第二个值。
然后我们需要得到积分的差异。delta=bid1-bid2(我是这样做的:delta=x[0]-x[1])。
现在把delta加到y[0]上,得到y[1]的值,它实际上与bid2的值相对应。
指标曲线应该与我们要找的曲线相同,但它是用出价差的计算值来绘制的。
这个指标需要作为进一步计算的模板。
不要扔石头。我尽我所能地解释。
谢谢你。
我试着解释一下。但请记住,实际上我是一个程序员新手。
我们有一个Tick指标,它通过出价值建立一个曲线。
现在我想做的是。
将指标 固定在图表上。获取bid1在第一个tick上的第一个值。记住它(我是这样做的--我进入第二个缓冲区y[0],并在init()中记录其值。)
在第二次打勾时,我们得到bid2的第二个值。
然后我们需要得到积分的差异。delta=bid1-bid2(我是这样做的:delta=x[0]-x[1])。
现在把delta加到y[0]上,得到y[1]的值,它实际上与bid2的值相对应。
指标曲线应该与我们要找的曲线相同,但它是用出价差的计算值来绘制的。
这个指标需要作为进一步计算的模板。
不要扔石头。我试图尽可能地解释。
谢谢你。
不清楚你想做什么
这里有一个普遍的问题--你用指标缓冲区作为一个数组来存储ticks(Bid),指标缓冲区的大小改变了终端本身,此外,终端在一个新的条形图出现时也会改变指标缓冲区本身。
你应该使用一个数组来存储ticks,并使用一个指标缓冲区来绘制
我已经创建了一个与你类似的代码,我在一个数组中保存刻度线
现在,你应该在这段代码中加入你的计算,并按照你的想法使用指标缓冲区Label1Buffer来绘制它
不清楚你想做什么
这就是确切的问题--你用指标缓冲区作为数组来存储ticks(Bid),指标缓冲区的大小改变了终端本身,此外--当一个新的bar出现时,终端会自己移动指标缓冲区。
你应该使用一个数组来存储ticks,并使用一个指标缓冲区来绘制
我已经创建了一个与你类似的代码,我在一个数组中保存刻度线
现在,你必须在这段代码中加入你的计算,并按照你的想法,使用指标缓冲区Label1Buffer来绘制它
谢谢你的答复。我再折磨你一下。
我是否在这里加入计算?
以下是我的计算结果。
添加了它,但什么也没有。
如果他们增加了以编程方式改变另一个指标的属性的可能性,那就更好了。粗略地说,在图表中添加(以编程方式)另一个指标后,你可以设置线条的 颜色、样式和厚度
使用画布并绘制卡通。
我再附一张图片。
添加了,也没有。
这不是它的工作方式 ))))
在MQL中使用指示器缓冲区 绘图,意味着在指示器缓冲区中放入一个值 - 在我的例子中,它是Label1Buffer(分配一个值)。
在你的例子中,你只在满足条件时才赋值,如果不满足条件则不赋值?- 所以什么都不会被印出来。
再说一遍,我创建了一个 "模板",其中数组TickArr包含了ticks Bid的值,但在你的条件中,你使用了指标缓冲区的前值--谁把什么值放在这些缓冲区中?
试着在指标缓冲区边上画一条线,然后你就可以比较一下刻度了。
我再附一张图片。
如果角度反过来呢?如何进行计算呢?
我再附一张图片。
那是不可能的 ))))
在MQL中使用指示器缓冲区 进行绘图,这意味着将一个值(分配一个值)放到指示器缓冲区中 - 在我的例子中,Label1Buffer
在你的例子中,你只在满足条件时才赋值,如果不满足条件则不赋值?- 所以什么都不会被印出来。
再说一遍,我创建了一个 "模板",其中数组TickArr包含了ticks Bid的值,但在你的条件中,你使用了指标缓冲区的前值--谁把什么值放在这些缓冲区中?
试着在指标缓冲区边上画一条线,然后你就可以比较一下刻度线。
我警告说,我是一个黑客)。
我是这样做的。
现在它画出了滴答图,但有一些断线。
我在做一个4。