自己做量化交易软件(38)小白量化实战11–双向高频马丁交易策略
上一篇文章我们介绍了做多的马丁策略,见文章<自己做量化交易软件(37)小白量化实战10–操作方法与MetaTrader5高频策略的进化>.
这一篇介绍双向高频马丁交易策略,也就是说能够多空两个方向的开单策略.
小白量化双向马丁策略如下:
1、RSI上穿40开多方马丁策略。
2、RSI下穿60开空方马丁策略。
3、K线上穿布林上轨,或者 rsi>70,关闭做空马丁策略。
3、K线下穿布林下轨,或者 rsi<30,则止损关闭做多马丁策略。
4、设置每个订单的止盈和止损价。
5、采用策略盈利最大回撤机制关闭策略。
在高频策略中,1秒钟运行几十次,甚至上百次运算,遇到的两个重要问题,
一是信号稳定性,信号总是在金叉,不金叉之间摆动.
二是重复开单,信号满足条件,一致重复下单的问题.
这2个问题可以用技术手段来解决.
信号重复开单稳定性采用策略库中的mt5.ontime()函数来实现。
重复开单可以用开关变量加以控制。

小白量化双向马丁策略不保证能赚钱,仅仅给大家提供一个高频交易的思路。
我们使用MetaTrader5中BTCUSD品种进行测试交易。
下面给出这个策略的全部代码,其中有详细的注释。

