金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: ,272619

python 读取账户

[复制链接]

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-10-31 11:07 | 显示全部楼层
你每次下单错误这里 Account=255  你本身账户应该是218255  
你代码怎么写的,指定账户的写法吗?贴下具体语句。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

9

主题

26

帖子

26

积分

Rank: 1

等级: 新手上路

注册:
2022-7-7
曾用名:
 楼主| 发表于 2023-10-31 11:16 | 显示全部楼层
def init(context):
    context.account_stock = "218255" # 账户
    # 在context中保存全局变量
    context.s1 = 1
    context.z1 = 0
    context.z2 = 0
    x4 = str(int(get_account(1,)))  # 账户
    context.account_stock = x4 # 账户
    context.position_size = 0  # 当前持仓的仓位
    # print("策略启动") #调试打印输出
    write_logging ('策略1初始化工作已经完成!')

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


补充内容 (2023-10-31 11:17):
只有这段有账户,有什么错误吗?
回复

使用道具 举报

34

主题

9212

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-10-31 11:18 | 显示全部楼层
下单语句,对照手册的参数顺序排查。或者直接贴出来。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

9

主题

26

帖子

26

积分

Rank: 1

等级: 新手上路

注册:
2022-7-7
曾用名:
 楼主| 发表于 2023-10-31 11:19 | 显示全部楼层
    x4 = str(int(get_account(1,)))  # 账户
    context.account_stock = x4 # 账户   这段是不是重复了?初始化后又读不到账户了?
回复

使用道具 举报

9

主题

26

帖子

26

积分

Rank: 1

等级: 新手上路

注册:
2022-7-7
曾用名:
 楼主| 发表于 2023-10-31 11:55 | 显示全部楼层
# 本Python代码主要用于策略交易
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
from PythonApi import *

#  参数定义区,这里定义的参数可以直接在context对象中获取。--(选择实现)
#def parameter():
#    input_par("myvalues1",5,1,20,1)
#    input_par("myvalues2",10,1,20,1)


#  在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。--(必须实现)
def init(context):
    context.account_stock = "218255" # 账户
    # 在context中保存全局变量
    context.s1 = 1
    context.z1 = 0
    context.z2 = 0
    x4 = str(int(get_account(1,)))  # 账户
    context.account_stock = x4 # 账户
    context.position_size = 0  # 当前持仓的仓位
    # print("策略启动") #调试打印输出
    write_logging ('策略1初始化工作已经完成!')

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


# 你选择的品种的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新。--(必须实现)
def handle_bar(context):
    for s in context.universe:
        count0 = get_indicator(s, 'S01_04', 'GK1', '0', 'self',3500,True,False,True)   
        count1 = get_indicator(s, 'S01_04', 'GK2', '0', 'self',3500,True,False,True)
        count2 = get_indicator(s, 'S01_04', 'HOLDIN1', '0', '15m',3500,True,False,True)
        
            
        portfolio = get_portfolio(s,0,context.account_stock)
        context.s3 = get_dynainf(s, 208)*10#交易单位
        context.s4 = get_dynainf(s, 207)##时间
        context.s5 = round(get_dynainf(s, 211),2)##时间
        context.s6 = get_dynainf(s, 213)##时间
        context.s7 = get_dynainf(s, 214)##时间
        context.s8 = round (portfolio.buy_margin)
        context.s9 = get_dynainf(s, 212)
                                
        close1 = history_bars(s, 1, 'self', 'close',True)

        bar_clos1=get_dynainf(s,3)
        bar_clos2=get_dynainf(s,209)
        bar_clos3=int(bar_clos1*bar_clos2*(0.15))
        bar_clos4=(round(50000/bar_clos3))
        if bar_clos4>0:
            context.s2 = bar_clos4
        else:
            context.s2 = 1         
    #######################################################################################################################   
        lst=count2.tolist()
        index = 16
        if index < len(lst):
            value = lst[index]
            # 更新当前持仓的仓位
            context.position_size = context.s2        
            countp0 = lst[-1]>0 and lst[-2]>0 and  lst[-3] == 0 and portfolio.buy_quantity<context.s2
            
            countp1 = lst[-1]>0 and lst[-2] == 0   #开多
            countp2 = lst[-1]==0 and lst[-2] > 0   #平多
            
            
            countp3 = lst[-1]<0 and lst[-2] == 0     #开空
            countp4 = lst[-1]==0  and lst[-2] < 0   #平空   

            
            if istradertime(s) == 1:
                if countp1 == 1  :
                    buy_open (s,"fok",close1+context.s3,     volume=context.s2,account=context.account_stock)                     
                                    
                if countp3 == 1  :
                    sell_open (s,"fok",close1-context.s3,     volume=context.s2 ,account=context.account_stock)
                                
                if countp2 == 1  :
                    sell_close(s,"fok",close1-context.s3,     volume=context.position_size ,account=context.account_stock,serial_id = 1)               
                if countp4 == 1 :
                    buy_close(s,"fok",close1+context.s3,     volume=context.position_size,account=context.account_stock,serial_id = 2)
   
        if lst[-1]!=0:
            print("商品持仓    "+s+" "+str(count2[-1:])+"商品仓位    "+str(context.s2)+"    开仓价位    "+str(context.s5)+"    成交时间    "+str(context.s6)+"    成交日期    "+str(context.s7)+"    保证金    "+str(context.s8*context.s2))   
        else:
            print("商品持仓    "+s+" "+str(count2[-1:])+"商品仓位    "+str(context.s2))
   
   


# after_trading函数会在每天交易结束后被调用,当天只会被调用一次。 --(选择实现)
def after_trading(context):
    pass
   
   
   



补充内容 (2023-10-31 11:56):
全部下单代码
回复

使用道具 举报

34

主题

9212

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-10-31 13:19 | 显示全部楼层
你自己代码逻辑存在问题、
init只在启动时运行一次。你在此方法中做这个动作并赋值时,
    x4 = str(int(get_account(1,)))  # 账户
    context.account_stock = x4 # 账户

1.基本没有意义,体现不出之后的账户状态。
2.判断账户状态的目的是预警提示,而不是将其返回值重新塞给账户变量。

你现在的现象,应该是启动python时,账户没有正常登录。其结果是无效值255,你有把255当成账户替换掉了正常的账号,所以之后始终都是255作为账户。
判断账户是否有效直接使用et_account(53,context.account_stock);
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-10-31 13:27 | 显示全部楼层
不要做这种“x4 = str(int(get_account(1,)))  # 账户” 转换,本身那个函数get_account 返回值就是str类型。你这里如果原本账户是0开头,你这里还会出错,只是刚好不是0开头。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

9

主题

26

帖子

26

积分

Rank: 1

等级: 新手上路

注册:
2022-7-7
曾用名:
 楼主| 发表于 2023-10-31 13:46 | 显示全部楼层
删掉那两段代码
      x4 = str(int(get_account(1,)))  # 账户
    context.account_stock = x4 # 账户
感觉容易出问题时候就是,夜盘账户退出后,程序没关机,第二天8.40账户自动登录后容易出问题,
   
   

回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-10-31 13:48 | 显示全部楼层
你在下单地方 做好账户状态的判断处理。不要在初始化地方做一些账户状态的判断,那样是不合理的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

9

主题

26

帖子

26

积分

Rank: 1

等级: 新手上路

注册:
2022-7-7
曾用名:
 楼主| 发表于 2023-10-31 13:57 | 显示全部楼层
def handle_bar(context):
        context.account_stock = "218255" # 账户
把账户放在这?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 14:49 , Processed in 0.198696 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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