程序库: Easy Canvas - 页 9 12345678910111213141516...19 新评论 jaffer wilson 2020.11.10 08:33 #81 该库可以在策略测试器中 使用吗?我想在 Strategy Tester 中尝试手动测试。 Nikolai Semko 2020.11.10 15:03 #82 jaffer wilson: 该库可以在策略测试器中 使用吗?我想在 Strategy Tester 中尝试手动测试。 可以。但您需要注意两点,一是测试器中的事件无法正常工作,二是由于时间密度较高,不要让测试器超负荷运行画布计算。 稍后我会举例说明。 不过现在你可以先看看这里。 https://www.mql5.com/en/forum/229521/page4#comment_15005864 Possibilities of Canvas. 2020.01.18 www.mql5.com Demonstration of the possibilities of Сanvas in dynamics. The picture never repeats. This script also works on MQL4, but much slower... Nikolai Semko 2020.11.10 22:51 #83 jaffer wilson: 该库可以在策略测试器中 使用吗?我想尝试在 Strategy Tester 中进行手动测试。 #property indicator_chart_window #include <Canvas\iCanvas.mqh> //https://www.mql5.com/zh/code/22164 //+------------------------------------------------------------------+ int max=0,min=0; double Max=0,Min=0; 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[]) { max= ArrayMaximum(high,rates_total-W.Left_bar,W.BarsInWind); min= ArrayMinimum(low,rates_total-W.Left_bar,W.BarsInWind); Max=high[max]; Min=low[min]; max=rates_total-1-max; min=rates_total-1-min; if (rates_total>0) Draw(); return(rates_total); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, // 事件标识符 const long& lparam, // 长类型事件参数 const double& dparam, // 事件参数为双类型 const string& sparam) { // 字符串类型的事件参数 if (id==CHARTEVENT_MOUSE_MOVE) Draw(); } //+------------------------------------------------------------------+ void Draw () { static double pr=0; static uint clr=0; static uint lastCalc=0; uint cur=GetTickCount(); if (cur-lastCalc<30) return; lastCalc=cur; double Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID); if (Canvas.tester) ChartChanged(); // 如果处于测试模式,更新图表参数 if (pr<Ask) clr=0x800000FF; // 红色 if (pr>Ask) clr=0x80FF0000; // 蓝色 Canvas.Erase(clr); Canvas.FillCircle((int)Canvas.X(double(max)),(int)Canvas.Y(Max),20,0xAA50FF50); Canvas.FillCircle((int)Canvas.X(double(min)),(int)Canvas.Y(Min),20,0xAAFFFF50); Canvas.CurentFont("Tahoma",50,50,0xFF80FF80,0.4); Canvas.TextPosition(W.MouseX,W.MouseY); Canvas.Comm("Ask = " + DoubleToString(Ask,_Digits)); Canvas.Comm("Bid = " + DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)); Canvas.Comm("Spread = " + DoubleToString((Ask-Bid)/_Point,0)); Canvas.Update(); pr=Ask; } //+------------------------------------------------------------------+ 黄色突出显示的内容是减少测试器负载所必需的 绿色突出显示的内容是正确渲染坐标所必需的。试着删除这一行,看看在测试器中会发生什么。 在该指标中,屏幕的颜色会根据价格变化的方向而改变,屏幕上的最低价和最高价会突出显示,并显示鼠标指针当前位置的买入价和卖出价的文本信息。 但遗憾的是,在 Tester 中,只有按下鼠标左键时才会执行鼠标移动事件。 这不仅适用于我的 iCanvas 类,也适用于 Tester 中的任何图形输出。 只有我有更简单的方法来实现它。 甚至 GUI 控件也能很好地工作: jaffer wilson 2020.11.11 11:04 #84 非常感谢你的答复和例子。 Nikolai Semko 2020.11.11 13:48 #85 jaffer wilson: 非常感谢你的回答和示例。 没问题 Mighty7 2020.11.20 23:24 #86 你好、 非常好的作品。谢谢。 能否请您检查一下 CanvasBar 示例?即使按照您的建议进行了修改,它在测试器中也无法运行。 敬礼,Mighty Nikolai Semko 2020.11.20 23:47 #87 Mighty7:你好非常好的作品。谢谢。能否请您检查一下 CanvasBar 示例?即使按照您的建议进行了修改,它在测试器中也无法运行。敬礼,Mighty 尝试将 ChartChanged 移到CopyRates 之前 Mighty7 2020.11.21 00:25 #88 感谢您的快速回复,但它仍然不起作用。 Nikolai Semko 2020.11.21 00:51 #89 Mighty7: 感谢您的快速回复,但它仍然不起作用。 这是因为调用来自OnChartEvent,而该调用在测试器中无法正常工作。试试这个。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[]) { if(rates_total==prev_calculated) { Bar0.close=close[rates_total-1];Bar0.open=open[rates_total-1]; Bar0.high=high[rates_total-1];Bar0.low=low[rates_total-1]; ShowBars(false); } else if (Canvas.tester) ShowBars(); return(rates_total); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_CHART_CHANGE) ShowBars(true); } 以后请附上代码或链接。毕竟,我不记得我的代码名称了,那是我差不多两年前写的。 附加的文件: CanvasBar.mq5 7 kb Mighty7 2020.11.21 19:50 #90 "今后,请附上代码或链接。毕竟,我不记得我的代码名称了,那是我差不多两年前写的"。 好的,我会的。现在它可以工作了(我不得不删除GetTickCount 行来实现同步)。谢谢。 12345678910111213141516...19 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
该库可以在策略测试器中 使用吗?我想在 Strategy Tester 中尝试手动测试。
该库可以在策略测试器中 使用吗?我想尝试在 Strategy Tester 中进行手动测试。
黄色突出显示的内容是减少测试器负载所必需的
绿色突出显示的内容是正确渲染坐标所必需的。试着删除这一行,看看在测试器中会发生什么。
在该指标中,屏幕的颜色会根据价格变化的方向而改变,屏幕上的最低价和最高价会突出显示,并显示鼠标指针当前位置的买入价和卖出价的文本信息。
但遗憾的是,在 Tester 中,只有按下鼠标左键时才会执行鼠标移动事件。
这不仅适用于我的 iCanvas 类,也适用于 Tester 中的任何图形输出。
只有我有更简单的方法来实现它。
甚至 GUI 控件也能很好地工作:
非常感谢你的回答和示例。
你好、
非常好的作品。谢谢。
能否请您检查一下 CanvasBar 示例?即使按照您的建议进行了修改,它在测试器中也无法运行。
敬礼,Mighty
你好
非常好的作品。谢谢。
能否请您检查一下 CanvasBar 示例?即使按照您的建议进行了修改,它在测试器中也无法运行。
敬礼,Mighty
尝试将 ChartChanged 移到CopyRates 之前
感谢您的快速回复,但它仍然不起作用。
这是因为调用来自OnChartEvent,而该调用在测试器中无法正常工作。
试试这个。
以后请附上代码或链接。毕竟,我不记得我的代码名称了,那是我差不多两年前写的。"今后,请附上代码或链接。毕竟,我不记得我的代码名称了,那是我差不多两年前写的"。
好的,我会的。现在它可以工作了(我不得不删除GetTickCount 行来实现同步)。谢谢。