Python告诉你,这样买的股票才有灵魂
什么是日内交易
策略逻辑
策略编写
import time
# 策略主函数
def onTick():
pass
# 程序入口
def main():
while True: # 进入无限循环模式
onTick() # 执行策略主函数
Sleep(1000)# 休眠1秒
mp = on_line = under_line = 0
def can_time(hour, minute):
hour = str(hour)
minute = str(minute)
if len(minute) == 1:
minute = "0" + minute
return int(hour + minute)
_C(exchange.SetContractType, "MA888") # 订阅期货品种
bar_arr = _C(exchange.GetRecords) # 获取K线列表
if len(bar_arr) < 10:
return
time_new = bar_arr[-1]['Time'] # 获取当根K线的时间戳
time_local_new = time.localtime(time_new / 1000) # 处理时间戳
hour_new = int(time.strftime("%H", time_local_new)) # 获取小时
minute_new = int(time.strftime("%M", time_local_new))# 获取分钟
day_new = int(time.strftime("%d", time_local_new))# 当前K线日期
time_previous = bar_arr[-2]['Time'] # 获取上根K线的时间戳
previous = time.localtime(time_previous / 1000) # 处理时间戳
day_previous = int(time.strftime("%d", previous)) # 上根K线日期
global mp, on_line, under_line # 引入全局变量
high = bar_arr[-2]['High'] # 获取上根K线的最高价
low = bar_arr[-2]['Low'] # 获取上根K线的最低价
if day_new != day_previous: # 如果是最新一根K线
on_line = high * up # 重置上轨
under_line = low * down # 重置下轨
can_trade = can_time(hour_new, minute_new)
if can_trade < 930: # 如果不是在规定交易的时间内
if high > on_line: # 如果上根K线最高价大于上轨
on_line = high * up # 重置上轨
if low < under_line: # 如果上根K线最低价小于下轨
under_line = low * down # 重置上轨
if on_line - under_line < 10: # 如果上轨与下轨的差小于10
return
close_new = bar_arr[-1]['Close'] # 获取最新价格(卖价),用于开平仓
# 如果持多单,并且价格小于下轨或者非规定的交易时间
if mp > 0 and (close_new < under_line or can_trade > 1450):
exchange.SetDirection("closebuy") # 设置交易方向和类型
exchange.Sell(close_new - 1, 1) # 平多单
mp = 0 # 设置虚拟持仓的值,即空仓
# 如果持空单,并且价格大于上轨或者非规定的交易时间
if mp < 0 and (close_new > on_line or can_trade > 1450):
exchange.SetDirection("closesell") # 设置交易方向和类型
exchange.Buy(close_new, 1) # 平空单
mp = 0 # 设置虚拟持仓的值,即空仓
if mp == 0 and 930 < can_trade < 1450: # 如果当前无持仓且在交易时间内
if close_new > on_line: # 如果价格大于上轨
exchange.SetDirection("buy") # 设置交易方向和类型
exchange.Buy(close_new, 1) # 开多单
mp = 1 # 设置虚拟持仓的值,即有多单
elif close_new < under_line: # 如果价格小于下轨
exchange.SetDirection("sell") # 设置交易方向和类型
exchange.Sell(close_new - 1, 1) # 开空单
mp = -1 # 设置虚拟持仓的值,即有空单
6. 完整策略代码
# 导入库
import time
# 定义全局变量:虚拟持仓、上轨、下轨
mp = on_line = under_line = 0
# 处理时间函数
def can_time(hour, minute):
hour = str(hour)
minute = str(minute)
if len(minute) == 1:
minute = "0" + minute
return int(hour + minute)
def onTick():
_C(exchange.SetContractType, "MA888") # 订阅期货品种
bar_arr = _C(exchange.GetRecords) # 获取K线列表
if len(bar_arr) < 10:
return
time_new = bar_arr[-1]['Time'] # 获取当根K线的时间戳
time_local_new = time.localtime(time_new / 1000) # 处理时间戳
hour_new = int(time.strftime("%H", time_local_new)) # 获取小时
minute_new = int(time.strftime("%M", time_local_new))# 获取分钟
day_new = int(time.strftime("%d", time_local_new))# 当前K线日期
time_previous = bar_arr[-2]['Time'] # 获取上根K线的时间戳
previous = time.localtime(time_previous / 1000) # 处理时间戳
day_previous = int(time.strftime("%d", previous)) # 上根K线日期
global mp, on_line, under_line # 引入全局变量
high = bar_arr[-2]['High'] # 获取上根K线的最高价
low = bar_arr[-2]['Low'] # 获取上根K线的最低价
if day_new != day_previous: # 如果是最新一根K线
on_line = high * up # 重置上轨
under_line = low * down # 重置下轨
can_trade = can_time(hour_new, minute_new)
if can_trade < 930: # 如果不是在规定交易的时间内
if high > on_line: # 如果上根K线最高价大于上轨
on_line = high * up # 重置上轨
if low < under_line: # 如果上根K线最低价小于下轨
under_line = low * down # 重置上轨
if on_line - under_line < 10: # 如果上轨与下轨的差小于10
return
close_new = bar_arr[-1]['Close'] # 获取最新价格(卖价),用于开平仓
# 如果持多单,并且价格小于下轨或者非规定的交易时间
if mp > 0 and (close_new < under_line or can_trade > 1450):
exchange.SetDirection("closebuy") # 设置交易方向和类型
exchange.Sell(close_new - 1, 1) # 平多单
mp = 0 # 设置虚拟持仓的值,即空仓
# 如果持空单,并且价格大于上轨或者非规定的交易时间
if mp < 0 and (close_new > on_line or can_trade > 1450):
exchange.SetDirection("closesell") # 设置交易方向和类型
exchange.Buy(close_new, 1) # 平空单
mp = 0 # 设置虚拟持仓的值,即空仓
if mp == 0 and 930 < can_trade < 1450: # 如果当前无持仓且在交易时间内
if close_new > on_line: # 如果价格大于上轨
exchange.SetDirection("buy") # 设置交易方向和类型
exchange.Buy(close_new, 1) # 开多单
mp = 1 # 设置虚拟持仓的值,即有多单
elif close_new < under_line: # 如果价格小于下轨
exchange.SetDirection("sell") # 设置交易方向和类型
exchange.Sell(close_new - 1, 1) # 开空单
mp = -1 # 设置虚拟持仓的值,即有空单
def main():
while True:
onTick()
Sleep(1000)
文末赠书
推荐《商品期货量化交易实战》,送5本,
由电子工业出版社赞助。
送书规则
规则很简单:我们每个月都会给大家送书(累计送出379多本),常来留言混脸熟的都会有机会!这次送出的是书籍,非常值得一读。只要你坚持每日来留言打卡进精选,就会回报!名单会月底公布!
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
评论