'''backtest

start: 2019-07-01 00:00:00

end: 2020-01-03 00:00:00

period: 1m

exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]'''

importjson#参数

beginPrice = 5000 #网格区间开始价格

endPrice = 8000 #网格区间结束价格

distance = 20 #每个网格节点的价格距离

pointProfit = 50 #每个网格节点的利润差价

amount = 0.01 #每个网格节点的挂单量

minBalance = 300 #账户最小资金余额(买入时)

#全局变量

arrNet =[]

arrMsg=[]

acc=Nonedef findOrder (orderId, NumOfTimes, ordersList =[]) :for j inrange(NumOfTimes) :

orders=Noneif len(ordersList) ==0:

orders=_C(exchange.GetOrders)else:

orders=ordersListfor i inrange(len(orders)):if orderId == orders[i]["Id"]:returnTrue

Sleep(1000)returnFalsedefcancelOrder (price, orderType) :

orders=_C(exchange.GetOrders)for i inrange(len(orders)) :if price == orders[i]["Price"] and orderType == orders[i]["Type"]:

exchange.CancelOrder(orders[i]["Id"])

Sleep(500)defcheckOpenOrders (orders, ticker) :globalarrNet, arrMsgfor i inrange(len(arrNet)) :if not findOrder(arrNet[i]["id"], 1, orders) and arrNet[i]["state"] == "pending":

orderId= exchange.Sell(arrNet[i]["coverPrice"], arrNet[i]["amount"], arrNet[i], ticker)iforderId :

arrNet[i]["state"] = "cover"arrNet[i]["id"] =orderIdelse:#撤销

cancelOrder(arrNet[i]["coverPrice"], ORDER_TYPE_SELL)

arrMsg.append("挂单失败!" + json.dumps(arrNet[i]) + ", time:" +_D())defcheckCoverOrders (orders, ticker) :globalarrNet, arrMsgfor i inrange(len(arrNet)) :if not findOrder(arrNet[i]["id"], 1, orders) and arrNet[i]["state"] == "cover":

arrNet[i]["id"] = -1arrNet[i]["state"] = "idle"Log(arrNet[i],"节点平仓,重置为空闲状态。", "#FF0000")defonTick () :globalarrNet, arrMsg, acc

ticker= _C(exchange.GetTicker) #每次获取当前最新的行情

for i in range(len(arrNet)): #遍历所有网格节点,根据当前行情,找出需要挂单的位置,挂买单。

if i != len(arrNet) - 1 and arrNet[i]["state"] == "idle" and ticker.Sell > arrNet[i]["price"] and ticker.Sell < arrNet[i + 1]["price"]:

acc=_C(exchange.GetAccount)if acc.Balance < minBalance : #如果钱不够了,只能跳出,什么都不做了。

arrMsg.append("资金不足" + json.dumps(acc) + "!" + ", time:" +_D())breakorderId= exchange.Buy(arrNet[i]["price"], arrNet[i]["amount"], arrNet[i], ticker) #挂买单

iforderId :

arrNet[i]["state"] = "pending" #如果买单挂单成功,更新网格节点状态等信息

arrNet[i]["id"] =orderIdelse:#撤单

cancelOrder(arrNet[i]["price"], ORDER_TYPE_BUY) #使用撤单函数撤单

arrMsg.append("挂单失败!" + json.dumps(arrNet[i]) + ", time:" +_D())

Sleep(1000)

orders=_C(exchange.GetOrders)

checkOpenOrders(orders, ticker)#检测所有买单的状态,根据变化做出处理。

Sleep(1000)

orders=_C(exchange.GetOrders)

checkCoverOrders(orders, ticker)#检测所有卖单的状态,根据变化做出处理。

#以下为构造状态栏信息,可以查看FMZ API 文档。

tbl ={"type" : "table","title" : "网格状态","cols" : ["节点索引", "详细信息"],"rows": [],

}for i inrange(len(arrNet)) :

tbl["rows"].append([i, json.dumps(arrNet[i])])

errTbl={"type" : "table","title" : "记录","cols" : ["节点索引", "详细信息"],"rows": [],

}

orderTbl={"type" : "table","title" : "orders","cols" : ["节点索引", "详细信息"],"rows": [],

}while len(arrMsg) > 20:

arrMsg.pop(0)for i inrange(len(arrMsg)) :

errTbl["rows"].append([i, json.dumps(arrMsg[i])])for i inrange(len(orders)) :

orderTbl["rows"].append([i, json.dumps(orders[i])])

LogStatus(_D(),"\n", acc, "\n", "arrMsg length:", len(arrMsg), "\n", "`" + json.dumps([tbl, errTbl, orderTbl]) + "`")def main (): #策略执行从这里开始

globalarrNetfor i in range(int((endPrice - beginPrice) / distance)): #for 这个循环根据参数构造了网格的数据结构,是一个列表,储存每个网格节点,每个网格节点的信息如下:

