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

自己做量化交易软件(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模块在读者群文件中下载。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46469.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己做量化交易软件(22)小白量化之MetaTrader5自动交易1

自己做量化交易软件(22)小白量化之MetaTrader5自动交易1 小白量化框架源代码是《零基础搭建量化投资系统――以Python为工具》的随书演示代码. 作者其中之一杨老师利用小白量化系统参加外汇期货实战比赛,取得了8天获利860%的战绩. 我看了这个战绩,我从心里羡慕、嫉妒、外加眼…

微信客服后台SDK

微信客服后台SDK功能介绍 微信客服回调自动获取客户在微信发送给客服的消息并入库发送客服消息自动发动客服欢迎语获取客户基础信息并入库获取客服帐号列表添加客服帐号修改客服帐号删除客服帐号获取客服帐号链接上传临时素材&#xff08;需等待ivx后台文件接口支持file对象&a…

微信开发之客服消息的使用

之前的消息发送与接收都是用户给微信发一条&#xff0c;之后微信回复给用户&#xff0c;也就是API上面所说的被动回复消息&#xff0c;那么微信是否支持主动给关注用户发消息吗&#xff0c;答案是肯定的&#xff0c;但是却有一些限制。看下微信开发文档上怎么说就明白了&#x…

最新30万字312道Java经典面试题52道场景题总结(附答案PDF)

最近有很多粉丝问我&#xff0c;有什么方法能够快速提升自己&#xff0c;通过阿里、腾讯、字节跳动、京东等互联网大厂的面试&#xff0c;我觉得短时间提升自己最快的手段就是背面试题&#xff1b;花了3个月的时间将市面上所有的面试题整理总结成了一份30万字的300道Java高频面…

CAD必练图形

这次我们用CAD梦想画图软件绘制一个CAD新手必练图形&#xff0c;它用到的有CAD矩形、直线、圆弧、等分等命令结合起来完成绘制的&#xff0c;可以跟着一起操作一下。 目标图形 操作步骤 1.使用CAD矩形命令&#xff08;快捷键&#xff1a;REC&#xff09;绘制一个长80宽30的矩形…

将CAD图纸中的线型和文字样式合并的方法技巧(一)

在使用浩辰CAD软件绘制CAD图纸的过程中&#xff0c;很多CAD制图初学入门者不太了解如何把CAD图纸中的线型和文字样式合并&#xff0c;虽然图层中提供了图层合并功能&#xff0c;但是线型和文字样式却并没有&#xff0c;其实如果想实现这个功能&#xff0c;可以通过CAD的标准检查…

图片转cad用什么软件?转换有技巧

在工程和建筑行业中&#xff0c;CAD已经成为了必不可少的工具&#xff0c;它可以提高设计效率并减少错误。但是&#xff0c;有时候我们需要将手绘图或者图片转换为CAD文件&#xff0c;因为这些图像可能是原始设计的基础&#xff0c;或者是为了方便修改和编辑而需要转换的。在这…

cad怎样编辑标注文字?分享一个方法

我们经常需要在CAD上进行编辑标注文字&#xff0c;CAD编辑软件可以帮助咱们准确地编辑CAD文件&#xff0c;让我们标注CAD文件中的图形元素。包括多种类型的图形元素&#xff0c;如线条、圆弧、文字等&#xff0c;并且可以自定义标注的文字内容、字体、大小等。此外&#xff0c;…

用手机怎么修改CAD图纸中的文字?

手机中收到其他人发送过来的一张CAD图纸&#xff0c;想要对图纸中的部分文字进行修改&#xff0c;手机CAD看图软件可以调整图纸中的文字吗&#xff1f;具体该如何进行操作呢&#xff1f;接下来的CAD教程就让小编来给大家分享一下手机CAD看图软件——浩辰CAD看图王中修改图纸上文…

如何使用CAD看图软件来修改CAD图纸中的文字?

手机中收到其他人发送过来的一张CAD图纸&#xff0c;想要对图纸中的部分文字进行修改&#xff0c;手机CAD看图软件可以调整图纸中的文字吗&#xff1f;具体该如何进行操作呢&#xff1f;接下来的CAD教程就让小编来给大家分享一下手机CAD看图软件——浩辰CAD看图王中修改图纸上文…

使用Teigha(OpenDesign)操作CAD的dwg文件

说起来&#xff0c;其实我自己也感觉这个要求挺奇怪的&#xff0c;Java操作CAD&#xff0c;好吧&#xff0c;目前比较完善的类库有一个是jdwglib&#xff0c;但是我没找到&#xff0c;而且公司刚好有OpenDesign的账号&#xff0c;因此&#xff0c;需要使用Teigha来进行操作&…

免费的绘图和图表工具Tldraw

什么是 Tldraw &#xff1f; Tldraw 是一款免费的绘图和图表工具&#xff0c;具有手绘风格和智能箭头、捕捉和便签等便捷功能。并可以导出 svg 等图片格式&#xff0c;可以作为组件嵌入到其他应用中。比如号称下一代笔记的 AFFiNE 就用了 Tldraw 来完成白板协同功能。 官方有演…

产品经理面试指南,常见面试题及回答思路

产品经理面试指南&#xff0c;常见面试题及回答思路 一、项目 自我介绍&#xff0c;这个不用说是所有面试都要的 2-3分钟之内介绍完&#xff0c;不要过于冗余或者简短&#xff0c;不要把重点放在个人生活&#xff0c;要突出和工作有关的项目、做事能力、性格等等&#xff0c;当…

产品经理面试,说一下你是怎么做产品规划的?

阅读本文大概需要1分12秒 “你做为产品经理或产品线负责人&#xff0c; 是如何规划未来 3-6 个月的产品发展计划&#xff1f;” 有的说是产品总监规划&#xff0c;自己不参与&#xff1b;&#xff08;那麻烦问问你总监要不要过来&#xff09; 有的说看业务部或公司战略规划&…

如何回答「为什么想做产品经理」【面试核心问题3】

当问出“为什么想做产品经理/为什么转行做产品经理”时&#xff0c;面试官的动机&#xff0c;是想知道&#xff1a;我为什么要录用你做产品经理 今日问题&#xff1a;为什么想做产品经理 面试时很多问题是相通的&#xff1a; 为什么想做产品经理为什么你适合做产品经理你做产品…

常见B端产品经理面试问题及答案(一)

↑↑↑我会一直给你分享B端产品经理面试问题及答案&#xff0c;请点击上方关注&#xff01; 你好&#xff0c;我是B端产品经理面试官Aadi&#xff0c;任职某大厂&#xff0c;11年面试官&#xff0c;10年产品经理&#xff0c; 我是站在面试官角度&#xff0c;只告诉你拿来即用的…

产品经理笔试面试准备

产品经理聊面试&#xff1a;http://m.ximalaya.com/album/18917184 1、解释以下名词&#xff1a; 蝴蝶效应&#xff1a;初始条件十分微小的变化&#xff0c;结果不断放大&#xff0c;对未来状态可能造成巨大的差异。破窗效应&#xff1a;如果一个窗子破了&#xff0c;但不及时…

Alpha-GO打败⼈类的秘籍- 强化学习(Reinforcement Learning)

为了深⼊理解强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xff09;这⼀核⼼概念&#xff0c;我们从⼀个⽇常游戏的例⼦出发。在“贪吃蛇”这个经典游戏中&#xff0c;玩家需要掌控⼀条蛇&#xff0c;引导它吞吃屏幕上出现的各种果实。每次成功捕获果实&a…

关于云计算,我们问了ChatGPT 10个问题

ChatGPT懂云计算吗&#xff1f; 前些天&#xff0c;我们问了ChatGPT&#xff08;非Plus收费版&#xff09;一些问题。 1. 什么是云计算&#xff1f; 2. 云计算行业的护城河是什么&#xff1f; 3. 什么是云原生&#xff1f; 4. 微软Azure与亚马逊AWS的主要区别是什么&#xff1f…

TeeChart Pro ActiveX 2023.3.20 Crack

TeeChart Pro ActiveX 图表组件库提供数百种 2D 和 3D 图形样式、56 种数学和统计函数供您选择&#xff0c;以及无限数量的轴和 14 个工具箱组件。图表控件可以有效地用于创建多任务仪表板。 插件的多功能性 ActiveX 图表控件作为服务器端库中的 Web 图表、脚本化 ASP 图表或桌…