'''
独狼荷蒲qq:2886002
通通小白python量化群:524949939
小白量化MT5群:556894446
tkinter,pyqt,gui,Python交流2群:517029284
微信公众号:独狼股票分析
小白量化双向马丁策略:
1、RSI上穿40开多方马丁策略。
2、RSI下穿60开空方马丁策略。
3、K线上穿布林上轨,关闭做空马丁策略。
3、K线下穿布林下轨,关闭做多马丁策略。
4、设置每个订单的止盈和止损价。
5、采用策略盈利最大回撤关闭策略。
'''
#软件信息
p_sname='MT5自动交易程序'
p_aname='独狼'
p_edate='20210207'
p_ver=1.00print('----------程序开始----------')
print('程序名称:',p_sname)
print('程序作者:',p_aname)
print('最后修改日期:',p_edate)
print('最新版本:',p_ver)#引入相关库
import datetime
import numpy as np
import time
import pandas as pd
import threadingfrom HP_formula import *   #公式库
import MetaTrader5 as mt5
import HP_mt5a as hmt5  #hmt5增强库#----------模块信息----------
print('----------模块信息----------')
print('numpy库版本:',np.version.version)
print('pandas库版本:',pd.__version__)
print('mt5库版本:',hmt5.__version__)
print('hmt5库版本:',hmt5.pver)#----------定义全局变量----------
symbol="BTCUSD"
magic1=168
magic2=158
p_num=3  #开单数
p_step=50 #步长
lot=0.02 #开单量
##------------------------------# BOLL 布林带指标
def BOLL(N=24, P=2):"""BOLL 布林带"""MID = MA(CLOSE, N)UPPER = MID + STD(CLOSE, N) * PLOWER = MID - STD(CLOSE, N) * Preturn UPPER, MID, LOWER#RSI指标
def RSI(N1=5):LC = REF(CLOSE, 1)RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100.00return RSI1#初始化小白mt5库
hmt5.init()#登陆帐号
用户名=0
密码=''
服务器=''
hmt5.login(login=用户名, server=服务器,password=密码)#输出mt5软件信息及连接相关信息
mt5info=hmt5.terminal_info()
mt5软件名称=mt5info.name
mt5软件语言=mt5info.language
mt5软件所属公司=mt5info.company
mt5软件路径=mt5info.path
print()
print('----------软件信息----------')
print('mt5软件名称:',mt5软件名称)
print('mt5软件语言:',mt5软件语言)
print('mt5软件所属公司:',mt5软件所属公司)
print('mt5软件路径:',mt5软件路径)#获取用户登陆信息
accountinfo=mt5.account_info()
姓名=accountinfo.name
服务器=accountinfo.server
货币=accountinfo.currency
用户名=accountinfo.login
结余=accountinfo.balance
总净值=accountinfo.equity
总盈亏=accountinfo.profitprint()
print('----------用户信息----------')
print('姓名:',姓名)
print('服务器:',服务器)
print('用户名',用户名)
print('总盈亏',总盈亏)
print('总净值',总净值)
print('结余:',结余)symbol="BTCUSD"
ask=hmt5.symbol_info_tick(symbol).ask
bid=hmt5.symbol_info_tick(symbol).bid
点差=ask-bidprint('ask : ',ask)
print('bid : ',bid)
print('点差:' , 点差)#多单马丁策略Martingale Strategy
md=hmt5.Martingale_Strategy( symbol = symbol,volume=lot,price=p_step,magic=magic1,n=3,x1=200,x2=400,type2=0)#空单马丁策略Martingale Strategy
md2=hmt5.Martingale_Strategy( symbol = symbol,volume=lot,price=p_step,magic=magic2,n=3,x1=200,x2=400,type2=1)#开关变量,防止策略重复开单
开多单=False
开空单=Falsei=0
while True:start = time.time()
#    if i>0:    #取消这段注释,循环只运行1次。
#        breakprint("第%d次工作"%i)#获取行情数据并计算rates= mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M1, 0, 300)data2=hmt5.tohpdata(rates)#小白量化数据格式化mydf=data2.reset_index(level=None, drop=True ,col_level=0, col_fill='')CLOSE= mydf['close']HIGH=mydf['high']LOW=mydf.lowOPEN=mydf.open#计算布林轨道BOLL_u,BOLL_m,BOLL_d=BOLL()mydf['BOLL_u']=BOLL_umydf['BOLL_m']=BOLL_mmydf['BOLL_d']=BOLL_d#计算RSI指标mydf['rsi']=RSI()mydf['z30']=30mydf['z40']=40mydf['z50']=50mydf['z60']=60mydf['z70']=60#买多信号mydf['buy']=CROSS(mydf['rsi'],mydf['z40']) #rsi上穿30,买信号#买空信号mydf['sell']=CROSS(mydf['z60'],mydf['rsi']) #rsi下穿70,卖信号#让子弹飞一会,信号持续时间检测t1=hmt5.ontime('buy',mydf['buy'].iloc[-1],30)   #获取信号维持时间t2=hmt5.ontime('sell',mydf['sell'].iloc[-1],30) #获取信号维持时间if 开多单==False and mydf['buy'].iloc[-1]>0 and t1>20:开多单=Truemd.begin()  #执行多单马丁策略time.sleep(5)    #暂停多少秒t1=hmt5.settime('buy',mydf['buy'].iloc[-1],30)   #获取信号维持时间if 开空单==False and mydf['sell'].iloc[-1]>0 and t2>20:开空单=Truemd2.begin()  #执行空单马丁策略time.sleep(5)    #暂停多少秒t2=hmt5.settime('sell',mydf['sell'].iloc[-1],30) #获取信号维持时间df=md.getcc()  #获取全部多单持仓df2=md2.getcc()  #获取全部空单持仓#多单处理if len(df)>0:profit=df.profit.sum()  #持仓的总盈利hc=hmt5.huiche(mark='盈利',x=profit,t=30)  #获取盈利在30秒内的最大回撤if hc>0.2 and profit>2: #如果总盈利大于2美元,且回撤20%,关闭策略。md.closeall()  #关闭多向马丁策略time.sleep(5)    #暂停多少秒开多单=Falseif profit<-20: #如果总盈利小于20美元,且回撤20%,关闭策略。md.closeall()  #关闭多向马丁策略time.sleep(5)    #暂停多少秒开多单=False#空单处理if len(df2)>0:profit2=df2.profit.sum()  #持仓的总盈利hc2=hmt5.huiche(mark='盈利2',x=profit2,t=30)  #获取盈利在30秒内的最大回撤if hc2>0.2 and profit2>2: #如果总盈利大于2美元,且回撤20%,关闭策略。md2.closeall()  #关闭空向马丁策略time.sleep(5)    #暂停多少秒开空单=Falseif profit2<-20: #如果总盈利小于20美元,且回撤20%,关闭策略。md2.closeall()  #关闭空向马丁策略time.sleep(5)    #暂停多少秒 开空单=False#策略止损判断多止损=0if ask<mydf['BOLL_d'].iloc[-1] or mydf['rsi'].iloc[-1]<30:多止损=1空止损=0if bid>mydf['BOLL_u'].iloc[-1] or mydf['rsi'].iloc[-1]>70:空止损=1#让子弹飞一会,信号持续时间检测t3=hmt5.ontime('多止损',多止损,30)   #获取信号维持时间t4=hmt5.ontime('空止损',空止损,30)  #获取信号维持时间if 多止损>0 and t3>20 and 开多单 : #关闭看多马丁策略md.closeall()  #关闭多向马丁策略time.sleep(5)    #暂停多少秒开多单=Falseif 空止损>0 and t4>20 and 开空单 : #关闭看空马丁策略md2.closeall()  #关闭空向马丁策略time.sleep(5)    #暂停多少秒开空单=Falsei=i+1    #循环次数加1end=time.time()   #获取循环结束时间print('时间:',round(start,2),round(end,2),round(end-start,4),'秒,每秒跑%d圈。'%int(1/(end-start+0.000000001)))

