技术图文:进一步完善自动化交易系统 - 01
背景
最初,我们介绍了 如何利用网格交易法对数字资产进行交易。只要价格存在波动,通过这种方法就能赚取利润。
接着,我们介绍了 如何通过三角套利来交易数字资产。只要三种数字资产,两两存在交易对,就可以建立套利的路径,满足条件的情况下进行套利。
可是,在今天回测的时候,却发现有极个别订单在未全部成交的情况下就被取消了。
具体情况如下:
BigOne 存在 ONE-USDT、EOS-USDT、ONE-EOS 交易对。
我运行了 “USDT -> ONE,ONE -> EOS,EOS -> USDT” 买入->卖出->卖出 以及 “ONE -> USDT,USDT -> EOS,EOS -> ONE” 卖出->买入->买入 两条三角套利的路径。
我还运行了 “ONE-EOS” 的网格,在网格成交之后会撤销 “ONE-EOS” 的全部订单,然后以当前成交价为基准,重新挂入买单和卖单。
故,以上Bug存在的原因可能是:在网格交易 撤销 “ONE-EOS” 订单的时候,正好有 三角套利的 “ONE-EOS”订单挂入,所以在没有完全成交的情况下,被撤销了。
我把日志中的订单号拿出来,写程序验证后,发现自己的猜测是正确的。
技术分析
找到原因之后,我完善了自动化交易的代码。
在套利策略执行之后,随即执行以下三个步骤:
- Step1:读取被取消订单的记录文件,该文件存储了被取消订单的id。
- Step2:依据被取消订单的信息重新生成订单。
- Step3:重新检查订单状态,把被取消订单的id写入到记录文件中。
注:通过 _lstOrderData
变量记录当前运行环境中的所有订单。
private static List<OrderResponseData> _lstOrderData = new List<OrderResponseData>();
代码实现
读取被取消订单的记录文件
static void ReadOrderData(string fileName)
{LSGOTextFileControlFacade pTextFile = new LSGOTextFileControlFacade();if (pTextFile.FileExist(fileName) == false)return;string[] btcRecord = pTextFile.FileRead(fileName);for (int i = 0; i < btcRecord.Length; i++){string id = btcRecord[i].Trim();if (string.IsNullOrEmpty(id) == false){OrderResponseData item = _bigOneUtility.GetOrder(id);if (item.state == "CANCELED")_lstOrderData.Add(item);}}
}
依据被取消订单的信息重新生成订单
static void CreateOrderData()
{List<OrderResponseData> lstNewOrder = new List<OrderResponseData>();_lstOrderData.RemoveAll(a => a.state == "FILLED");for (int i = 0; i < _lstOrderData.Count; i++){_lstOrderData[i] = _bigOneUtility.GetOrder(_lstOrderData[i].id);if (_lstOrderData[i].state == "CANCELED"){double price = Convert.ToDouble(_lstOrderData[i].price);double amount = Convert.ToDouble(_lstOrderData[i].amount);string marketId = _lstOrderData[i].market_id;string side = _lstOrderData[i].side;List<Order> order = new List<Order>{new Order(price, amount)};List<OrderResponse> lst = side == "ASK"? _bigOneUtility.CreateAskOrders(order, marketId): _bigOneUtility.CreateBidOrders(order, marketId);OrderResponseData data = _bigOneUtility.GetOrder(lst[0].data.id);lstNewOrder.Add(data);}}lstNewOrder.RemoveAll(a => a.state == "FILLED");_lstOrderData.RemoveAll(a => a.state == "CANCELED");_lstOrderData.AddRange(lstNewOrder);
}
把被取消订单的id
写入到文件。
static void WriteOrderData(string fileName)
{_lstOrderData.RemoveAll(a => a.state == "FILLED");LSGOTextFileControlFacade pTextFile = new LSGOTextFileControlFacade();string log = string.Empty;for (int i = 0; i < _lstOrderData.Count; i++){_lstOrderData[i] = _bigOneUtility.GetOrder(_lstOrderData[i].id);if (_lstOrderData[i].state == "CANCELED"){log += _lstOrderData[i].id + Environment.NewLine;}}if (string.IsNullOrEmpty(log)){pTextFile.FileDelete(fileName);}else{pTextFile.FileWrite(fileName, log, Encoding.Default, false);}
}
总结
做一套生产环境运行的软件系统还是很难的。不仅需要考虑自身软件对数据状态的改变,还要考虑如果数据状态被外部软件修改,我们要如何应对。慢慢来啊,做任何事情都需要一个过程,先有个原型跑起来再说!后面,再来重构自己的代码。今天就到这里吧!See You!
相关图文:
- 如何利用 C# 实现 K 最邻近算法?
- 如何利用 C# 实现 K-D Tree 结构?
- 如何利用 C# + KDTree 实现 K 最邻近算法?
- 如何利用 C# 对神经网络模型进行抽象?
- 如何利用 C# 实现神经网络的感知器模型?
- 如何利用 C# 实现 Delta 学习规则?
- 如何利用 C# 爬取带 Token 验证的网站数据?
- 如何利用 C# 向 Access 数据库插入大量数据?
- 如何利用 C# 开发「桌面版百度翻译」软件!
- 如何利用 C# 开发「股票数据分析软件」(上)
- 如何利用 C# 开发「股票数据分析软件」(中)
- 如何利用 C# 开发「股票数据分析软件」(下)
- 如何利用 C# 爬取「财报说」中的股票数据?
- 如何利用 C# 爬取 One 持有者返利数据!
- 如何利用 C# 爬取Gate.io交易所的公告!
- 如何利用 C# 爬取BigOne交易所的公告!
- 如何利用 C# 爬取 ONE 的交易数据?
- 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
- 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!
- 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
- 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
- 如何进行代码的重构?以封装 BigOne API 为例
- 如何利用BigOne的API制作自动化交易系统 – 身份验证
- 如何利用BigOne的API制作自动化交易系统 – 获取账户资产
- 如何利用BigOne的API制作自动化交易系统 – 订单系统
- 如何利用BigOne的API制作自动化交易系统–网格交易法
相关文章:

