新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 977 1...970971972973974975976977978979980981982983984...1953 新评论 Kamilzhan 2019.09.28 18:13 #9761 Alexey Viktorov: 建议从头开始阅读,以获得好的建议。从第一个问题的位置和其余的讨论。 Alexey Viktorov 2019.09.28 18:35 #9762 Kamilzhan: 好吧,对于一个完整的答案,只需回答一次,而不是四次。 所有的,绝对是所有的彩色指标,在MT4中都是这样构建的:如果当前值大于前一栏的值,那么其中一个缓冲区就被填满。如果当前值低于前一个条形图上的值,则将填充另一个缓冲区。而显示的类型,线条、直方图或星号/点,并不重要...... Andrey777 2019.09.28 19:37 #9763 有一个完全工作的EA,可以向telegram发送两张图表的截图,第一张截图来自终端中打开的窗口,第二张来自同一工具,但时间框架不同。 要做到这一点,需要打开一个新的窗口,应用一个模板,拍摄一张屏幕截图,然后删除该窗口。但这种带有第二张截图的方案并不总是稳定的。 我想把它改成不打开新窗口,并一直使用相同的,但替换成所需的工具,帮助在代码中调整它。 //+------------------------------------------------------------------+ //| 777.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <Telegram.mqh> string Token="7417:AAH54X9HyFIbecqq1U1-R18tU"; int ChannelID=33722; CCustomBot bot; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ struct TSignalInfo { string symbol; ENUM_TIMEFRAMES timeframe; datetime time_last; //--- static datetime GetMinute() { MqlDateTime dt; TimeCurrent(dt); dt.sec=0; return(StructToTime(dt)); } }; TSignalInfo signal[]; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool SignalIsAllowed(const string _symbol, const ENUM_TIMEFRAMES _timeframe) { //--- find int total=ArraySize(signal); for(int i=0;i<total;i++) { if(signal[i].symbol==_symbol && signal[i].timeframe==_timeframe) { //Print("found"); if(signal[i].time_last<TSignalInfo::GetMinute()) { signal[i].time_last=TSignalInfo::GetMinute(); return(true); } return(false); } } //--- add ArrayResize(signal,total+1); signal[total].symbol=_symbol; signal[total].timeframe = _timeframe; signal[total].time_last = TSignalInfo::GetMinute(); //Print("add"); return(true); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- bot.Token(Token); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- if(id==CHARTEVENT_CUSTOM+234) { if(!SignalIsAllowed(ChartSymbol(lparam),ChartPeriod(lparam))) return; //Print("Custom: ",lparam," ",dparam," ",sparam); ChartScreenShot(lparam,"chart.gif"); //--- первый скриншот string _photo_id; int err=bot.SendPhoto(_photo_id,ChannelID,"chart.gif",sparam); ChartSetSymbolPeriod(lparam,ChartSymbol(lparam),ChartPeriod(lparam)); if(ChartPeriod(lparam)!=PERIOD_H4) { string _symbol=ChartSymbol(lparam); ChartScreenShot(_symbol,PERIOD_H4,"chart.gif","BollingerBands"); string _photo_id2; int err2=bot.SendPhoto(_photo_id2,ChannelID,"chart.gif",sparam); } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool ChartScreenShot(long chart_id,const string file_name) { //--- создать скриншот const int chart_width=1280; const int chart_height=623; FileDelete(file_name); //--- if(ChartScreenShot(chart_id,file_name,chart_width,chart_height,ALIGN_RIGHT)) { //--- ChartRedraw(chart_id); Sleep(500); //--- waitng 30 sec for save screenshot int wait=30; while(!FileIsExist(file_name) && --wait>0) { printf("Waiting %d sec ...",wait); Sleep(1000); ChartRedraw(chart_id); } //--- check file if(!FileIsExist(file_name)) printf("Failed to create a screenshot '%s'.",file_name); } else { Print("ChartScreenShot error ",_LastError); return(false); } return(true); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool ChartScreenShot(const string _symbol, const ENUM_TIMEFRAMES _tf, const string file_name, const string _template) { //--- long chart_id=ChartOpen(_symbol,_tf); ChartRedraw(chart_id); Sleep(155); //--- if(StringLen(_template)>0) if(!ChartApplyTemplate(chart_id,_template)) Print("Apply Template error: ",_LastError); //--- создать скриншот const int chart_width=1280; const int chart_height=623; FileDelete(file_name); //--- if(ChartScreenShot(chart_id,file_name,chart_width,chart_height,ALIGN_RIGHT)) { //--- ChartRedraw(chart_id); Sleep(500); //--- waitng 30 sec for save screenshot int wait=30; while(!FileIsExist(file_name) && --wait>0) { printf("Waiting %d sec ...",wait); Sleep(1000); ChartRedraw(chart_id); } //--- check file if(!FileIsExist(file_name)) printf("Failed to create a screenshot '%s'.",file_name); } else { Print("ChartScreenShot error ",_LastError); ChartClose(chart_id); return(false); } ChartClose(chart_id); return(true); } //+------------------------------------------------------------------+ novichok2018 2019.09.30 10:48 #9764 Alexey Viktorov: 如果当前值比前一个值高,那么它是绿色的,缓冲区是不同的,在mql4,如果相反,那么...反之亦然。)))) 谢谢你,这一切都很有意义。 voron_026 2019.09.30 21:21 #9765 大家好。我交易50种工具。我交易水平。我已经用配置文件设置了我的工作,以避免打开50张图表和加载终端。我想写一个助手,它将使用我在所有符号上手绘的水平,并在屏幕上给我一个信号,如 "看欧元-美元,那里正在形成有趣的东西"。 我想我应该写一个DLL,其中所有级别的所有符号将被复制,机器人应该是多货币的。 谁知道如何执行这项任务? 如何从dll中的配置文件中提取数据? PS。在工具文件夹中看了看,有扩展名为 "chr "的文件。打开记事本,看到我需要的所有信息。我怎样才能以这种方式使用它? valeriikopp 2019.09.30 21:57 #9766 下午好,我是一个初学者,不擅长编程,我需要MT5的抛物线 SAR指标 显示为一条线,而不是点,我该怎么做?请帮助我。 Iurii Tokman 2019.10.01 06:30 #9767 valeriikopp: 下午好,我是一个初学者,不擅长编程,我需要MT5的抛物线SAR指标显示为一条线,而不是点,我该怎么做?请帮助我。 + 附加的文件: ParabolicSAR_L.mq5 8 kb pvba 2019.10.02 13:09 #9768 你好,我想写一个脚本,在一系列高点不断增加的4个柱子之后,在整个图表上画出垂直线。脚本最后只在开始时画了一条线,就这样了。错误是什么?请帮助我纠正它。 void OnStart() { double bbup0, bbup1, bbup2, bbup3; int a=0; for(;a<Bars;a++) { bbup0=High[a]; bbup1=High[a+1]; bbup2=High[a+2]; bbup3=High[a+3]; if((bbup0<bbup1)&&(bbup1<bbup2)&&(bbup2<bbup3)) ObjectCreate(0,"Line",OBJ_VLINE,0,Time[a],0); } } Iurii Tokman 2019.10.02 13:31 #9769 pvba: 你好,我想写一个脚本,在一系列高点不断增加的4个柱子之后,在整个图表上画出垂直线。脚本最后只在开始时画了一条线,就这样了。错误是什么?请帮助我纠正它。 每一行的名字都必须是原创的 你有一个名字可以代表所有的人。 你可以把它的创建时间添加到名称中。 pvba 2019.10.02 13:55 #9770 Iurii Tokman: 每一行的名称必须是原创的 你有一个名字为所有的人 你可以将其创建的时间添加到名称中。 非常感谢您! 1...970971972973974975976977978979980981982983984...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
建议从头开始阅读,以获得好的建议。从第一个问题的位置和其余的讨论。
好吧,对于一个完整的答案,只需回答一次,而不是四次。
所有的,绝对是所有的彩色指标,在MT4中都是这样构建的:如果当前值大于前一栏的值,那么其中一个缓冲区就被填满。如果当前值低于前一个条形图上的值,则将填充另一个缓冲区。而显示的类型,线条、直方图或星号/点,并不重要......
有一个完全工作的EA,可以向telegram发送两张图表的截图,第一张截图来自终端中打开的窗口,第二张来自同一工具,但时间框架不同。
要做到这一点,需要打开一个新的窗口,应用一个模板,拍摄一张屏幕截图,然后删除该窗口。但这种带有第二张截图的方案并不总是稳定的。
我想把它改成不打开新窗口,并一直使用相同的,但替换成所需的工具,帮助在代码中调整它。
如果当前值比前一个值高,那么它是绿色的,缓冲区是不同的,在mql4,如果相反,那么...反之亦然。))))
谢谢你,这一切都很有意义。
大家好。我交易50种工具。我交易水平。我已经用配置文件设置了我的工作,以避免打开50张图表和加载终端。我想写一个助手,它将使用我在所有符号上手绘的水平,并在屏幕上给我一个信号,如 "看欧元-美元,那里正在形成有趣的东西"。 我想我应该写一个DLL,其中所有级别的所有符号将被复制,机器人应该是多货币的。
谁知道如何执行这项任务?
如何从dll中的配置文件中提取数据?
PS。在工具文件夹中看了看,有扩展名为 "chr "的文件。打开记事本,看到我需要的所有信息。我怎样才能以这种方式使用它?
下午好,我是一个初学者,不擅长编程,我需要MT5的抛物线SAR指标显示为一条线,而不是点,我该怎么做?请帮助我。
+
你好,我想写一个脚本,在一系列高点不断增加的4个柱子之后,在整个图表上画出垂直线。脚本最后只在开始时画了一条线,就这样了。错误是什么?请帮助我纠正它。
你好,我想写一个脚本,在一系列高点不断增加的4个柱子之后,在整个图表上画出垂直线。脚本最后只在开始时画了一条线,就这样了。错误是什么?请帮助我纠正它。
每一行的名字都必须是原创的
你有一个名字可以代表所有的人。
你可以把它的创建时间添加到名称中。
每一行的名称必须是原创的
你有一个名字为所有的人
你可以将其创建的时间添加到名称中。
非常感谢您!