金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 185|回复: 1

转成金字塔的

[复制链接]

10

主题

63

帖子

63

积分

等级: 免费版

注册:
2024-4-19
曾用名:
发表于 2025-8-30 14:55 | 显示全部楼层 |阅读模式
[size=1em]
[size=1em][size=1em]#!/usr/bin/env python
[size=1em]# coding: utf-8

[size=1em]# In[7]:


[size=1em]import pandas as pd
[size=1em]import matplotlib.pyplot as plt
[size=1em]import datetime
[size=1em]date=datetime.datetime.now()


[size=1em]# In[4]:


[size=1em]#可调节参数

[size=1em]A = 8 #均线

[size=1em]M = 0.04 #阀门  

[size=1em]K = 0.001 #漂移函数 drift=time* K      

[size=1em]C = 0.06#大波保护

[size=1em]D = C*0.9 #大波保护提升

[size=1em]E = 250 #长线保护


[size=1em]# In[5]:


[size=1em]def ma_math(stock_data,A):
[size=1em]    return pd.Series.rolling(stock_data,window=A).mean()


[size=1em]# In[9]:


[size=1em]#参数
[size=1em]N = 500 #以过去N天为历史
[size=1em]stock = '002568.XSHE' #股票代码

[size=1em]stock_data = get_price(stock,count = N + A, end_date=date,fields = ['close'])['close']
[size=1em]ma = ma_math(stock_data,A)

[size=1em]plt.figure(figsize=[30,15])
[size=1em]plt.plot(stock_data,label='股价')
[size=1em]plt.plot(ma,label='10日均线')

[size=1em]#if len(stock_data) > 250:
[size=1em]#    ma250 = ma_math(stock_data,250)
[size=1em]#    plt.plot(ma250,label='250日均线')


[size=1em]#设置极值, 极值点Extreme Point(ep)
[size=1em]K_EPs = pd.DataFrame(columns=['date','trend','ep','lineno','groupno']) # 极值日期,极值方向(上为1,下为0),极值数值,在ma中的行号,多空组号(连续出现的多空方向一样的:同一组)
[size=1em]extreme_price = f_max = f_min = ma[A]
[size=1em]_groupno = 0
[size=1em]_last_trend = 2     # 为了不跟1,0相同,随便赋一个值
[size=1em]for i in range(A,len(ma)):
[size=1em]    if ma > ((extreme_price * M) + extreme_price):
[size=1em]        if _last_trend != 1:
[size=1em]            _last_trend = 1
[size=1em]            _groupno += 1       # 方向改变,组号+1
[size=1em]        extreme_price = f_max = ma
[size=1em]        K_EPs = K_EPs.append({'date':ma.index,'trend':1, 'ep':extreme_price,'lineno':i,'groupno': _groupno}, ignore_index=True)
[size=1em]    if ma < (extreme_price - (extreme_price * M)):
[size=1em]        if _last_trend != 0:
[size=1em]            _last_trend = 0
[size=1em]            _groupno += 1       # 方向改变,组号+1
[size=1em]        extreme_price = f_min = ma
[size=1em]        K_EPs = K_EPs.append({'date':ma.index,'trend':0, 'ep':extreme_price,'lineno':i,'groupno': _groupno}, ignore_index=True)
[size=1em]#
[size=1em]K_EPs.set_index('date',drop=True,inplace=True)

[size=1em]# print("目前值大为:",f_max)
[size=1em]# print("目前值小为:",f_min)

[size=1em]#画极值
[size=1em]fa_number=10 #画图极值的长度
[size=1em]for i in range(len(K_EPs)):
[size=1em]    _lineno = K_EPs['lineno']
[size=1em]    plt.plot(pd.Series(K_EPs['ep'] ,index = ma.index[_lineno:_lineno+fa_number]),              color='red' if K_EPs['trend'] == 1 else 'green')

[size=1em]#画drift波段保护线   
[size=1em]# 连续的同方向的极值点,是同一组,只保留最后一个(因为下降趋势是下降的,上升趋势是上升的,所以,下降时最后一个最小,或者上升时最后一个最大)
[size=1em]transit_points = K_EPs.drop_duplicates(subset=['groupno'], keep='last')     # 同一组只保留最后一条记录
[size=1em]transit_points.reset_index(drop=True,inplace=True) # 重新索引

[size=1em]# 画漂移价格:极值*(1+n*K)
[size=1em]for i in range(len(transit_points)):
[size=1em]    if i < (len(transit_points)-2):
[size=1em]        s_drift = pd.Series(0.000 ,index = ma.index[transit_points['lineno']: transit_points['lineno'][i+2]])    # 从当前日期画到下一次同方向(trend)出现的日期
[size=1em]    else:
[size=1em]        s_drift = pd.Series(0.000 ,index = ma.index[transit_points['lineno']: ])    # 最后两个漂移线因空间不足另作处理
[size=1em]    #
[size=1em]    f_ep = transit_points['ep']
[size=1em]    for j in range(len(s_drift)):
[size=1em]        s_drift[j] = f_ep*(1 + j*K)
[size=1em]    #
[size=1em]    plt.plot(s_drift, color='red' if transit_points['trend']==1 else 'green')
[size=1em]     
[size=1em]#drift大波保护线  两个参数一个是满足条件C,一个是提升项D,C尽可能的取大,D取相对C一半左右,C=40,D=20
[size=1em]# 要用到的数据 10日均线,只有处于下跌的极值数据方向为0,对应数据日期
[size=1em]#规则,每从最低点涨幅超过10%,上调5%
[size=1em]transit_0 = transit_points[transit_points.trend==0].reset_index(drop=True)
[size=1em]for i in range(len(transit_0)):
[size=1em]    if i < (len(transit_0)-1):
[size=1em]        s_protector = pd.Series(0.000, index=ma.index[transit_0['lineno']: transit_0['lineno'][i+1]])   # 一上一下,这一个波段经历的交易日
[size=1em]    else:
[size=1em]        s_protector = pd.Series(0.000, index=ma.index[transit_0['lineno']: ])   # 最后一个0突变点
[size=1em]    #
[size=1em]    midA = midB = transit_0['ep']
[size=1em]    for j in range(len(s_protector)):
[size=1em]        if s_protector.index[j] in K_EPs.index:  # 如果是极值点
[size=1em]            if K_EPs['ep'][s_protector.index[j]] > midB*(1+C):  # ep>保护条件
[size=1em]                midA = midB = midB*(1+D)
[size=1em]            else:
[size=1em]                midA = midA*(1+K)
[size=1em]        else:
[size=1em]            midA = midA*(1+K)
[size=1em]        #
[size=1em]        s_protector[j] = midA
[size=1em]    #
[size=1em]    plt.plot(s_protector, color='black')
[size=1em]#
[size=1em]plt.legend(loc='best')
[size=1em]plt.show()


[size=1em]# In[ ]:








回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-9-1 09:04 | 显示全部楼层
这个是什么语法,看着是python的,抱歉不提供这类策略转换服务
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-14 09:46 , Processed in 0.109458 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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