金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2882|回复: 8

python引用 代码问题

[复制链接]

3

主题

13

帖子

13

积分

Rank: 1

等级: 新手上路

注册:
2022-7-18
曾用名:
发表于 2022-7-22 12:40 | 显示全部楼层 |阅读模式
想问问在python引用里写了用于pel引用的macd的指标,但运行出来的upper,middle,lower都是0,这是为什么呢?
(想从这个简单的例子学会将python开多平多表示在图表上)
谢谢
代码如下
import numpy as np
import talib as ta
def init(context):
    pass
def handle_bar(context):
    close = pel_history_bars(20,'close')
    context.upper, context.middle, context.lower = ta.BBANDS(close, context.timeperiod, context.nbdevup, context.nbdevdn, matype=0)
def exit(context) :
    pass     
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-7-22 12:46 | 显示全部楼层
返回close看下有没有值,macd你给20个数据有可能计算不出结果
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

13

帖子

13

积分

Rank: 1

等级: 新手上路

注册:
2022-7-18
曾用名:
 楼主| 发表于 2022-7-22 13:20 | 显示全部楼层
技术008 发表于 2022-7-22 12:46
返回close看下有没有值,macd你给20个数据有可能计算不出结果

对欸 close没有值 那应该怎么改,让这个可以有这么多的数据呢

补充内容 (2022-7-22 13:30):
改成close = pel_history_bars(1,'close') ,close也一样没数据欸 这是为什么哦
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-7-22 13:49 | 显示全部楼层
打开k线图确保本地有数据
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

3

主题

13

帖子

13

积分

Rank: 1

等级: 新手上路

注册:
2022-7-18
曾用名:
 楼主| 发表于 2022-7-22 14:08 | 显示全部楼层
技术008 发表于 2022-7-22 13:49
打开k线图确保本地有数据

本地有数据的,但就是close怎么都为0
这个是pel的代码,
Py_Import hehi;

SETPYTHONVAL('timeperiod',0,M);
SETPYTHONVAL('nbdevdn',0,U);
SETPYTHONVAL('nbdevup',0,N);

FIREPYHANDLEBAR;

upper:GETPYTHONVAL('upper');
middle:GETPYTHONVAL('middle');
lower:GETPYTHONVAL('lower');

开多条件:=CROSS(CLOSE,upper);
平多条件:=CROSS(middle,CLOSE);
开空条件:=CROSS(lower,CLOSE);
平空条件:=CROSS(CLOSE,middle);

开多:BUY(开多条件,1,MARKETR);
平多:SELL(平多条件,0,MARKETR);
开空:BUYSHORT(开空条件,1,MARKETR);
平空:SELLSHORT(平空条件,0,MARKETR);
这个是python引用代码:
import numpy as np
import talib as ta

def init(context):
    pass

def handle_bar(context):
    close = pel_history_bars(200,'close')
    if len(close) == 200:
        context.upper, context.middle, context.lower = ta.BBANDS(close, context.timeperiod, context.nbdevup, context.nbdevdn, matype=0)

def exit(context) :
    pass     
回复

使用道具 举报

30

主题

7075

帖子

7085

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-7-22 14:09 | 显示全部楼层
用这个函数打印出k数量看看
另外建议不要使用引用python模式,你根本不需要这种方法的,个人认为大部分情况下这个使用没有意义
如果不理解电话我
021-20339087
截图202207221409146855.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
发表于 2022-7-23 11:01 | 显示全部楼层
if len(close) == 200:
        context.upper, context.middle, context.lower = ta.BBANDS(close, context.timeperiod, context.nbdevup, context.nbdevdn, matype=0)

1、这里的长度需要等于200才计算,应该修改为大于等于timeperiod,或者不指定
2、ta.BBANDS返回的数据是numpy的数组,不能直接赋值给context.upper等变量,需要取最后一个数据



下面是我测试通过了的代码:
def handle_bar(context):
    close = pel_history_bars(200,'close')
    #log_debug_info('d:/boll.txt',str(close[-1]))
        
    upper, middle, lower = ta.BBANDS(close, context.timeperiod, context.nbdevup, context.nbdevdn, matype=0)

    context.upper=upper[-1] if len(upper)>=5 else 0
    context.middle=middle[-1] if len(middle)>=5 else 0
    context.lower=lower[-1] if len(lower)>=5 else 0
    #log_debug_info('d:/boll2.txt',str(upper[-1]))

有疑问,多互动,我的微信:guotx-
回复

使用道具 举报

3

主题

13

帖子

13

积分

Rank: 1

等级: 新手上路

注册:
2022-7-18
曾用名:
 楼主| 发表于 2022-7-25 09:38 | 显示全部楼层
艳阳天:VBA 发表于 2022-7-23 11:01
if len(close) == 200:
        context.upper, context.middle, context.lower = ta.BBANDS(close, conte ...

太谢谢了
原来是ta.BBANDS返回的数据是数组格式,之前一直不知道
回复

使用道具 举报

3

主题

13

帖子

13

积分

Rank: 1

等级: 新手上路

注册:
2022-7-18
曾用名:
 楼主| 发表于 2022-7-25 09:38 | 显示全部楼层
技术008 发表于 2022-7-22 14:09
用这个函数打印出k数量看看
另外建议不要使用引用python模式,你根本不需要这种方法的,个人认为大部分情 ...

谢谢诶
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 13:35 , Processed in 0.307307 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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