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版简单网格策略(教学)相关推荐

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

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

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

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

  3. python 网格交易源码_Python版简单网格策略

    '''backtest start: 2019-07-01 00:00:00 end: 2020-01-03 00:00:00 period: 1m exchanges: [{"eid&qu ...

  4. python简单工厂模式_python版简单工厂模式

    什么是简单工厂模式 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的.从软件开发的角度来说,这样就 ...

  5. 爬虫软件python功能_python实现简单爬虫功能的示例

    python开源工具列表[持续更新] 以下是个人在工作中整理的一些python wheel,供参考.这个列表包含与网页抓取和数据处理的Python库 网络 通用urllib -网络库(stdlib). ...

  6. 编写五子棋的完整python代码_python制作简单五子棋游戏

    本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 #五子棋 '" 矩阵做棋盘 16*16 "+" 打印棋盘 for for 游戏是否结束 开 ...

  7. python参数化_Python unittest 简单实现参数化的方法

    Python unittest 理论上是不建议参数驱动的,其用例应该专注单元测试,确保每个method的逻辑正确. 引用Stack Overflow的一个答案, "单元测试应该是独立的,没有 ...

  8. python网页服务器_python编写简单网页服务器

    这篇文章主要介绍了关于python 编写简单网页服务器,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 IDE:Pycharm sever.py #!/bin/python #-*- c ...

  9. python并行计算_Python并行计算简单实现

    multiprocessing包是Python中的多进程管理包. Pool(num)类提供一个进程池,然后在多个核中执行这些进程, 其中默认参数num是当前机器CPU的核数. Pool.map(fun ...

最新文章

  1. JDK的安装与系统环境变量的配置
  2. python学习day3
  3. 什么是闭包,我的理解
  4. python 可变参数
  5. GVA gin-vue-admin前后端部署教程
  6. sharepoint 2010项目中,ashx页面获取SPContext.Current 为null的原因和解决方法
  7. grid++中打印表格时怎么让每页有打印表头_1分钟!学会快速打印标题行,轻松搞定不加班...
  8. C++工作笔记-对容器模板的初步认识
  9. 2019年的一个小目标,成为csdn的博客专家,纪念一下
  10. 数字图像处理与Python实现-Scikit-Image-图像滤波(三)
  11. 催收行业再现“暴力(利)”
  12. 【MySQL笔记 第06章_多表查询】
  13. EBS杂项出库事务处理
  14. Mobileye转变与芯片技术
  15. DNA存储技术创造新纪录 存储容量已达200MB
  16. 网络游戏运营策略分析
  17. View Printsoft Pres Code easily in Ultraedit
  18. Android游戏: 华容道
  19. 海报设计素材|绝美纹理背景简直太实用了
  20. Hive 中的复合数据结构

热门文章

  1. 唯一的hashCodes不足以避免冲突
  2. Java EE CDI依赖关系消歧示例
  3. 带有GSON和抽象类的JSON
  4. MySQL命令之mysqldump的选项详解
  5. 人生永无止境的意思是什么_励志人生:生活不会给任何脆弱鼓掌。
  6. c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...
  7. oracle数据库sqlloader,sql loader ---ORACLE SQLLDR
  8. springboot需要tomcat服务器吗_SpringBoot学习(二):内嵌服务器引擎(Tomcat,Jetty)实现原理...
  9. 理解好内存管理,C语言就不难学了
  10. 大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构