请教自动化交易,如何实现一单成交其他单作废?

2018-01-10 01:16:59 +08:00
 jahan
想做一个自动化下单的工具,请教如何实现一单成交,其他单都作废?需要不断的 while ( 1 )?
有什么比较好的逻辑结构吗?谢谢。目前用的 easytrader。
4074 次点击
所在节点    Python
25 条回复
asdf123101
2018-01-10 01:43:55 +08:00
在 callback 里撤销其他单就好了吧
jahan
2018-01-10 02:22:42 +08:00
user.buy('603225', price=38.50, amount=int(user.balance['可用金额']/38.50))#新凤鸣
好像 easytrade 只能现价买入,price 貌似不起作用啊

callback ?我想知道这个循环怎么写才比较好呢? while ( 1 )一直轮训行情?然后下单?
还是有其他的好办法呢
ericls
2018-01-10 02:28:04 +08:00
jahan
2018-01-10 02:48:17 +08:00
@ericls 貌似现在还不用这么复杂。不太会用,衰。。。
while ( 1 ):
if:
elseif:

写上好多个,还真觉得很 low
SlipStupig
2018-01-10 08:16:06 +08:00
@jahan 如果 if...else 过多可以进行递归啊
nine
2018-01-10 08:41:33 +08:00
哪个交易所?直接看订单状态就好了
jahan
2018-01-10 08:55:18 +08:00
@nine a 股啊。while(1):
print(time.localtime())
if(quotation.real('603619')['603619']['now'] ==42):
print("中曼石油")
user.buy('603619', 42.00, int(user.balance['可用金额']/42)) #中曼石油
break
elif (quotation.real('603225')['603225']['now']==38.50):
user.buy('603225', 38.50, int(user.balance['可用金额']/38.50)) #新凤鸣
break
elif (quotation.real('603579')['603579']['now']==68.50):
user.buy('603579', 68.50, int(user.balance['可用金额']/68.50)) #荣泰健康
break
elif (quotation.real('603039')['603039']['now']==67.60):
user.buy('603039', 67.60, int(user.balance['可用金额']/67.60)) #泛微网络
break
elif (quotation.real('603260')['603260']['now']==59.60):
user.buy('603260', 59.60, int(user.balance['可用金额']/59.60)) #合盛硅业
break
elif (quotation.real('600585')['600585']['now']==32.50):
user.buy('600585', 32.50, int(user.balance['可用金额']/32.50)) #海螺水泥
break
elif (quotation.real('601100')['601100']['now']==31.50):
user.buy('601100', 31.50, int(user.balance['可用金额']/31.50)) #恒立液压
break
elif (quotation.real('600031')['600031']['now']==9.15):
user.buy('600031', 9.15, int(user.balance['可用金额']/9.15)) #三一重工
break
elif (quotation.real('600802')['600802']['now']==8.20):
user.buy('600802', 8.20, int(user.balance['可用金额']/8.20)) #福建水泥
break
elif (quotation.real('603607')['603607']['now']==41.70):
user.buy('603607', 41.70, int(user.balance['可用金额']/41.7)) #京华激光
break
elif (quotation.real('603882')['603882']['now']==33):
user.buy('603882', 33.00, int(user.balance['可用金额']/33)) #金域医学
break
elif (quotation.real('600203')['600203']['now']==9.4):
user.buy('600203', 9.40, int(user.balance['可用金额']/9.4)) #福日电子
break
这样看起来非常 low,而且不好维护。
imn1
2018-01-10 09:22:01 +08:00
你这个问题重心应该是购买状态,如何实时检查购买状态

至于其中一个条件成立,用 any()就好了
shidenggui
2018-01-10 10:32:12 +08:00
我是 easytrader 的作者,没想到能看到有人在 v 站发 easytrader 的相关问题。
easytrader 目前是支持限价单的,暂不支持市价,准备最近实现下。
你可以批量挂单,然后通过检测可撤单列表。如果有股票成交的话,就会从可撤单列表中消失,然后你用撤单函数把其他单都撤销掉就可以了。
顺便在这里求个工作,Python / Golang 后端岗位, 熟悉后端相关技术栈,联系邮件 longlyshidenggui#谷歌邮箱.com 。github https://github.com/shidenggui
Aalen
2018-01-10 10:38:00 +08:00
世界好小 原来 easytrader 的作者 除了逛 jisilu 也逛 v2 的啊
nullen
2018-01-10 10:42:32 +08:00
@shidenggui Base 哪里?
jahan
2018-01-10 10:44:34 +08:00
@shidenggui 如此之近。

不过貌似华泰证券的就不能正确下单,会提示下单的金额不对,比如。4.99 会变成 4.999999 之类。貌似也不能做到限价下单。不知道应该怎么做。

另外我想如果 easyquotation 能获取 a 股,应该也能获取美股吧。新浪好像是相通的接口
flowfire
2018-01-10 10:46:01 +08:00
额。。。。不能锁表么
jahan
2018-01-10 10:48:47 +08:00
use。buy 的话,按照道理是限定价格,但是实盘貌似是市价下单,但是单价上会变成超出两位小数,必须人工干预。就不能自动了。

主要是出现在单价会变成超出两位的🌲,不知道这个怎么处理。
Aalen
2018-01-10 11:11:19 +08:00
@jahan 你这个我遇到过 华泰的客户端 要把自动填写价格去掉(客户端设置) 不然会在自动填写价格的后面填上你的委托价格。。。。比如华泰自动搞了个卖一的价格 1.99 然后你委托了 1.88 结果就是出来一个 1.99188 就报错了。。不知道你能看明白不
forestyuan
2018-01-10 11:11:29 +08:00
网络有延时,这个功能如果在客户端实现,不能保证 100%正确,在极端行情下,有可能导致重大损失。
jahan
2018-01-10 11:14:45 +08:00
@Aalen 原来是自动化填单的动作慢了,这样理解对吗?
Aalen
2018-01-10 11:14:49 +08:00
@jahan aalen.nku gmail 一起交流下?
jahan
2018-01-10 11:15:03 +08:00
@forestyuan 目前自动下单还有什么好办法呢
Aalen
2018-01-10 11:16:33 +08:00
@jahan 恩 具体里面怎么搞成替换还是 append 我也不清楚 没研究过 pywin 大佬写好了我就现成了。。把自动填写委托价格取消选择了就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/421541

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX