金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1410|回复: 4

before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次

[复制链接]

3976

主题

4045

帖子

4070

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2023-4-6 10:15 | 显示全部楼层 |阅读模式
请教:

# 测试时间:2023-3-1至2023-3-20,标的:SH510300,版本6.3
# bug1: 测试资金为20万时,会出现买入失败的情况
# bug2:当日卖出股票后,无法执行买入操作,日志如下:
"""
15:14:39 > --------------2023-03-01 00:00:00--------------
15:14:39 > 买入SH510300 (200000.0)元
15:14:39 >     失败:buy_order_id=-1
15:14:39 > --------------2023-03-02 00:00:00--------------
15:14:39 > 买入SH510300 (200000.0)元
15:14:39 >     失败:buy_order_id=-1
15:14:39 > --------------2023-03-03 00:00:00--------------
15:14:39 > 买入SH510300 (200000.0)元
15:14:39 >     成功。可用余额=398.390625
15:14:39 > --------------2023-03-06 00:00:00--------------
15:14:39 > 卖出SH510300 (48400)手
15:14:39 >     成功。
15:14:39 > 买入SH510300 (199800.39252471927)元
15:14:39 >     失败:buy_order_id=-1
15:14:39 > --------------2023-03-07 00:00:00--------------
15:14:39 > 买入SH510300 (198391.99630737305)元
15:14:39 >     成功。可用余额=334.0119323730469
15:14:39 > --------------2023-03-08 00:00:00--------------
15:14:39 > 卖出SH510300 (49000)手
15:14:39 >     成功。
15:14:39 > 买入SH510300 (198193.94497680664)元
15:14:39 >     失败:buy_order_id=-1
"""
#
from PythonApi import *


def my_sell(stk):
    p = get_portfolio(stk, 0)  # 投资组合信息, buy_today_quantity为可卖数量;buy_quantity为多头总持
    if p.buy_quantity:
        print(f"卖出{stk} ({p.buy_quantity})手")
        sell_order_id = sell_close(stk, "Market", volume=p.buy_quantity,serial_id = 1)
        if sell_order_id == -1:
            print(f"    失败:sell_order_id={sell_order_id}")
        else:
            print(f"    成功。")


def my_buy(stk, account):
    print(f"买入{stk} ({account})元")
    buy_order_id = buy_open(stk, "Market", amount = account,serial_id = 2)
    if buy_order_id == -1:
        print(f"    失败:buy_order_id={buy_order_id}")
    else:
        print(f"    成功。可用余额={ get_account(19)}")

stock = 'SH510300'


#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    # 在context中保存全局变量
    pass


# before_trading此函数会在每天基准合约的策略交易开始前被调用,当天只会被调用一次。--(选择实现)
def before_trading(context):
    pass


# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
    print(f"--------------{context.now}--------------")

    my_sell(stock)
    account = min(get_account(6), get_account(19))  # 6: 动态权益;19:可用余额
    my_buy(stock, get_account(6))


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-4-6 14:49 | 显示全部楼层
手续费的问题,你总的资金20w,你买不了这么多金额的,还有手续费的呀。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3976

主题

4045

帖子

4070

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
 楼主| 发表于 2023-4-6 17:24 | 显示全部楼层
最后一行:my_buy(stock, get_account(6))修改为my_buy(stock, get_account(6)*0.8),仍然会有买入错误的提示,请测试一下。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-4-7 10:23 | 显示全部楼层
我测试下来是 在一个handle_bar 内,平仓后是无法立即再开仓的,必须到下一个handle_bar。

好像是资金无法在一个handle_bar内释放。这个问题我还需要进一步确认下。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-8 09:33 | 显示全部楼层
这个问题已经确认了目前是这样的处理方式,就是可用资金必须下一个hander执行时候才能有效释放。已经向产品和研发提出改进意见了~
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-11-16 19:43 , Processed in 0.217955 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表