String、StringBuffer与StringBuilder之间区别 (转载)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什…

女生可以学习Web前端吗?
随着时代的不断发展,女性独立意识越来越高,在职场这方面,很多岗位都有了女性的存在,尤其是IT互联网行业,广阔的发展前景和优厚的福利待遇吸引了很多女性小伙伴想要学习Web前端开发,那么女生可以学习Web前端…

adobe就不敢把融合做得更好一点?
体验了一把flash bulider4 和 flash cs5的结合。 之前说得挺牛B的协同开发也不过如此。还以为会给开发者更多的便利。。。 其也就是让建立一个有外链类的mc的时候,能自动为你在bulider里面提示新建一个类而已。 在flash bulider(flex bulider)中依然不认识flash中的…

apache开启虚拟主机 并进行配置
sudo vi /etc/apache2/httpd.conf 进入 apache 配置文件 在配置文件中搜索 Virtual hosts 如图 把前面的#删掉 #为注释 sudo vi /etc/apache2/extra/httpd-vhosts.conf 打开虚拟主机配置文件对下面的一下代码进行复制并粘贴在下方并更改里面的一些内容 DocumentRoot …

技术图文:进一步完善自动化交易系统 - 02
背景 自己的自动化交易系统起初只有网格交易法一个版本:如何利用网格交易法对数字资产进行交易。后面,加入了ONE、USDT、EOS的三角套利版本:如何通过三角套利来交易数字资产。接着,发现三角套利的个别订单在未全部成交的情况下被…

