以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  关于python条件选股  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=184894)

--  作者:tan901002
--  发布时间:2021/3/25 22:39:10
--  关于python条件选股
# 该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
--  发布时间:2021/3/26 9:07:52
--  

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

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

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