金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1560|回复: 4

请老师修改代码!

[复制链接]

26

主题

93

帖子

93

积分

等级: 免费版

注册:
2022-11-17
曾用名:
发表于 2024-4-13 20:57 | 显示全部楼层 |阅读模式
当价格不在20日SMA附近,并且价格不在Bollinger Bands中间区域波动,同时RSI指标不在30到70之间”定义为一个变量“zhendang”  。我想再将“zhendang” 加入到我的开仓条件里。
于是让AI帮我写了以下代码,但是放到金字塔里编译的时候提示较多错误,比如:标识符长度不能大于20字符,函数rolling未定义,语句末尾缺少分号这些提示。
想请老师帮我修改一下,或者重新帮我写以下代码谢谢!!

//当价格不在20日SMA附近,并且价格不在Bollinger Bands中间区域波动,同时RSI指标不在30到70之间”,并将以上组合条件定义为一个变量“zhendang”  。


# 计算20日SMA
def calculate_SMA(data, window=20):
    data['SMA'] = data['Close'].rolling(window=window).mean()

# 判断价格不在20日SMA附近
def PriceNearSMA(data):
    calculate_SMA(data)
    if data['Close'] < data['SMA'] * 0.95 or data['Close'] > data['SMA'] * 1.05:
        return True
    else:
        return False

# 判断价格不在Bollinger Bands中间区域波动
def PriceInBBMiddle(data):
    # 计算Bollinger Bands
    data['20_day_MA'] = data['Close'].rolling(window=20).mean()
    data['std'] = data['Close'].rolling(window=20).std()
    data['upper_band'] = data['20_day_MA'] + 2 * data['std']
    data['lower_band'] = data['20_day_MA'] - 2 * data['std']

    if data['Close'] < data['lower_band'] or data['Close'] > data['upper_band']:
        return True
    else:
        return False

# 判断RSI指标不在30到70之间
def RSIInRange(data):
    data['RSI'] = talib.RSI(data['Close'], timeperiod=14)

    if data['RSI'] < 30 or data['RSI'] > 70:
        return True
    else:
        return False

# 定义“非震荡”条件变量
zhendang = PriceNearSMA(data) and PriceInBBMiddle(data) and RSIInRange(data)




补充内容 (2024-4-13 21:13):
RSI指标的30和70设置成可调整的参数,怎么修改?
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-4-14 13:06 | 显示全部楼层
下面的代码是python语言写的,在PEL环境下使用,自然会报错。

上面的需求不够明确,所谓的中间区域波动,如果定义?
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

26

主题

93

帖子

93

积分

等级: 免费版

注册:
2022-11-17
曾用名:
 楼主| 发表于 2024-4-14 21:58 | 显示全部楼层
布林带由三条线组成:中轨(即20日移动平均线)、上轨(上轨等于中轨加上两倍标准差)、下轨(下轨等于中轨减去两倍标准差)。
首先计算20日移动平均线(20 d&#8203;ay M A)和标准差(std),然后根据布林带的定义计算了上轨(upper_band)和下轨(lower_band)。接着判断价格是否在布林带中间区域波动,即判断价格是否在上轨和下轨之间。如果价格小于下轨或大于上轨,表示价格不在布林带中间区域波动;
回复

使用道具 举报

37

主题

1万

帖子

6万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-4-15 09:09 | 显示全部楼层
MID:  MA(CLOSE,26);//布林中轨
UPPER: MID +2*STD(CLOSE,26);//布林上轨
LOWER: MID - 2*STD(CLOSE,26);//布林下轨


LC:=REF(CLOSE,1);
RSI:SMA(MAX(CLOSE-LC,0),6,1)/SMA(ABS(CLOSE-LC),6,1)*100;

zhendang:(RSI<30 or RSI>70) and (close>LOWER and CLOSE<UPPER)
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

26

主题

93

帖子

93

积分

等级: 免费版

注册:
2022-11-17
曾用名:
 楼主| 发表于 2024-4-15 09:17 | 显示全部楼层
老师,价格不在20日SMA附近怎么写?下面这段不能用
def calculate_SMA(data, window=20):
&#160; &#160; data['SMA'] = data['Close'].rolling(window=window).mean()

# 判断价格不在20日SMA附近
def PriceNearSMA(data):
&#160; &#160; calculate_SMA(data)
&#160; &#160; if data['Close'] < data['SMA'] * 0.95 or data['Close'] > data['SMA'] * 1.05:
&#160; &#160;&#160; &#160;&#160;&#160;return True
&#160; &#160; else:
&#160; &#160;&#160; &#160;&#160;&#160;return False

补充内容 (2024-4-15 12:15):
就是一楼上面:# 计算20日SMA,和# 判断价格不在20日SMA附近。这两段代码,复制出现乱码了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-29 11:37 , Processed in 0.073952 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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