【漆学军】分享一个自定义K线的指标的源码_k线指标源码-程序员宅基地

技术标签: EA编程  MQL4  MT4指标  自定义K线  MT4教程  

实现方法:在每根k线上绘制柱子,粗柱子作为K线主体,细柱子作为k线引线。

技术难点:本例没有使用绘制对象的方法,而是直接使用MT4指标的方法绘制DRAW_HISTOGRAM,主图指标使用这个方法必然是两两成对。

举一反三:掌握了这个技术,可以绘制一些独特的k线,比如说达到了一定的条件,才显示特定颜色的k线,更高级一点,可以使用这个技术绘制砖块图,也就是Renko图。这比绘制Object的方式高效多了,也更加节省内存,速度更快。

效果如图:

说明:为了便于观看,自定义的K线绘制在当前k线上移了20个点的位置。

完整源码如下:

//+------------------------------------------------------------------+
//|                                                    自定义K线.mq4 |
//|                                                         漆天编程 |
//|                                           http://www.forexmt4.cn |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "http://www.forexmt4.cn"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Silver
#property  indicator_color2  Red
#property  indicator_color3  Silver
#property  indicator_color4  Red
#property  indicator_width1  5
#property  indicator_width2  5
#property  indicator_width3  1
#property  indicator_width4  1

double    Buffer1[];
double    Buffer2[];

double    Buffer3[];
double    Buffer4[];

int shift=-200;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexBuffer(0,Buffer1);
   SetIndexBuffer(1,Buffer2);
   SetIndexBuffer(2,Buffer3);
   SetIndexBuffer(3,Buffer4);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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 i,limit;
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- macd counted in the 1-st buffer
   for(i=0; i<limit; i++)
     {
      Buffer1[i]=Open[i]-shift*Point;
      Buffer2[i]=Close[i]-shift*Point;
      Buffer3[i]=High[i]-shift*Point;
      Buffer4[i]=Low[i]-shift*Point;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

75行代码就搞定了,如果看不明白,可以问我,我来教你。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yunkaicn/article/details/117600140

智能推荐

如何将输入的内容通过点击按钮显示在下方textview里并改变其颜色_如何在Photoshop中制作渐变...-程序员宅基地

文章浏览阅读151次。将展示如何在Photoshop中创建渐变,以及如何在Photoshop中加载和保存预设渐变。渐变是两种或多种颜色(或相同颜色的不同色度)的逐渐混合。渐变的常见用途包括添加光/阴影效果,增加对象的体积以及创建反射性表面,例如金属材料和金。颜色渐变的其他非常流行的用途包括创建抽象背景,添加颜色覆盖图和强调品牌标识。即使是细微的渐变也可以发挥很大作用。更多内容欢迎加入绘画交流群:308 250 976..._xaml如何将输入的文本在点击按钮后保存下来

计算机网络职业评估报告,计算机网络技术专业个人职业生涯规划书.doc-程序员宅基地

文章浏览阅读1.5k次。计算机网络技术专业个人职业生涯规划书一 前 言——及时规划职业,做自己人生之舟的船长亚里士多德曾说过:“人是一种寻找目标的动物,他生活的意义仅仅在于是否正在寻找和追求自己的目标。”而这目标有大有小,有短期的也有用尽一生去完成的。目标也有多方面的有涉及学业、家庭、工作等。如今我们正处于20岁左右,无论根据萨帕的职业生涯发展五阶段理论,即成长期(1~14岁)、探索期(15~24岁)、确立期(25~..._计算机网络技术生涯发展报告

【Android进阶】ListView使用“内存双缓存+硬盘缓存”加载网络图片_xml安卓listview 开启双缓存-程序员宅基地

文章浏览阅读1.1k次。ListView 加载网络图片是我们经常用到的方式,如果每次滚动ListView就去网络下载图片会非常影响性能(因为网络下载是比较慢的)而且非常耗费流量,所以这里介绍一种使用“内存双缓存+硬盘缓存”的方式来加载图片。实现的效果如下:这里使用了滚动时不去网络下载图片,停止时才加载,所以滚动时显示默认的,注意观察设计思想内存读取速度 > 文件读取速度> 从网络获取的_xml安卓listview 开启双缓存

【生产问题--服务器宕机解决】_生产服务宕机了,我们通过哪些方式去定位问题-程序员宅基地

文章浏览阅读539次,点赞3次,收藏3次。线上服务器宕机问题的解决。如果你也有类似的问题,可以参考下。主要思路用mat 工具分析下.hprof文件_生产服务宕机了,我们通过哪些方式去定位问题

Qt on Android:图文详解Hello World全过程_qt kids-程序员宅基地

文章浏览阅读1.6k次。这是系列文章中的一篇,阅读本文前请先阅读《Windows下Qt 5.2 for Android开发入门》,以便确保开发环境和作者一致。部分文章被转发/转载却没有注明出处,特此声明:版权所有 foruok ,如需转载敬请注明出处(http://blog.csdn.net/foruok)。我将从实践出发,带领大家一步一步完成在 Android 上的第一个 Qt 应用: Hello Qt_qt kids

RIP、OSPF、BGP协议之间的区别_rip,ospf,bgp三个协议的区别-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏11次。③只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛的快,不会出现RIP“坏消息传得慢”的问题。②发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。③网络出现故障时,会出现慢收敛现象,俗称“坏消息传得慢”,使更新过程的收敛时间长。②路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。:BGP是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议。②路由器交换的信息是当前路由器所知道的全部信息,即。_rip,ospf,bgp三个协议的区别

随便推点

Python3 迭代器与生成器_python3迭代器-程序员宅基地

文章浏览阅读153次。迭代是Python最强大的功能之一,是访问集合元素的一种方式。_python3迭代器

ES6新特性-程序员宅基地

文章浏览阅读2w次,点赞9次,收藏42次。ES6新特性_es6新特性

UI设计资料_设计是什么保罗.兰德百度网盘资源-程序员宅基地

文章浏览阅读4.3k次,点赞4次,收藏8次。设计软件链接:https://pan.baidu.com/s/1cGu6fW 密码:f2k630G教学视频:https://pan.baidu.com/s/1nvrB6jv 密码:bruv朋友发的,就这么刚!_设计是什么保罗.兰德百度网盘资源

源码分析Dubbo服务提供者启动流程-下篇-程序员宅基地

文章浏览阅读838次,点赞17次,收藏27次。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。图片转存中…(img-lrSLZmoK-1710427356248)]由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

PHP/MySQL开发环境:MAMP Pro for Mac_mamp pro 5.7-程序员宅基地

文章浏览阅读519次。mamp pro mac版是mac平台上最优秀的本地服务器搭配软件,也是最好的mysql开发环境和php开发环境,包含了acintosh、Apache、MySQL和PHP四大开发环境,用户只要轻松点选就能对架站、讨论区、论坛等必备的元件进行安装,让你轻松在mac平台上架设自己的web运行环境。Web运行环境——MAMP Pro功能亮点将wordPress主机发布到您的Live Hosting..._mamp pro 5.7

python抛出异常会终止程序吗_Python学习笔记之类型判断,异常处理,终止程序操作小结...-程序员宅基地

文章浏览阅读4.9k次。python学习笔记 类型判断,异常处理,终止程序,实例代码:#idle中按F5可以运行代码#引入外部模块 import xxx#random模块,randint(开始数,结束数) 产生整数随机数import randomimport sysimport ossecret = random.randint(1,10)temp = input("请输入一个数字\n")#print(type(temp..._程序抛出异常不一定终止程序