新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 645

 

塔拉斯,是否有可能通过鼠标点击使这种图形规范化的框架变化?

有时出于习惯,我在光标靠近按钮的时候点击,但我不喜欢这样的结果。

事件处理 列表中,我没有找到合适的东西,只有CHARTEVENT_CHART_CHANGE,没有任何具体描述我可以尝试绑定鼠标点击,但据我所知,用户不能使用系统菜单,只有当他创建自己的按钮时才可以。有什么简单的解决办法吗?

 
psyman:

塔拉斯,是否有可能通过鼠标点击使这种图形规范化的框架变化?

有时出于习惯,我在光标靠近按钮的时候点击,但我不喜欢这样的结果。

我在事件处理的 列表中没有找到合适的东西,只有CHARTEVENT_CHART_CHANGE,没有任何具体描述我可以尝试绑定鼠标按钮,但据我所知,用户不能使用系统菜单,只有当他创建自己的按钮时才能使用。有什么简单的解决办法吗?

也就是说,要点击图表上的一些 "水龙头区"?
你可以,你需要跟踪光标坐标和鼠标按钮的点击。

鼠标移动

 

关于交易、自动交易系统和策略测试的论坛

关于MQL4的初学者的任何问题,对算法和代码的帮助和讨论

Taras Slobodyanik, 2018.10.04 09:37

你的意思是用鼠标点击图表上的一些 "敲击区"?
你可以,你需要跟踪光标坐标和鼠标点击。



问题是,这是对图表的点击,而不是对系统菜单中的一个按钮的点击。如何处理这样一个事件,我不知道。
 
psyman:

问题是,这是对图表的点击,而不是系统菜单的按钮。我不知道如何处理这样一个事件。

记住当前的字符周期,在"CHARTEVENT_CHART_CHANGE"检查变化,并做你需要做的事情。

 
好的,再次感谢。
 

请告诉我,为什么EA主体OnTick()的同一个函数不能工作(或者说,它能工作,但在所有图表上都不能正常工作)。

但从过程OnInit()中可以正常工作,从普通脚本中也可以。专家顾问同时安装在80个图表上(20种货币,每个4个窗口W1 D1 H4 H1),只是我的电脑无法应付吗?请告知。该机器人的目的是在屏幕上输出MessageBox 信息,如果在其中一个图表上检测到信号。也许电脑在开始发送这些信息的时候速度很慢?
 

我很难记住事件处理 前的时期,我在哪里做这个?

决定按消息追踪,结果发现CHARTEVENT_CHART_CHANGE在一次点击中被处理了2次,ctime变量被重置。


#属性严格

#property indicator_chart_window

int ctime。


空白的OnInit()

{

Print(" OnInit------------1 ", ChartPeriod(0));

Print("OnInit ctime = ", ctime);

// ctime=ChartPeriod(0)。

}


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[])

{

ctime=ChartPeriod(0)。

return(rate_total)。

}

空白的OnChartEvent(const int id,

const long &lparam,

const double &dparam,

const string &sparam)


{


如果(id==CHARTEVENT_CHART_CHANGE)

{

Print("CHARTEVENT_CHART_CHANGE开始了 ctime=", ctime)。

如果(ctime!=ChartPeriod(0))

{

Print(ChartPeriod(0), " CHANGED!!!!!!!!!!!!!!!", ctime)。

}

}

}



在每小时上添加指标,然后切换到每天

2018.10.05 01:04:45.171 _t1 CADJPY,Daily: CHARTEVENT_CHART_CHANGE已启动 ctime=1440

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: 1440 CHANGED!!!!!!!!!!!!!!!0

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: CHARTEVENT_CHART_CHANGE已启动 ctime=0

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: Initialized

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: OnInit ctime=0

2018.10.05 01:04:45.156 _t1 CADJPY,Daily: OnInit------------1 1440

2018.10.05 01:04:45.156 _t1 CADJPY,H1: uninit reason 3

2018.10.05 01:02:02.000 _t1 CADJPY,H1: CHARTEVENT_CHART_CHANGE已启动 ctime=60

2018.10.05 01:02:02.000 _t1 CADJPY,H1: 60 CHANGED!!!!!!!!!!!!!!!0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: CHARTEVENT_CHART_CHANGE已启动 ctime=0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: 已初始化

2018.10.05 01:02:02.000 _t1 CADJPY,H1: OnInit ctime=0

2018.10.05 01:02:02.000 _t1 CADJPY,H1: OnInit------------1 60

2018.10.05 01:02:01.078 自定义指标_t1 CADJPY,H1:加载成功





 
psyman:

我很难记住事件处理 前的那段时间,这需要在哪里做?

决定按消息追踪,结果发现CHARTEVENT_CHART_CHANGE在一次点击中被处理了2次,ctime变量被重置。

把代码正确地放在信息中!在这种形式下很难读懂。它必须看起来像这样。

#property strict
#property indicator_chart_window
int ctime;
void OnInit()
   {
     Print("  OnInit------------1  ", ChartPeriod(0));
     Print("OnInit ctime = ", ctime);
   //  ctime=ChartPeriod(0);   
   }
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[])
  {
   ctime=ChartPeriod(0);         
   return(rates_total);
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id==CHARTEVENT_CHART_CHANGE)
      {
      Print("CHARTEVENT_CHART_CHANGE     is started  ctime=", ctime);
      if(ctime!=ChartPeriod(0))
      {
      Print(ChartPeriod(0), "  CHANGED!!!!!!!!!!!!!!!   ", ctime);
      }
      } 
}

当你改变图表的参数时,指标会被强制重新加载,请阅读文档中的去初始化的原因及其原因变量。

你可以使用全局终端变量来保存所需的参数。

 
Vitaly Gorbunov:

在信息中正确插入代码!这样读起来非常困难。它应该是这样的。

当你改变图表参数时,指标将强行重新启动,请阅读文档中的去初始化的原因及其原因变量。

你可以使用终端的全局变量来保存所需的参数。

是的,你需要在GlobalVariable中存储这些值,然后在启动时,检查它们的存在。

也就是说,应该保存图表编号、符号、周期。
然后删除不必要的变量,或使它们最初成为临时全局变量

你也可以将信息存储在图表的对象中--只要图表存在,对象就存在。

 

我以为会简单得多 :-)

然后是一个相当幼稚的问题--我的代码不涉及任何交易或图形,我应该使用什么类型的程序?

脚本是一次性的,但它们可以循环运行吗?我申报一个自定义指标 纯粹是出于惯性,因为我从来没有使用过专家顾问。我以前从未使用过它们,但它们会自动重新启动,我不需要。我需要你的建议。

诗句

物体可以是零尺寸,这样在视觉上就不会妨碍到它们?