新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 957 1...950951952953954955956957958959960961962963964...1953 新评论 Artyom Trishkin 2019.08.31 17:53 #9561 Igor Kryuchkov: Ctrl+B-->"全部 "按钮--有一个对象,这就是我所说的。问题是,如果我以 正常方式创建 一个没有Canvas的RECTANGLE。它创建了正确数量的RECTANGLE对象。 使用Canvas,我只能创建一个。为什么会这样呢?我 为每个RECTANGLE 起了一个独特的 名字。 当然,感谢程序员的帮助。 你为什么认为你的名字是独一无二的?你在创建一个新的对象之前检查过吗?那你是否检查对象创建 的结果?这方面的错误代码是什么? Igor Kryuchkov 2019.08.31 17:57 #9562 Artyom Trishkin: 没有完全可重复的代码--没有具体的讨论。我不知道你在那里做了什么。你把最简单的事情弄成了某种问题。 #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #include <Canvas\Canvas.mqh> CCanvas C; int History = 5000; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| 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 BarsCounted = IndicatorCounted(); if (BarsCounted < 0) return (-1); if (BarsCounted > 0) BarsCounted--; int BarsTotal = Bars - BarsCounted; if( BarsTotal > History ) BarsTotal = History; for (int i = BarsTotal-1; i >=1 ; i--) { double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, i); if(rsi > 70 ) { C.CreateBitmap(0, 0, i, Time[i+5], Close[i+1], 50, 70,COLOR_FORMAT_ARGB_NORMALIZE); C.Rectangle(10, 40, 70, 80, ColorToARGB(clrRed,200)); C.Update(true); Print(i); } } //--- return value of prev_calculated for next call return(rates_total); } Rustam Bikbulatov 2019.08.31 17:57 #9563 Igor Kryuchkov: 你说的重新启动是什么意思? 我有一个使用全局变量 的订单开销的计算。例如,如果是5,这意味着已经有5个订单被打开,我正在等待第六个订单的上升。如果计数器被设置为5,这意味着有5个额外的订单被打开,尽管它们已经被打开。当我关闭终端并再次打开它时,同样的情况也发生了。如何解决这个问题? Igor Kryuchkov 2019.08.31 18:01 #9564 Rustam Bikbulatov: 我有一个使用全局变量 的订单开销的计算。例如,如果是5,这意味着已经有5个订单被打开,我正在等待第六个订单的上升。如果计数器被设置为5,这意味着有5个额外的订单被打开,尽管它们已经被打开。当我关闭终端并再次打开它时,同样的情况也发生了。如何解决这个问题? 在int OnInit()函数中,我们必须检查一个全局变量的存在。 如果它存在并且高于零,我们就把它设置为零。 Artyom Trishkin 2019.08.31 18:02 #9565 Igor Kryuchkov: 那是一个四吗? Igor Kryuchkov 2019.08.31 18:03 #9566 Artyom Trishkin: 这是一个四合院吗? 是的,我注意到MQL4,当我问到Canvas的时候 Igor Kryuchkov 2019.08.31 18:42 #9567 Artyom Trishkin: 这是四吗? 我想,在四轮车上应该也可以。 Artyom Trishkin 2019.08.31 18:46 #9568 Igor Kryuchkov: 我想,这在四代机上也应该是可行的。 //+------------------------------------------------------------------+ //| Test.mq4 | //| Copyright 2019, Artem A. Trishkin, Skype artmedia70 | //| https://www.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, Artem A. Trishkin, Skype artmedia70" #property link "https://www.mql5.com/ru/users/artmedia70" #property version "1.00" #property strict #property indicator_chart_window #include <Arrays\ArrayObj.mqh> #include <Canvas\Canvas.mqh> class CCanvObj : public CObject { public: CCanvas m_canvas; }; int History = 5000; string prefix=MQLInfoString(MQL_PROGRAM_NAME)+"_"; CArrayObj list_canvas; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom deindicator initialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- indicator buffers mapping ObjectsDeleteAll(0,prefix); //--- return; } //+------------------------------------------------------------------+ //| 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=rates_total-prev_calculated; if(limit>1) { limit=rates_total-1; } //--- Цикл расчёта индикатора for(int i=fmin(limit,History); i>=0; i--) { double rsi=iRSI(NULL,PERIOD_CURRENT,14,PRICE_CLOSE,i); if(rsi>70) { //--- Создаём новый объект CCanvas CCanvObj *obj=new CCanvObj(); if(obj==NULL) continue; if(!list_canvas.Add(obj)) continue; string name=prefix+(string)i; //--- Создаём ресурс Bitmap с именем name if(obj.m_canvas.CreateBitmap(0,0,name,time[i+5],close[i+1],50,70,COLOR_FORMAT_ARGB_NORMALIZE)) { obj.m_canvas.Rectangle(0,0,49,69,ColorToARGB(clrRed,200)); obj.m_canvas.Update(true); } } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ Igor Kryuchkov 2019.08.31 22:09 #9569 Artyom Trishkin: 谢谢你,这一切都很有效。 当缩放图形 时,能否将矩形也变小? 规模是有迹可循的。但该指标只理解为有新的刻度。 有时会出现巨大的延迟。我可以做些什么呢? Artyom Trishkin 2019.08.31 22:15 #9570 Igor Kryuchkov: 谢谢你,这一切都很有效。 当缩放图形 时,能否将矩形也变小? 规模是有迹可循的。但该指标只理解为有新的刻度。 有时会出现巨大的延迟。你能做什么? 你想避免在缩放时调整大小 ... OnChartEvent()不依赖刻度线 当必要的图表事件被注册时,更新在OnChartEvent()中创建的所有对象。否则,只有在新的蜱虫上才会被更新。 1...950951952953954955956957958959960961962963964...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Ctrl+B-->"全部 "按钮--有一个对象,这就是我所说的。问题是,如果我以 正常方式创建 一个没有Canvas的RECTANGLE。它创建了正确数量的RECTANGLE对象。
使用Canvas,我只能创建一个。为什么会这样呢?我 为每个RECTANGLE 起了一个独特的 名字。
当然,感谢程序员的帮助。
你为什么认为你的名字是独一无二的?你在创建一个新的对象之前检查过吗?那你是否检查对象创建 的结果?这方面的错误代码是什么?
没有完全可重复的代码--没有具体的讨论。我不知道你在那里做了什么。你把最简单的事情弄成了某种问题。
你说的重新启动是什么意思?
我有一个使用全局变量 的订单开销的计算。例如,如果是5,这意味着已经有5个订单被打开,我正在等待第六个订单的上升。如果计数器被设置为5,这意味着有5个额外的订单被打开,尽管它们已经被打开。当我关闭终端并再次打开它时,同样的情况也发生了。如何解决这个问题?
我有一个使用全局变量 的订单开销的计算。例如,如果是5,这意味着已经有5个订单被打开,我正在等待第六个订单的上升。如果计数器被设置为5,这意味着有5个额外的订单被打开,尽管它们已经被打开。当我关闭终端并再次打开它时,同样的情况也发生了。如何解决这个问题?
在int OnInit()函数中,我们必须检查一个全局变量的存在。 如果它存在并且高于零,我们就把它设置为零。
这是一个四合院吗?
是的,我注意到MQL4,当我问到Canvas的时候
这是四吗?
我想,这在四代机上也应该是可行的。
谢谢你,这一切都很有效。
当缩放图形 时,能否将矩形也变小?
规模是有迹可循的。但该指标只理解为有新的刻度。
有时会出现巨大的延迟。我可以做些什么呢?
谢谢你,这一切都很有效。
当缩放图形 时,能否将矩形也变小?
规模是有迹可循的。但该指标只理解为有新的刻度。
有时会出现巨大的延迟。你能做什么?