首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
华为云
V2EX  ›  Python

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

  •  
  •   jahan · 217 天前 · 1989 次点击
    这是一个创建于 217 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想做一个自动化下单的工具,请教如何实现一单成交,其他单都作废?需要不断的 while ( 1 )?
    有什么比较好的逻辑结构吗?谢谢。目前用的 easytrader。
    25 回复  |  直到 2018-01-10 21:45:45 +08:00
        1
    asdf123101   217 天前 via Android
    在 callback 里撤销其他单就好了吧
        2
    jahan   217 天前
    user.buy('603225', price=38.50, amount=int(user.balance['可用金额']/38.50))#新凤鸣
    好像 easytrade 只能现价买入,price 貌似不起作用啊

    callback ?我想知道这个循环怎么写才比较好呢? while ( 1 )一直轮训行情?然后下单?
    还是有其他的好办法呢
        3
    ericls   217 天前
        4
    jahan   217 天前
    @ericls 貌似现在还不用这么复杂。不太会用,衰。。。
    while ( 1 ):
    if:
    elseif:

    写上好多个,还真觉得很 low
        5
    SlipStupig   217 天前
    @jahan 如果 if...else 过多可以进行递归啊
        6
    nine   217 天前
    哪个交易所?直接看订单状态就好了
        7
    jahan   217 天前
    @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,而且不好维护。
        8
    imn1   217 天前
    你这个问题重心应该是购买状态,如何实时检查购买状态

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

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

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

    主要是出现在单价会变成超出两位的🌲,不知道这个怎么处理。
        15
    Aalen   217 天前
    @jahan 你这个我遇到过 华泰的客户端 要把自动填写价格去掉(客户端设置) 不然会在自动填写价格的后面填上你的委托价格。。。。比如华泰自动搞了个卖一的价格 1.99 然后你委托了 1.88 结果就是出来一个 1.99188 就报错了。。不知道你能看明白不
        16
    forestyuan   217 天前
    网络有延时,这个功能如果在客户端实现,不能保证 100%正确,在极端行情下,有可能导致重大损失。
        17
    jahan   217 天前
    @Aalen 原来是自动化填单的动作慢了,这样理解对吗?
        18
    Aalen   217 天前
    @jahan aalen.nku gmail 一起交流下?
        19
    jahan   217 天前
    @forestyuan 目前自动下单还有什么好办法呢
        20
    Aalen   217 天前
    @jahan 恩 具体里面怎么搞成替换还是 append 我也不清楚 没研究过 pywin 大佬写好了我就现成了。。把自动填写委托价格取消选择了就行了。
        21
    Aalen   217 天前
    @forestyuan 同问现在有什么其他好办法么?除了那种要不少钱的。。。。。小钱瞎玩 不值当
        22
    shidenggui   217 天前
    @nullen 看工作,合适的话哪里都可以。不过目前人在上海,优先上海。
    @jahan 文档里面有说到, 客户端设置 系统设置 > 交易设置: 默认买入价格 /买入数量 /卖出价格 /卖出数量 都设置为 空,不然你填单会受到干扰
        23
    jahan   217 天前
    @shidenggui 感谢大神。我把这条看成银河客户端的了。
        24
    forestyuan   217 天前
    @jahan
    @Aalen 客户端自动下单不难,但是客户端自动撤单不是 100%可靠的,因为有网络延时存在,当客户端发出撤单指令的一瞬间,也许已经在交易所的主机上成交了。
    客户端自动下单,我知道的方法有三种:1. 根据通信协议编程实现; 2. 在 windows 系统上,写个程序通过 windows 消息模拟键盘鼠标操作来控制交易软件; 3. 直接使用交易所提供的下单接口
        25
    4ever911   216 天前
    没看懂这个题目, 这个逻辑不是很清楚吗,题目已经把逻辑描述清楚了呀。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   2061 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 18ms · UTC 13:21 · PVG 21:21 · LAX 06:21 · JFK 09:21
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1