python 网格线_Python版简单网格策略(教学)
Python版简单网格策略(教学)
Python版简单网格策略(教学)
Author: 小小梦, Date: 2020-01-04 11:12:15
Tags:
'''backtest
start: 2019-07-01 00:00:00
end: 2020-01-03 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]
'''
import json
# 参数
beginPrice = 5000
endPrice = 8000
distance = 20
pointProfit = 50
amount = 0.01
minBalance = 300
# 全局变量
arrNet = []
arrMsg = []
acc = None
def findOrder (orderId, NumOfTimes, ordersList = []) :
for j in range(NumOfTimes) :
orders = None
if len(ordersList) == 0:
orders = _C(exchange.GetOrders)
else :
orders = ordersList
for i in range(len(orders)):
if orderId == orders[i]["Id"]:
return True
Sleep(1000)
return False
def cancelOrder (price, orderType) :
orders = _C(exchange.GetOrders)
for i in range(len(orders)) :
if price == orders[i]["Price"] and orderType == orders[i]["Type"]:
exchange.CancelOrder(orders[i]["Id"])
Sleep(500)
def checkOpenOrders (orders, ticker) :
global arrNet, arrMsg
for i in range(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)
if orderId :
arrNet[i]["state"] = "cover"
arrNet[i]["id"] = orderId
else :
# 撤销
cancelOrder(arrNet[i]["coverPrice"], ORDER_TYPE_SELL)
arrMsg.append("挂单失败!" + json.dumps(arrNet[i]) + ", time:" + _D())
def checkCoverOrders (orders, ticker) :
global arrNet, arrMsg
for i in range(len(arrNet)) :
if not findOrder(arrNet[i]["id"], 1, orders) and arrNet[i]["state"] == "cover" :
arrNet[i]["id"] = -1
arrNet[i]["state"] = "idle"
Log(arrNet[i], "节点平仓,重置为空闲状态。", "#FF0000")
def onTick () :
global arrNet, 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())
break
orderId = exchange.Buy(arrNet[i]["price"], arrNet[i]["amount"], arrNet[i], ticker)
if orderId :
arrNet[i]["state"] = "pending"
arrNet[i]["id"] = orderId
else :
# 撤单
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)
tbl = {
"type" : "table",
"title" : "网格状态",
"cols" : ["节点索引", "详细信息"],
"rows" : [],
}
for i in range(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 in range(len(arrMsg)) :
errTbl["rows"].append([i, json.dumps(arrMsg[i])])
for i in range(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 ():
global arrNet
for i in range(int((endPrice - beginPrice) / distance)):
arrNet.append({
"price" : beginPrice + i * distance,
"amount" : amount,
"state" : "idle", # pending / cover / idle
"coverPrice" : beginPrice + i * distance + pointProfit,
"id" : -1,
})
while True:
onTick()
Sleep(500)
更多内容
18392409863 您好,这个策略可以写下每一步详细的注释嘛,因为是刚接触fmz,有些还是不咋看的懂,很懵逼。。。谢谢您了
FMZ_JH 最上面的网址就是策略讲解
python 网格线_Python版简单网格策略(教学)相关推荐
- python 网格策略_Python版简单网格策略
Python版简单网格策略 策略广场上的Python策略不多,这里编写了一个Python版本的网格策略.策略原理十分简单,在一个价格区间内固定价格距离产生一系列的网格节点,当行情变化时,价格到达一个网 ...
- python 网格_Python版简单网格策略
策略广场上的Python策略不多,这里编写了一个Python版本的网格策略.策略原理十分简单,在一个价格区间内固定价格距离产生一系列的网格节点,当行情变化时,价格到达一个网格节点价格位置,就挂一个买入 ...
- python 网格交易源码_Python版简单网格策略
'''backtest start: 2019-07-01 00:00:00 end: 2020-01-03 00:00:00 period: 1m exchanges: [{"eid&qu ...
- python简单工厂模式_python版简单工厂模式
什么是简单工厂模式 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的.从软件开发的角度来说,这样就 ...
- 爬虫软件python功能_python实现简单爬虫功能的示例
python开源工具列表[持续更新] 以下是个人在工作中整理的一些python wheel,供参考.这个列表包含与网页抓取和数据处理的Python库 网络 通用urllib -网络库(stdlib). ...
- 编写五子棋的完整python代码_python制作简单五子棋游戏
本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 #五子棋 '" 矩阵做棋盘 16*16 "+" 打印棋盘 for for 游戏是否结束 开 ...
- python参数化_Python unittest 简单实现参数化的方法
Python unittest 理论上是不建议参数驱动的,其用例应该专注单元测试,确保每个method的逻辑正确. 引用Stack Overflow的一个答案, "单元测试应该是独立的,没有 ...
- python网页服务器_python编写简单网页服务器
这篇文章主要介绍了关于python 编写简单网页服务器,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 IDE:Pycharm sever.py #!/bin/python #-*- c ...
- python并行计算_Python并行计算简单实现
multiprocessing包是Python中的多进程管理包. Pool(num)类提供一个进程池,然后在多个核中执行这些进程, 其中默认参数num是当前机器CPU的核数. Pool.map(fun ...
最新文章
- JDK的安装与系统环境变量的配置
- python学习day3
- 什么是闭包,我的理解
- python 可变参数
- GVA gin-vue-admin前后端部署教程
- sharepoint 2010项目中,ashx页面获取SPContext.Current 为null的原因和解决方法
- grid++中打印表格时怎么让每页有打印表头_1分钟!学会快速打印标题行,轻松搞定不加班...
- C++工作笔记-对容器模板的初步认识
- 2019年的一个小目标,成为csdn的博客专家,纪念一下
- 数字图像处理与Python实现-Scikit-Image-图像滤波(三)
- 催收行业再现“暴力(利)”
- 【MySQL笔记 第06章_多表查询】
- EBS杂项出库事务处理
- Mobileye转变与芯片技术
- DNA存储技术创造新纪录 存储容量已达200MB
- 网络游戏运营策略分析
- View Printsoft Pres Code easily in Ultraedit
- Android游戏: 华容道
- 海报设计素材|绝美纹理背景简直太实用了
- Hive 中的复合数据结构
热门文章
- 唯一的hashCodes不足以避免冲突
- Java EE CDI依赖关系消歧示例
- 带有GSON和抽象类的JSON
- MySQL命令之mysqldump的选项详解
- 人生永无止境的意思是什么_励志人生:生活不会给任何脆弱鼓掌。
- c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...
- oracle数据库sqlloader,sql loader ---ORACLE SQLLDR
- springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...
- 理解好内存管理,C语言就不难学了
- 大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构