欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → get_dynainf(10)开盘时数据不稳定

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有6789人关注过本帖树形打印复制链接

主题:get_dynainf(10)开盘时数据不稳定

帅哥哟,离线,有人找我吗?
vonhayek
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:0 威望:0 精华:0 注册:2016/3/29 10:17:12
  发帖心情 Post By:2020/7/24 10:27:38 [只看该作者]

这个无响应提示, 会导致什么?
应不应该立刻关掉这个对话框?

 回到顶部
帅哥哟,离线,有人找我吗?
vonhayek
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:0 威望:0 精华:0 注册:2016/3/29 10:17:12
  发帖心情 Post By:2020/7/24 10:28:58 [只看该作者]

应该怎么处理这个无响应提示? 感觉Python程序还在运行

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/24 10:30:04 [只看该作者]

如果没有响应很有可能就是太卡了卡住了,这个只能你自己试试看怎么调试下,减少数量

同样数量计算简单公式等等


 回到顶部
帅哥哟,离线,有人找我吗?
vonhayek
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:0 威望:0 精华:0 注册:2016/3/29 10:17:12
  发帖心情 Post By:2020/7/24 10:54:41 [只看该作者]

import numpy as np
import pandas as pd

from time import time, ctime, sleep
from PythonApi import get_blocks, get_dynainf

def init(context):
    # 在context中保存全局变量
    context.s1 = "SZ000001"   #平安银行股票

    STK_CODES = []
    for block in ['深圳创业', '深圳A股', '上海A股']:
        STK_CODES += get_blocks(block, 0)

    N_STKS = 300
    N_INDS = 4
    DYNA = np.zeros([60 * N_INDS, N_STKS], np.float32)
    rows = []

    for mint in range(60):
        while time() % 60 > 1:
            sleep(0.1)

        loc = mint * N_INDS
        rows += [f'{ind}_m{mint}' for ind in ['time', 'close',
            'vol', 'amt']]
        print([mint, ctime()])

        for th, stk in enumerate(STK_CODES[:N_STKS]):

            DYNA[loc:loc + N_INDS, th] = [get_dynainf(stk, 207),
               get_dynainf(stk, 7),
               get_dynainf(stk, 8),
               get_dynainf(stk, 10)]
        sleep(2)

    DYNA = pd.DataFrame(DYNA[:len(rows)], index=rows,
        columns=STK_CODES[:N_STKS]).sort_index()
    DYNA.to_csv('D:\\dyna.csv', float_format='%.2f')

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


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


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



# 我的所有程序好像都会无响应.  如果一直没进入handle_bar, 是不是会无响应? 

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/24 11:00:28 [只看该作者]

不要去sleep,你这样等于强制让程序停止,但是程序正常更新k又必须要去执行handle_bar

 

策略的执行不是由你去掌控的,是油软件根据行情驱动去更新,你如果在策略里去做这种延时可以考虑把动作放到一个线程里,不要堵塞主程序执行


 回到顶部
帅哥哟,离线,有人找我吗?
vonhayek
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:0 威望:0 精华:0 注册:2016/3/29 10:17:12
  发帖心情 Post By:2020/7/24 13:45:05 [只看该作者]

问题签名:
  问题事件名称: APPCRASH
  应用程序名: PythonJztServer.exe
  应用程序版本: 1.0.0.1
  应用程序时间戳: 5c12223b
  故障模块名称: python36.dll
  故障模块版本: 3.6.4150.1013
  故障模块时间戳: 5a38ac16
  异常代码: c0000005
  异常偏移: 0005af8a
  OS 版本: 6.1.7601.2.1.0.256.1
  区域设置 ID: 2052
  其他信息 1: 0a9e
  其他信息 2: 0a9e372d3b4ad19135b953a78882e789
  其他信息 3: 0a9e
  其他信息 4: 0a9e372d3b4ad19135b953a78882e789

用sleep是无响应, 好像不太影响运行. 改成多线程, 好像会挂掉. 
金字塔是不是已经做了多线程, 我就不能做了?
或者32位, 64位不兼容?

import numpy as np
import pandas as pd

from time import time, ctime, sleep
from PythonApi import get_blocks, get_dynainf
from concurrent.futures import ThreadPoolExecutor

def get_dyna():

    STK_CODES = []
    for block in ['深圳创业', '深圳A股', '上海A股']:
        STK_CODES += get_blocks(block, 0)

    N_STKS = 300
    N_INDS = 4
    DYNA = np.zeros([60 * N_INDS, N_STKS], np.float32)
    rows = []

    sec_ = lambda: round(time() % 60, 3)

    for mint in range(20):
        while sec_() > 1:
            sleep(0.1)

        loc = mint * N_INDS
        s_mint = '{:02d}'.format(mint)
        rows += [f'{ind}_m{s_mint}' for ind in [
            'time', 'close', 'vol', 'amt']]
        print([mint, ctime()[11:-5], sec_()])

        for th, stk in enumerate(STK_CODES[:N_STKS]):

            DYNA[loc:loc + N_INDS, th] = [get_dynainf(stk, 207),
               get_dynainf(stk, 7),
               get_dynainf(stk, 8),
               get_dynainf(stk, 10)]
        print(sec_())

        sleep(2)

    DYNA = pd.DataFrame(DYNA[:len(rows)], index=rows,
        columns=STK_CODES[:N_STKS]).sort_index()
    DYNA.to_csv('D:\\dyna.csv', float_format='%.2f')
    return DYNA

def init(context):
    # 在context中保存全局变量
    context.s1 = "SZ000001"   #平安银行股票

    executor = ThreadPoolExecutor(max_workers=1)
    task1 = executor.submit(get_dyna)
    print('init over')

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


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


 回到顶部
帅哥哟,离线,有人找我吗?
vonhayek
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:0 威望:0 精华:0 注册:2016/3/29 10:17:12
  发帖心情 Post By:2020/7/24 14:00:19 [只看该作者]

help(get_dynainf) 报错

get_dynainf是不是做了多线程? 
因为我ping了, 30毫秒. 循环调用300*4次.

但实际运行并没有很长时间, 到底是怎么加速的?


 回到顶部
帅哥哟,离线,有人找我吗?
vonhayek
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:70 积分:0 威望:0 精华:0 注册:2016/3/29 10:17:12
  发帖心情 Post By:2020/7/24 14:06:19 [只看该作者]

还有第三个问题, 在多线程里print显示不出来, 没有到金字塔的消息窗口

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/24 14:13:15 [只看该作者]

t= threading.Thread(target=dely_time,args=(time.time(),idd,son.iloc[i]))#创建线程
                        t.setDaemon(True)#设置为后台线程,这里默认是False,设置为True之后则主线程不用等待子线程
                        t.start()#开启线程

 

 

这个是我之前用的threading

我不是很建议你去做延时,如非必要请不要使用


 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/24 14:14:57 [只看该作者]

看我前面程序,你如果就一层循环里去输出都是没有问题的

 

你多层嵌套循环这种效率上的问题我只能建议你自己试试看减少计算量看看了,还有你还去循环延时,这种很容易和主程序堵塞的

 

如非必要不要去做这种操作


 回到顶部
总数 32 上一页 1 2 3 4 下一页