晚上好!有可能循环使用脚本吗?这样,在开放图表结束后,它就会重新开始,而不是结束工作。
Skyline Real:
晚上好!有可能循环使用脚本吗?这样,在开放图表结束后,它就会重新开始,而不是完成工作。
原则上是可以的。但需要循环多少次呢?或者像万花筒一样整天循环?
晚上好!有可能循环使用脚本吗?这样,在开放图表结束后,它就会重新开始,而不是完成工作。
Karputov Vladimir:
原则上可以。你需要做多少个循环?或者像万花筒一样--一整天?
嗯,一整天会更好.....。
原则上可以。你需要做多少个循环?或者像万花筒一样--一整天?
Skyline Real:
那么,最好是一整天.....。
那么,最好是一整天.....。
在这种情况下,您需要在 OnTimer() 中调用整个旋转木马的 EA。我会考虑的。
已添加。修正了文本。
总之,这就是智能交易系统。主要是要记住,在无限显示图表时,关闭/卸载智能交易系统有点麻烦:)。因此,让我提醒您,该智能交易系统显示在 "导航器 "窗口中:
这就是智能交易系统本身:
//+------------------------------------------------------------------+ //|Chart_bringing_too_top.mq5 //|版权 © 2016, 弗拉基米尔-卡尔普托夫 || //|http://wmua.ru/slesar/ || //+------------------------------------------------------------------+ #property copyright "版权归弗拉基米尔-卡尔普托夫 2016 所有 #property link "http://wmua.ru/slesar/" #property version "1.00" #property description "The indicator switches all open charts after a certain interval." //--- 输入参数 //--- 输入参数 input uchar Seconds=3; // 间隔 // 间隔 //--- bool IsCicle=false; // true - in cicle // true - in cicle //+------------------------------------------------------------------+ //| 专家初始化函数| //+------------------------------------------------------------------+ int OnInit() { //--- 创建计时器 if(Seconds<3) { MessageBox("Interval must be greater than 3 seconds"); EventSetTimer(3); } else EventSetTimer(Seconds); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 专家去初始化函数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- 销毁计时器 EventKillTimer(); } //+------------------------------------------------------------------+ //| 专家勾选功能| //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| 定时器功能| //+------------------------------------------------------------------+ void OnTimer() { //--- if(IsCicle) return; IsCicle=true; //--- uchar temp_second; if(Seconds<3) temp_second=3; // 图表 ID 的变量 long currChart,prevChart=ChartFirst(); //--- 显示第一个图形 //--- 显示第一个图表 ChartBringToTop(prevChart); Sleep((int)MathAbs(temp_second*1000)); int i=0,limit=100; //Print("ChartFirst = ",ChartSymbol(prevChart)," ID = ",prevChart); // 我们的开放图形可能不超过 100 个 // 我们的开放式图表肯定不超过 100 个 while(i<limit)// { // 基于前一个图形,我们得到一个新图形 // 使用之前的图表 ID 获取新图表 ID currChart=ChartNext(prevChart); if(currChart<0) break; // 图表列表已结束 // 图表列表已结束 //Print(i," ",ChartSymbol(currChart)," ID =",currChart); ChartBringToTop(currChart); Sleep((int)MathAbs(temp_second*1000)); // 为 ChartNext() 记住当前图表的 ID // 为 ChartNext() 保存当前图表 ID prevChart=currChart; // 别忘了增加计数器的数量 // 不要忘记增加计数器 i++; } IsCicle=false; } //+------------------------------------------------------------------+ //| 向终端发送命令,将图形显示在所有其他图形之上。 //| 向终端发送命令,使图表显示在所有其他图表之上。 //+------------------------------------------------------------------+ bool ChartBringToTop(const long chart_ID=0) { //-- 重置错误值 ResetLastError(); //--- 将图表显示在所有其他图表之上 if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true)) { //--- 将错误信息输出到 "专家 "日志中。 Print(__FUNCTION__+", Error Code = ",GetLastError()); return(false); } ChartRedraw(chart_ID); //--- 成功执行 return(true); } //+------------------------------------------------------------------+
附加的文件:
感谢您的及时回复。但是智能交易系统不能正常工作。如果打开的图表超过两个,EA 就会从第一个图表跳到最后一个图表,而跳过它们之间的其他图表。从最后一张图表到第一张图表之间没有过渡,即旋转木马不起作用。
一段 EA 运行视频--在无限模式下切换所有可用图表的万花筒:
切换图表:
作者: Vladimir Karputov