女士做软件测试的利弊有哪些?
社会在不断的进步,在如今的智能时代,女性独立意识越来越高,很多女性都把重心放在职场上,IT行业出现了越来越多的女性职业者,尤其是软件测试这一块,那么女士做软件测试的利弊有哪些呢?来看看下面的详细介绍…

刻意练习:Python基础 -- Task01. 变量、运算符与数据类型
背景 我们准备利用17天时间,将 Python 基础的刻意练习分为如下任务: Task01:变量、运算符与数据类型(1day)Task02:条件与循环(1day)Task03:列表与元组(2day…

linux ramdisk与tmpfs的深入分析
一)ramdisk 1)概念 ramdisk就是指使用一部分内存空间来模拟硬盘分区,也就是说ramdisk是一个块设备,要用mkfs格式化,才能真正使用它. .ramdisk在内核2.0/2.2版本就已经支持. .ramdisk设备是它不允许重新声明它的内存空间,所以ramdisk块通常会一直占用空间的内存直到系统重启. .r…

Unique Paths II
注意一个容易犯的错误:判断obstacleGrid是否为1时,else那部分不能少。因为如果不加,就会默认把那些值设置为0。 class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int height ob…

零基础java培训如何规划学习路线
学习java的同学越来越多,很多小伙伴都想知道零基础如何学习java?如何安排学习路线,零基础java培训如何规划学习路线?那么针对以上问题,今天小编特意分享这篇Java学习指南,希望对那些想学Java,想零基础快速入门Java有…

CCIE-MPLS基础篇-实验手册
又一部前期JUSTECH(南京捷式泰)工程师职业发展系列丛书完整拷贝。 MPLS(Multi-Protocol Label Switching) 目录 1:MPLS 基础实验.... 3 1.1实验拓扑... 3 1.2实验需求:... 3 1.3实验步骤... 3 1.4校验…

[转载]Oracle 11g新特征之形式料理(2)
不可见的索引 您经常感应利诱,索引能否真的有利于用户的盘考?它也许有利于一个盘考,但会影响 10 个其他盘考。索引肯定会对 INSERT 语句形成负面影响,也会执行潜伏的删除和更新操纵,这取决于 WHERE 条件能否在索引中包…

技术图文:进一步完善自动化交易系统 - 03
背景 在 进一步完善自动化交易系统 - 02 这篇图文中,向大家详细介绍了,满足以下两个条件下: 拥有数字资产:BTC、EOS、USDT、ONEBigOne 提供交易对:ONE-USDT、ONE-EOS、ONE-BTC、EOS-BTC、EOS-USDT、BTC-USDT 我们可…

HTML5培训后好就业吗
HTML5技术在移动互联网行业的发展前景是非常可观的,以至于很多人都非常看好HTML5行业,想要学习HTML5技术的人越来越多,但大家都比较关心HTML5培训后好就业吗?就这个问题我们来看看下面的详细介绍吧。 HTML5培训后好就业吗?首先,…

股市复盘:本周交易数据分析
特别说明: 每周我会统计「股票市场」的数据为大家的投资提供辅助支持,每个人站的角度不同,面对同一份数据得到的观点亦或不同,我只提供数据,不提供观点,欢迎大家在图文下方留言,我们理性探讨。 …

Strategy Analytics:物联网安全令人担忧,成本节约效益也不确定
Strategy Analytics物联网战略研究报告《2016年物联网部署趋势及使用调查》发现,物联网安全问题令人担忧,同时,超过半数企业对物联网带来的成本节约效益也不太确定。56%的受访公司认为,大数据分析是推动物联网部署的首要驱动力。 …

SQLServer中设置XML索引
XML索引分为主XML索引和次XML索引;1.主XML索引:为了完整、一致的表示XML的值,格式:Create PRIMARY XML INDEX indexName ON tableName(columName);2.次XML索引:对于XPath和XQuery表达式,可以使用XML次索引&…

