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 最上面的网址就是策略讲解

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

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

相关文章

python土味情话_土味情话表情包下载

喵星人土味情话表情包是一款很甜的表情图片&#xff0c;现在的聊天模式三句话离不开表情包&#xff0c;而且小编带来的这款表情包非常的适合情侣日常撩&#xff0c;最新的土味情话&#xff0c;需要的朋友可以前来本站下载。土味情话大全一、“对不起。”“你永远都不要和我说对…

多云互操作性!=云服务聚合

多云定义为一种方法&#xff0c;它将来自多个云供应商的多个云&#xff08;公共云或私有云&#xff09;组合在一起。 但是&#xff0c;这不是来自不同供应商的各种服务的集合&#xff0c;它需要一种强制性的胶合剂–云不可知的方法&#xff0c;并在所有提供商之间实现互操作性。…

python股票预测代码_python用线性回归预测股票价格的实现代码

线性回归在整个财务中广泛应用于众多应用程序中。在之前的教程中&#xff0c;我们使用普通最小二乘法(OLS)计算了公司的beta与相对索引的比较。现在&#xff0c;我们将使用线性回归来估计股票价格。线性回归是一种用于模拟因变量(y)和自变量(x)之间关系的方法。通过简单的线性回…

如何在Spring中将@RequestParam绑定到对象

您是否在请求映射方法中用RequestParam注释了多个参数&#xff0c;并认为它不可读&#xff1f; 当请求中需要一个或两个输入参数时&#xff0c;注释看起来非常简单&#xff0c;但是当列表变长时&#xff0c;您可能会感到不知所措。 您不能在对象内部使用RequestParam批注&…

java替换指定位置字符_JS中的替换,以及替换指定位置的字符串

批量修改name属性中的值// 渲染完成&#xff0c;开始修改ansewer的name属性$(‘.sub_timu_zong_tihao‘).each(function(i){$(this).find(‘input[name*bianhao]‘).each(function(){// 首先获取name的值&#xff0c;对console.log(‘正在修改bianhao‘)var old$(this).attr(‘…

webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...

大家好&#xff0c;在软件测试面试过程中&#xff0c;经常有面试官问到这个问题&#xff0c;那我们应该如何回答才好呢&#xff1f;少废话&#xff0c;直接看答案&#xff1a;答案&#xff1a;在页面上发现bug之后&#xff0c;要想判断这个问题属于后端还是前端&#xff0c;我就…

spring基于注释的配置_基于注释的Spring MVC Web应用程序入门

spring基于注释的配置这是使Maven启动Spring 3 MVC项目的最小方法。 首先创建spring-web-annotation/pom.xml文件&#xff0c;并包含Spring依赖项&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apach…

ad09只在一定范围内查找相似对象_dxp查找相似对象

(Edit→Find Similar Objects)ShifF 查找 相似对象 EOS(Edit→Origin→Set)设置坐标原点 ESN((Edit → Select → Net) 选中显示某个网 络 FA(......“ctrlA”全选,选择需要修改的器 件,点鼠标右键弹出如下图的菜单: 选择 “查找相似对象” 移动鼠标到需要修改的属性上,点“ok”…

首次适应算法_CVPR 2020丨?商汤TSD目标检测算法获得Open Images冠军

编者按&#xff1a;此前&#xff0c;在文章《商汤科技57篇论文入选ICCV 2019&#xff0c;13项竞赛夺冠》里&#xff0c;商汤君报道了商汤科技荣获Open Images Object Detection Challenge 2019 冠军。由Google AI主办的Open Images大赛是目前通用物体检测和实例分割两个领域中数…

玩JDK 12的Switch表达式

在博客文章“操作中的JDK语言功能预览&#xff1a;切换表达式 ”中&#xff0c;我讨论了JEP 325 [“切换表达式&#xff08; 预览 &#xff09;”&#xff09;如何作为指定的“ 预览语言功能 ”的早期应用&#xff0c;如JEP 12所述。预览语言和VM功能”]。 JEP 325 适用于JDK 1…

java 三元 代替 if_Java 中三元和 if else 哪个的效率比较高,有底层解释吗,谢谢了!...

Genokiller2018-12-28 18:16:11 08:00是否还有其他影响效率的地方两段简短的测试代码&#xff1a;Test2.java (三元运算符)public class Test2{public static void main(String args[]){int m 1, n2;String s m > n ? "a" : "b";}}Test3.java ( if...…

python 验证码_4行Python代码生成图像验证码

点击上方蓝色字体&#xff0c;关注我们最近无意看到网上有人使用Python编写几十行代码生成图像验证码&#xff0c;感觉很是繁琐&#xff0c;这里为各位朋友推荐两种方法&#xff0c;使用4行Python代码即可生成验证码。1captcha库第1步&#xff1a;安装captcha库pip install cap…

python3 多线程_Python3多线程爬虫实例讲解

多线程概述多线程使得程序内部可以分出多个线程来做多件事情&#xff0c;充分利用CPU空闲时间&#xff0c;提升处理效率。python提供了两个模块来实现多线程thread 和threading &#xff0c;thread 有一些缺点&#xff0c;在threading 得到了弥补。并且在Python3中废弃了thread…

java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

elasticsearch组合多条件查询实现restful api以及java代码实现实际开发中&#xff0c;基本都是组合多条件查询。elasticsearch提供bool来实现这种需求&#xff1b;主要参数&#xff1a;must文档 必须 匹配这些条件才能被包含进来。must_not文档 必须不 匹配这些条件才能被包含进…

instanceof运算符_Java 8中的instanceof运算符和访客模式替换

instanceof运算符我有一个梦想&#xff0c;不再需要操作员和垂头丧气的instanceof &#xff0c;却没有访客模式的笨拙和冗长。 所以我想出了以下DSL语法&#xff1a; Object msg //...whenTypeOf(msg).is(Date.class). then(date -> println(date.getTime())).is(Strin…

python垃圾处理_利用python程序帮大家清理windows垃圾

前言大家应该都有所体会&#xff0c;在windows系统使用久了就会产生一些“垃圾”文件。这些文件有的是程序的临时文件&#xff0c;有的是操作记录或日志等。垃圾随着时间越积越多&#xff0c;导致可用空间减少&#xff0c;文件碎片过多&#xff0c;使得系统的运行速度受到一定影…

基于java家教管理系统_基于jsp的家教信息管理-JavaEE实现家教信息管理 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的家教信息管理, 该项目可用各类java课程设计大作业中, 家教信息管理的系统架构分为前后台两部分, 最终实现在线上进行家教信息管理各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家教信息管理相关的实体…

如何从云功能调用外部REST API

在之前的博客文章中&#xff0c;我展示了如何创建您的第一个云功能 &#xff08;以及一个视频 &#xff09;。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能&#xff08;非常简单&#xff09;。 登录到IBM Cloud帐户 点击目录 删除标签&…

sinx泰勒展开_高考中怎么用泰勒公式?

好久没有更新了&#xff0c;最近一直在准备天津市高数竞赛&#xff0c;今天才有空写高考的文章看&#xff0c;并且运用这篇文章的前提要求是已经掌握了绝大多数的高考题型然后了解泰勒拓展知识面什么是泰勒公式&#xff1f;你去百度肯定会有一大堆理论给你解释&#xff0c;今天…

java selenium 日志_java - 支持selenium日志_java_酷徒编程知识库

在自動測試中&#xff0c;Chrome創建了大量日誌&#xff0c;System.setProperty("webdriver.chrome.silentOutput","true");ChromeOptions options new ChromeOptions();options.addArguments("--disable-logging","--log-levelOFF",…