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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 关于python条件选股

   

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


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

主题:关于python条件选股

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


加好友 发短信
等级:新手上路 帖子:26 积分:0 威望:0 精华:0 注册:2021/2/23 3:05:08
关于python条件选股  发帖心情 Post By:2021/3/25 22:39:10 [只看该作者]

# 该Python代码用于提供给Pel公式调用。
# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
# 如果Python计算量大则不建议在图表的Pel公式中调用,应该放在后台执行。

# 需要注意: 
#         1、Python引用模式下,仅支持 pel_history_bars,log_debug_info,settimer,killtimer 
#            这4个金字塔API函数的调用,其他的API均不可以使用(Python及库函数不影响)。
#         2、可以在PEL中传递所需要的数据,参考下面的范例和PEL范例。

from PythonApi import *

# init函数会在PEL公式首次启用时被调用。
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    pass

# Pel公式中调用FIREPYHANDLEBAR函数将触发该方法的调用
def handle_bar(context):
    # 开始编写你的主要的算法逻辑
    def num_get_blocks(): #留下有效的上证股票代码
        begin_date = '20210201' #计算的时间周期
        end_date = '20210226'
        index_num = '上海A股'
        new_list = []
        for i in get_blocks(index_num,0):
            close_star = pel_history_bars(i,begin_date,begin_date,'1d','close')  #把股票代码传到这个变量中获取区间第一天的收盘价
            close_end = pel_history_bars(i,end_date,end_date,'1d','close')          ##把股票代码传到这个变量中获取区间最后一天的收盘价
            if close_star and close_end:
                new_list.append(i)
        return new_list
        
        
    begin_date = '20210201' #计算的时间周期
    end_date = '20210226'
    index_num = 'sh000001'  #上证指数
    index_close = pel_history_bars(index_num,begin_date,end_date,'1d','close') #得到上证指数的区间收盘价
    num1 = (index_close[-1] - index_close[0])/ index_close[0] * 100  #计算上证指数的区间涨跌幅
    index_num1 = round(float(num1),2)  #保留计算结果的两位小数
    
    context.num_blocks_list = []
    for i in num_get_blocks():   #遍历留下的有效股票代码        
        close_star = pel_history_bars(i,begin_date,begin_date,'1d','close') #计算开始的时间收盘价
        close_end = pel_history_bars(i,end_date,end_date,'1d','close') #计算结束时间收盘价
        ret1 = (close_end - close_star)/close_star * 100 #计算有效列表的区间涨跌幅
        ret = (round(float(ret1),2))  #个股涨跌幅保留两位小数点
        if ret > index_num1:
            num_blocks_list.append(i)
            context.num_blocks_list = num_blocks_list
        else:
            pass
    #调取收盘价数据,这里的CallMe是主图K线数据,方便不同品种使用,提高运行效率
    #close = pel_history_bars(context.long_period+1 ,'close')

    #调试打印输出

    # log_debug_info('d:\pel_test_log.txt',str(close))
    
    #计算2根均线,返回值放在context对象中。
    #context.ma5 = close[-context.short_period:].sum() / context.short_period
    #context.ma10 = close[-context.long_period:].sum() / context.long_period
    pass
    
# exit函数会在公式结束时被调用,整个过程只会被调用一次
def exit(context):
    pass
以上是我在python中的代码~




//引用Python代码模块 "PelMaDemo", 需要注意大小写敏感
Py_Import xdqd;
FIREPYHANDLEBAR;
MM:GETPYTHONVAL('num_blocks_list');     
这个是我在条件选股公式中写的代码~~~

我写的这个代码为什么在条件选股中没有选到股票呢?
求大神帮助,帮忙看看我错在哪里了,万分感谢!!!
以上代码主要的目的是想选出某段时间走的比大盘好的个股~


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


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

返回值不能是list这种类型的,只能是单值数值类型

pel本身不是专门计算机语言,大部分我们处理的都是单数字这种

[此贴子已经被作者于2021/3/26 9:09:08编辑过]

 回到顶部