零基础能学好UI设计吗
UI设计在最近几年的发展前景是有目共睹的,越来越多的企业注重用户体验,而UI设计在这一方面是起着非常重要位置的,如今很多人都想要学习UI设计,那么零基础能学好UI设计吗?我们来看看下面的详细介绍。 零基础能学好UI设计吗?如果美…

技术图文:进一步完善自动化交易系统 - 04
背景 我们在 数字资产量化中的三角套利策略 这篇图文中详细的介绍了三角套利的原理以及代码实现。 在 进一步完善自动化交易系统 - 02 和 进一步完善自动化交易系统 - 03 中利用配置文件的方法,扩充至七个三角套利模型。 现在的问题是需要把应用程序和配置文件分别…

如何成为Android开发高手
(copy来的) 计划按这个步骤去学习很多Android开发者已经度过了初级、中级,如何成为一个Android高手呢? Android123就各个级别的程序员应该掌握哪些内容作为下面分类。 一、初级 1. 拥有娴熟的Java基础,理解设计模式,比如OOP语言的工厂模式要…

哪些物联网应用最适合采用雾计算?
有时在做出判断时真的是要靠自己,让别人为你指出方向是不可行的。 许多物联网系统所面临的情景与此相同。集中处理大量传感器数据会减慢决策,并增加带宽需求。而做出明智的决策最好靠近源头。 哪些决策应该靠近网络边缘,哪些应该靠近中心&…

学习web前端你必须要了解的主流框架!
如今的前端已经不再像以前一样就是简单的写写页面和调调样式而已,现在的前端越来越复杂,知识点越来越丰富。 要做WEB前端,就需要知道前端到底是什么,需要学习那些知识;前端至少要懂的三个部分:HTML,CSS&…

技术图文:如何实现汉诺塔问题?
背景 最近在辅导小孩们学习编程,在介绍函数递归时,最典型的就是汉诺塔问题了。 我在这里总结一下,以方便大家的学习。 汉诺塔问题源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上…

Unity----Scene加载问题
Unity官方提供了4种加载场景(scene)的方法,分别是: 1. Application.LoadLevel():同步加载 2. Application.LoadLevelAsync():异步加载 3. Application.LoadLevelAddictive():同步附加式加载 4. Application.LoadLevelA…

基于Google Reader的个人知识管理方案
来源月光博客:http://www.williamlong.info/archives/2172.html. 先前我写的《基于Dropbox的个人知识管理平台》讲述了使用Dropbox在个人知识管理的保存知识方面的技巧,而个人知识管理的另一个重要环节是获取知识,今天月光博客就介绍一下如何通过Google …

学习java一定会用到的应用软件
想要成为一名合格的java程序猿,基础知识一定是要非常牢固的,扎实的基本功不仅可以快速的吸收新的知识,也会避开一些基本的语法错误,为了帮助程序员们减少一点工作压力,小编在此汇总了一些各大网络平台上推荐的程序员必…

LeetCode实战:两数之和
题目英文 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: Given nums [2, 7, 1…

忘记mysql 密码的取回方法
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld(如果是windows,直接调出进程管理器,结束之) 以安全模式启动 MySQL :/usr/bin/safe_mysqld --skip-grant-tables & (windows 下 mysql安装所以盘/mysql/bin/safe_mysqld --skip-grant…

《社交网站界面设计(原书第2版)》——2.13 不要中断电子邮件
2.13 不要中断电子邮件 如果你将电子邮件作为广播媒介(例如,发送提醒或通知)却不让用户回复他们收到的消息,就比较差劲了。你也没理由不处理这些回复,你可以把这些回复当作通知转发给正确的收件人。这需要你在方便沟通…

学习Python遇到的热门问题整理
什么是Python?它可以做什么用?学习Python还是java?哪个比较好?Python适用于哪些场景?关于python,你是不是还有很多问题?那今天小编就来给大家答疑解惑了,给大家整理了学习Python遇到的热门问题,看完这篇文章,你会对Python有…