程序输出如下:

第6019次工作
时间: 1612698144.67 1612698144.69 0.019 秒,每秒跑52圈。
第6020次工作
时间: 1612698144.69 1612698144.71 0.019 秒,每秒跑52圈。
第6021次工作
时间: 1612698144.71 1612698144.73 0.02 秒,每秒跑50圈。
第6022次工作
时间: 1612698144.73 1612698144.75 0.02 秒,每秒跑50圈。

程序交易部分信息:

mt5开单情况:

作者出版的书<零基础搭建量化投资系统――以Python为工具> 提供仿通达信自编指标的设计和实现。HP_formula模块在读者群文件中下载。

请持续关注我的博客,我的进步,就是你的进步!

自己做量化交易软件(38)小白量化实战11--双向高频马丁交易策略相关推荐

  1. 自己做量化交易软件(44)小白量化实战17--利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计

    自己做量化交易软件(44)小白量化实战17–利用小白量化金融模块在迅投QMT极速策略交易系统上仿大智慧指标回测及实战交易设计 小白量化平台是由若干小白金融模块构成.其中包含行情接收模块,仿通达信大智慧 ...

  2. 自己做量化交易软件(31)小白量化实战5--板块股票池与基本面选股

    自己做量化交易软件(31)小白量化实战5–板块股票池与基本面选股 在小白量化软件中,股票池与板块是一样的,都是股票代码列表.前面博客有零散知识的介绍. 小白量化学习(4)基本面选股与股票池 https ...

  3. 自己做量化交易软件(43)小白量化实战16--利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计

    自己做量化交易软件(43)小白量化实战16–利用小白量化金融模块在恒生PTrade交易系统(交易端)上仿大智慧指标回测及实战交易设计 量化产品PTrade(Personalise Trade)交易系统 ...

  4. 自己做量化交易软件(39)小白量化实战12--利用神经网络程序预测价格上涨

    自己做量化交易软件(39)小白量化实战12–利用神经网络程序预测价格上涨 大家使用小白量化软件的主要目不是为了仿通达信公式和仿大智慧公式,大家主要的目的想利用Python神经网络和深度学习等功能来用人 ...

  5. 自己做量化交易软件(33)小白量化实战7--投资理念与通达信公式回测(1)

    自己做量化交易软件(33)小白量化实战7–投资理念与通达信公式回测(1) 什么是投资理念?我们先给大家讲个小故事. 从前,有个郑国人,打算到集市上买双鞋穿.他先把自己脚的长短量了一下,做了一个尺子.可 ...

  6. 自己做量化交易软件(35)小白量化实战8--事件型回测程序

    自己做量化交易软件(35)小白量化实战8–事件型回测程序 小白量化第二代程序也提供了一个简单的事件型回测程序,我们前面的博客文章有介绍这方面的知识.当时用MT5 做的回测演示,见文章:自己做量化交易软 ...

  7. 自己做量化交易软件(29)小白量化实战3--跨周期共振

    自己做量化交易软件(29)小白量化实战3–跨周期共振 在第一次世界大战中,一队德国士兵迈着整齐的步伐,通过一座桥,结果把桥踩塌.就桥梁的本身负载能力而言,远远大过这队德国士兵的重量,但由于士兵步调整齐 ...

  8. 自己做量化交易软件(34)小白量化实战7--投资理念与通达信公式回测(2)

    自己做量化交易软件(34)小白量化实战7–投资理念与通达信公式回测(2) 投资通俗地讲就是"财富变压器".投资是使资本和财富生长的源泉.没有证券市场和期货市场时投资者当投出一元钱时 ...

  9. 自己做量化交易软件(41)小白量化实战14--美国17年周期蝉与指标参数设计技巧

    自己做量化交易软件(41)小白量化实战14–美国17年周期蝉与指标参数设计技巧 我们从新闻开始谈投资分析理念. 最近的有新闻介绍美国17年周期蝉,根据科学家的长期监测,每隔十几年,从地下钻出的蝉的数量 ...

  10. 自己做量化交易软件(24)小白量化增强仿通达信财务基本数据公式

    自己做量化交易软件(24)小白量化增强仿通达信财务基本数据公式 通达信公式指标中有很多关于系统或基本面的函数,小白量化公式系统只有关于行情方面的公式基本函数.为了便于移植更多的自编通达信公式指标,我们 ...

