微信登录
注册忘记密码
查看: 1500|回复: 1

用MT5写一个趋势线和时间线止盈止损的系统

[复制链接]

该用户从未签到

发表于 2022-6-1 08:20:05 | 显示全部楼层 |阅读模式
外汇同国内的股票期货都不甚相同,行情大多都集中在老欧与老美开盘以后。身在中国的投资者想要跟上行情就得跟着去熬时间,到了晚上差不多行情比较大一些得时候人也困乏了,正常上下班得家人也需要陪伴,不能跟老婆聊着白天发生得趣事却心里想着快到开仓平仓得时间了,或者正在做深层次情感交流得时候行情先一泻千里了,造成不比较要经济损失。这个时候一个时间和趋势得止盈止损系统迫在眉睫。本着自己动手丰衣足食得信念,打算自己现学现做这个玩意。

具体怎么设计呢?首先主要得是按需要在图面上画上四条线:多头止盈时间线,空头止盈时间线,多头止盈趋势线,和空头止盈趋势线,需要用到4个按钮来画和取消这四条线,还有线画好以后需要一个按钮来告诉EA,可以用这四条线来做对应得止盈了。

所以总共需要4个画线按钮,按下每个按钮,对应得线得出来,当价格运行到线线跟前时,做相应操作。还需要一个总开关类似得东西。

开始制作:

1.在EA加载得时候就要把5个按钮画在图面上;

int OnInit(){};就是干这个的。

怎么画呢?MQL5画这些个东西好麻烦,定义一大堆,上网上找了一个包含的库,前人栽树后人乘凉。美美。

#include <huaduixiang.mqh>

包含进来以后,画这几个按钮就舒坦多了。

duixiang.button("多头止盈时间","画多头止盈时间线",20,40,140,20,0,255);

duixiang.button("空头止盈时间","画空头止盈时间线",20,70,140,20,0,255);

duixiang.button("多头止盈趋势","画多头止盈趋势线",20,100,140,20,0,255);

duixiang.button("空头止盈趋势","画空头止盈趋势线",20,130,140,20,0,255);

duixiang.button("kaishi","开始",40,180,50,50,0,255);

五个按钮画好

画出来的五个按钮,有点丑,不过不是去相亲,丑就丑点。

2:按钮画好了以后干啥?按下按钮对应的线线就要画在图表上,按哪个画哪个,再按一下取消掉就好了。时间线是个竖线需要一个时间点就成,趋势线需要两个时间点和两个位置点。先用系统自带得函数画出来就完了。

void OnChartEvent(const int id,

const long &lparam,

const double &dparam,

const string &sparam)

{}

上边这个玩意看的脑袋一阵恶心,其实就是个响应图表事件得玩意,比如鼠标挪一挪,鼠标点个按钮。

if(id==CHARTEVENT_OBJECT_CLICK&&sparam=="多头止盈时间")

{

duixiang.shuxian("多头止盈时间线",iTime(Symbol(),0,0)+3600,Red,0);

ObjectSetInteger(0,"多头止盈时间线",OBJPROP_SELECTABLE,true);

}

上边这个就是,翻译一下下,如果鼠标点了多头止盈时间线哪个按钮,就画一条一小时后得竖线作为多头止盈时间线,然后把这条线设成人能选择得,要不画上去在哪里就在哪里,我想挪到那里或者姥姥家都统统不行,这样我不开心。

网上的库又一次帮了大忙。

if(id==CHARTEVENT_OBJECT_CLICK&&sparam=="kaishi")

{

if(ObjectGetInteger(0,"kaishi",OBJPROP_STATE))

{

可以开始=1;

ObjectSetInteger(0,"kaishi",OBJPROP_COLOR,clrYellow);

ObjectSetInteger(0,"kaishi",OBJPROP_BGCOLOR,clrGreen);

ObjectSetString(0,"kaishi",OBJPROP_TEXT,"结束");

}

else // 不按按键

{

可以开始=0;

ObjectSetInteger(0,"kaishi",OBJPROP_COLOR,clrGreen);

ObjectSetInteger(0,"kaishi",OBJPROP_BGCOLOR,clrYellow);

ObjectSetString(0,"kaishi",OBJPROP_TEXT,"开始");

}

上边这一串是那个开始按钮得控制,骚了一下下,就是最开始叫开始,按下以后按钮叫结束,还变一下颜色,虽然不是去相亲得,该骚得地方还是稍稍骚一点点。

定义得全局变量“可以开始=0”去接受按钮得状态,一会儿还要用到。

这部分就说这么两个,其他得就是搬砖头了,无所谓。

3:按钮弄出来,画得线线也可以通过按下按钮画出来了,接下来就要用这个线线真实得去控制交易了。在这之前我玩弄了这些线线长达半个多小时------------我怎么是一个这么无趣之人。我鄙视我自己。

void OnTick(void)

{}

这个玩意就是没一次价格跳动一下他括号里边得东西就会执行一次。

那么首先要做得就是把最近得数据收录一下,得到得值和线线里取出来得值比较一下就行了。前辈又一次帮了忙。

#include <shuju.mqh>

#include <jiaoyi.mqh>

一个是用来做交易得,一个是用来取数据的。

if(ObjectFind(0,"多头止盈时间线")>=0&&可以开始==true)//

{ datetime 多头止盈时间=(datetime)ObjectGetInteger(0,"多头止盈时间线",OBJPROP_TIME,0);

if(TimeCurrent()>多头止盈时间)

{

jy.closeallbuy(Symbol());

}

}

上边这一段就是这个表上有没有多头止盈时间线并且开始按钮要是按下了,如果现在的时间超过了多头止盈时间,那么就不管如何把仓位里所有这张图表上的多头全部平掉。痛快哉。

if(ObjectFind(0,"空头止盈趋势线")>=0&&可以开始==true)

{

if(rate[0].close>ObjectGetValueByTime(0,"空头止盈趋势线",rate[0].time))

{

jy.closeallsell(Symbol(),0);

}

}

上边这一段是如果找到空头止盈趋势线,并且开始按钮按下,如果当前价格大于趋势线的当前价格,那么就把所有空头都平掉,痛快哉。

其他的没必要再说了,又是在搬砖。

至此一个简易的根据趋势线和时间线止盈的小EA就差不多完事了,当然一千个人有一千条趋势线,这个还得在交易的海洋中不断前行。

不过有了这个以后对我本人来讲还是挺方便的,开单以后定损定盈定时后就可以干别的去了,再也不会因为熬夜两样通红,也不会心不在焉引起媳妇突然暴怒。更好处是开完了单就远离交易,减少了手贱和脑残带来的损失,盈利能力尽然奇迹般的上升了。愉快愉快。

至此。

声明:以上内容来源于网络,如有侵权请联系我们(123@shiyan.com)删除!

签到天数: 22 天

[LV.4]偶尔看看III

发表于 2022-6-1 08:21:39 | 显示全部楼层
外汇注册非常麻烦
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则