程序库: 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.18www.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 行来实现同步)。谢谢。