文章 "同步多个相同交易品种而时段不同的图表"

 

新文章 同步多个相同交易品种而时段不同的图表已发布:

当做交易决定时,我们经常必须在多个时段分析图表,同时,这些图表常常包含着图形对象,把相同的对象应用到所有图表中会不大方便,在本文中,我提出了一种自动克隆将要显示在图表中对象的方法。


在本文中,我们已经提出了方法来开发指标,可以自动在终端图表之间实时自动复制图形对象,这种方法实现了在终端打开的图表之间做双向数据交换的机制,它对用户没有同步图表数量的限制,同时,用户可以在任何同步的图表上创建,修改和删除图形对象。指标的操作在视频中做了展示:




作者:Dmitriy Gizlyk

 
这篇文章写得很好,特别适合那些使用技术分析并在不同图表上创建许多对象的人。多亏了作者,我成功地同步了图形对象,作为该主题的进一步发展,同步在不同图表上创建的指标也是可能的。唯一的问题是,这样的任务有意义吗?也许没有必要将具有相同参数的指标转移 到另一个时间框架中,而只需更改参数即可。我还认为克隆中的 "解除绑定 "功能非常有用,即 "解除绑定 "的对象不会转移到其他图表中。
 
我希望同步不同时间框架上的支撑位和阻力位,即在一个时间框架上添加的支撑位会出现在所有其他时间框架的图表上
 
Tapani:
我希望同步不同时间框架上的支撑位和阻力位,即在一个时间框架上添加的支撑位会出现在所有其他时间框架的图表上。

您好,
您是如何在图表上添加阻力位的?是水平线还是矩形框?

 

有没有办法只克隆某些类型的对象而忽略其他对象?另外,我如何克隆对象的可见性属性,因为克隆对象的可见性设置似乎不会被复制,必须在其他图表上重新手动设置。

非常感谢

 
yousurfer:

有没有办法只克隆某些类型的对象而忽略其他对象?另外,我如何克隆对象的可见性属性,因为克隆对象的可见性设置似乎不会被复制,必须在其他图表上重新手动设置。

非常感谢

您好,yousurfer。
如果您想通过某些属性选择对象,可以在此函数中添加。

string CCopyObject::CreateMessage(long chart)
  {
   string result = NULL;
   int total = ObjectsTotal(chart, 0);
   for(int i=0;i<total;i++)
     {
      string name = ObjectName(chart, i, 0);
//
// if(!( 检查要复制的对象属性) ) // 如果你不想复制这个对象
// 继续;// 转到下一个对象
//
      switch((ENUM_OBJECT)ObjectGetInteger(chart,name,OBJPROP_TYPE))
        {
         case OBJ_HLINE:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_HLINE)+"|"+HLineToString(chart, name)+"}";
           break;
         case OBJ_VLINE:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_VLINE)+"|"+VLineToString(chart, name)+"}";
           break;
         case OBJ_TREND:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_TREND)+"|"+TrendToString(chart, name)+"}";
           break;
         case OBJ_RECTANGLE:
           result+="{NAME="+name+"|TYPE="+IntegerToString(OBJ_RECTANGLE)+"|"+RectangleToString(chart, name)+"}";
           break;
        }
     }
   return result;
  }


Dmitriy。

 
您能为 MT4 做一个吗?最好能按对象进行过滤(只克隆水平或趋势......)。有一个类似的 MT4 版本,但代码是封闭的,无法附加过滤功能。
 

在一个工具的 8 个不同 TF的开放图表 中,指标会明显变慢并挂起 MT,例如,一个新绘制的正方形会延迟 5-10 秒出现在其他图表中。原因是什么?

谢谢!

 
Kofa:
您能为 MT4 做一个吗?最好能对对象进行过滤(仅克隆水平或趋势......)。MT4 也有类似的指标,但代码已关闭,无法添加过滤功能。

要在 MT4 上使用,只需将指标文件扩展名从 mq5 改为 mq4,然后重新编译指标即可。
要添加对象过滤功能,需要添加参数

sinput bool    CloneHLine     =  true;
sinput bool    CloneVLine     =  true;
sinput bool    CloneTrend     =  true;
sinput bool    CloneRectangle =  true;

并更正OnChartEvent,添加CheckToClone 函数。

//+------------------------------------------------------------------+
//| 图表事件函数|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   string message1=NULL;
   string message2=NULL;
   int total=0;
//---
   switch(id)
     {
      case CHARTEVENT_OBJECT_CHANGE:
      case CHARTEVENT_OBJECT_CREATE:
      case CHARTEVENT_OBJECT_DRAG:
        if(!CheckToClone(sparam))
           return;
        message1=CloneObjects.CreateMessage(l_Chart,sparam,0);
        message2=CloneObjects.CreateMessage(l_Chart,sparam,1);
        total=ArraySize(ar_Charts);
        for(int i=0;i<total;i++)
          {
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,message1);
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,message2);
          }
        break;
//---
      case CHARTEVENT_OBJECT_DELETE:
        if(!CheckToClone(sparam))
           return;
        total=ArraySize(ar_Charts);
        for(int i=0;i<total;i++)
           EventChartCustom(ar_Charts[i],(ushort)id,0,0,sparam);
        break;
//---
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_CHANGE:
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_CREATE:
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_DRAG:
        CloneObjects.DrawObjects(l_Chart,sparam);
        ChartRedraw(l_Chart);
        break;
//---
      case CHARTEVENT_CUSTOM + CHARTEVENT_OBJECT_DELETE:
        if(!CheckToClone(sparam))
           return;
        ObjectDelete(l_Chart,sparam);
        ChartRedraw(l_Chart);
        break;
     }
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
bool CheckToClone(string name)
  {
  bool result = false;
   
   if(l_Chart>=0 && ObjectFind(l_Chart,name)==0)
     {
      switch((ENUM_OBJECT)ObjectGetInteger(l_Chart,name,OBJPROP_TYPE))
        {
         case OBJ_HLINE:
           result=CloneHLine;
           break;
         case OBJ_VLINE:
           result=CloneVLine;
           break;
         case OBJ_TREND:
           result=CloneTrend;
           break;
         case OBJ_RECTANGLE:
           result=CloneRectangle;
           break;
        }
     }
   return result;
   }
 
XDiavel:

在一个工具的 8 个不同 TF的开放图表 中,指标会明显变慢并挂起 MT,例如,一个新绘制的正方形会延迟 5-10 秒出现在其他图表中。原因何在?

谢谢!

您好。

问题的关键在于,指标是在一个线程中工作的,而终端中大量的任何指标都会拖慢其工作速度。此外,处理图形元素对终端来说也是相当耗费精力的。如果要在大量图表上使用,我建议在不损失任何功能的情况下将程序重新格式化为智能交易系统。但只有在分析时不同时使用智能交易系统的情况下才会有效。因为终端有一个限制,即每个图表不能超过一个智能交易系统。

 
Dmitriy Gizlyk:

要在 MT4 上使用,只需将指标文件扩展名从 mq5 改为 mq4,然后重新编译指标即可。


感谢您的快速回复和帮助。mq4 不支持ChartIndicatorGet、CloneAllObjects 和其他函数。一般来说,编译过程中会出现 9 个错误。我的编程能力为零。请帮助我。