最新文章

  1. sync是同步还是非同步_MySQL半同步复制你可能没有注意的点
  2. 关于for和foreach,兼顾效率与安全
  3. 关于Python的编码注释# -*- coding:utf-8 -*- 详解
  4. MySQL删除存储过程(DROP PROCEDURE)
  5. 为什么需要ORM 框架
  6. 前端学习(1467):过滤器
  7. 非洲做生意进货渠道_WikiFundi如何帮助非洲人民为维基百科做贡献
  8. aix Oracle 限制访问,改变AIX上使用oracle的一些限制
  9. 函数和常用模块【day04】:内置函数(十)
  10. 东西湖职业技术学校计算机专业怎么样,武汉东西湖职业技术学校怎么样
  11. 最简单的正交试验教程
  12. Excel如何用身份证号提取性别
  13. 抖音短视频怎么加文字 怎么在视频画面批量添加一行滚动字幕?
  14. 评卷系统-答题卡制作参考网站
  15. Android 获取位置信息
  16. 10种网站数据的采集方法
  17. 推荐系统经典算法之协同过滤
  18. 消失与存续——应用交付行业的跌宕演进
  19. Source Insight中无法正确判断宏定义的问题
  20. cogs 313. [POI2001] 和平委员会(2-SAT

热门文章

  1. 《黑马程序员Android移动应用基础教程》学习笔记(1)
  2. 计算机毕业设计论文资料查找
  3. 【论文翻译】从零开始PointNet论文分析与代码复现
  4. 【解决方案】数字孪生智慧光伏电站三维可视化系统
  5. Unity Alpha Blend混合的最终解释
  6. Excel·VBA下载URL链接网络文件
  7. 1H413000工业机电工程安装技术—— 1H413010机械设备安装技术
  8. 谷歌生物医学专用翻译_【小虎聊干货】八大翻译软件大揭秘,告诉你科研翻译的正确打开方式...
  9. IT服务体系工具支撑
  10. python十六进制转十进制_python实现进制转换(二、八、十六进制;十进制)