arrNet.append({"price" : beginPrice + i * distance, #该节点的价格

"amount" : amount, #订单数量

"state" : "idle", #pending / cover / idle # 节点状态

"coverPrice" : beginPrice + i * distance + pointProfit, #节点平仓价格

"id" : -1, #节点当前相关的订单的ID

})while True: #构造好网格数据结构后,进入策略主要循环

onTick() #主循环上的处理函数,主要处理逻辑

Sleep(500) #控制轮询频率

python 网格交易源码_Python版简单网格策略相关推荐

  1. python 网格交易源码_【宽客策略源码】网格交易(期货)

    # coding=utf-8 from __future__ import print_function, absolute_import, unicode_literals import numpy ...

  2. python 网格交易源码_GitHub - zhiaozhou/grid-trading: 网格交易(期货) ,基于网格交易方法的交易策略...

    # coding=utf-8 from __future__ import print_function, absolute_import, unicode_literals import numpy ...

  3. python 网格策略_Python版简单网格策略

    Python版简单网格策略 策略广场上的Python策略不多,这里编写了一个Python版本的网格策略.策略原理十分简单,在一个价格区间内固定价格距离产生一系列的网格节点,当行情变化时,价格到达一个网 ...

  4. python 网格线_Python版简单网格策略(教学)

    Python版简单网格策略(教学) Python版简单网格策略(教学) Author: 小小梦, Date: 2020-01-04 11:12:15 Tags: '''backtest start: ...

  5. python 网格交易源码_网格交易策略(难度:中级)

    什么是网格交易策略 网格交易又名渔网交易,就是跌买涨卖.它适合震荡市,震荡市就是行情价围着一个数字上下浮动的,这个数字就是设置的价格中轴线. 设定中枢价格后,对投资标的进行机械式操作,下跌时,进行分档 ...

  6. python 网格交易源码_网格交易法策略源码

    网格交易法的源码 //+------------------------------------------------------------------+ //| Grid1.1.mq4 | // ...

  7. python闹钟界面源码_Python编程练习:简单的闹钟提醒

    问题详情:当前时间为下午2点,你在手机上设置了一个闹钟提醒,10000秒后触发该闹钟,请问闹钟铃声响起时的具体时间?请用print打印出时间 源码: a = 10000 h,m,s=2,0,0 if ...

  8. python贪吃蛇源码_Python:游戏:贪吃蛇(附源码)

    Python:游戏:贪吃蛇(附源码) 发布时间:2018-09-05 09:59, 浏览次数:1295 , 标签: Python 贪吃蛇是个非常简单的游戏,适合练手. 首先分析一下这个游戏 1.蛇怎么 ...

  9. python字符串替换源码_Python实现字符串中某个字母的替代功能

    Python实现字符串中某个字母的替代功能 今晚想实现这样一个功能:将输入字符串中的字母 "i" 变成字母 "p".当时想的很简单,直接用for循环遍历,然后替 ...

最新文章

  1. 高中计算机的基本知识教学,高中计算机教案人教版
  2. 中国博士把整个 CNN 都给可视化了,每次卷积 ReLU 池化都清楚
  3. c++数据结构代码整理_抄代码对自己编程提高有用嘛
  4. 数字电路反相器符号_数字电路の门电路(1)
  5. Blazor带我重玩前端(二)
  6. BZOJ 2324: [ZJOI2011]营救皮卡丘(带上下限的最小费用最大流)
  7. LeetCode 792. 匹配子序列的单词数(二分查找)
  8. java 大文件上传_JAVA大文件上传分片上传方法(附带demo)
  9. Flink_大数据技术之电商用户行为分析
  10. http禁用缓存、文件下载
  11. 设计师必备3Dmax插件盘点 最全插件展示
  12. 【7.13】代码源 -【饿饿 饭饭】【路径计数2】【函数求和】
  13. AtCoder ABC237题解
  14. Spatial-Spectral Transformer for Hyperspectral Image Classification_外文翻译
  15. 人体红外模块对比评测,是你的话怎么选
  16. 在家控制公司的电脑 这两个软件你下载了吗
  17. JavaScript 引用类型 读书笔记
  18. 聊聊 Kafka:协调者 GroupCoordinator 源码剖析之 FIND_COORDINATOR
  19. 基于lnmp 一键安装 添加 Nginx 的模块(module)
  20. QGIS之十一导入CAD文件dwg/dxf

热门文章

  1. 禁忌搜索算法求解TSP旅行商问题Matlab实现
  2. 网站的架构CS和中间件
  3. 怎么看曲线有没有斜渐近线_曲线的斜渐近线怎么求啊?步骤是什么
  4. (二)编译PVE内核5.10.6-1-pve及安装内核补丁fullconeNat
  5. DRF之View、APIView以及GenericAPIView
  6. 男人常吃6种食物当心伤精少精
  7. Baumer工业相机堡盟相机如何使用CameraExplorer软件查看相机图像相关参数如Binning像素合并、ROI图像剪切、PixelFormat像素格式功能等
  8. 8-1 用QPainter绘图(Painting with QPainter)
  9. windows10搜索框不能搜索解决方法
  10. JAVA日期格式化常用格式对照表