首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从零开始计算python中的macd

从零开始计算python中的macd
EN

Stack Overflow用户
提问于 2021-07-01 11:58:20
回答 1查看 469关注 0票数 0

我试着用anaconda和spyder软件从一开始就计算macd值。剧本在下面。但是我的值没有给出直方图的正确值。有人知道为什么吗?我用这个公式来表示移动平均值:

剧本:

-编码: utf-8 -

已创建于11月4日14:47:40 2020

@作者: tor-pc

代码语言:javascript
复制
import numpy as np
import datetime
import time
from binance.client import Client
api_key = 'censored'
secret_key = 'censored'
client = Client(api_key, secret_key) 

symbol= 'ETHUSDT'
quantity= '42'
x=0
t=0
y=0
buyprice=0
BTC=[]
BTC= client.get_historical_klines(symbol=symbol, interval='1d', start_str="1 sep, 2020")
ma1=0
sma1=0
weightlast=(2/26+1)
weightrest=1-weightlast
sweightlast=(2/12+1)
sweightrest=1-sweightlast
sigweightlast=(2/9+1)
sigweightrest=1-sweightlast
for i in range(61, 36, -1):
    
    ma1=ma1+float(BTC[-i][4])
    x=x+1
    
print(x)

    
ma1=(ma1/25)*weightrest+float(BTC[-35][4])*weightlast

ma2=(ma1*weightrest+float(BTC[-34][4])*weightlast)

ma3=(ma2*weightrest+float(BTC[-33][4])*weightlast)

ma4=(ma3*weightrest+float(BTC[-32][4])*weightlast)

ma5=(ma4*weightrest+float(BTC[-31][4])*weightlast)

ma6=(ma5*weightrest+float(BTC[-30][4])*weightlast)

ma7=(ma6*weightrest+float(BTC[-29][4])*weightlast)

ma8=(ma7*weightrest+float(BTC[-28][4])*weightlast)

ma9=(ma8*weightrest+float(BTC[-27][4])*weightlast)

ma10=(ma9*weightrest+float(BTC[-26][4])*weightlast)

ma11=(ma10*weightrest+float(BTC[-25][4])*weightlast)

ma12=(ma11*weightrest+float(BTC[-24][4])*weightlast)

ma13=(ma12*weightrest+float(BTC[-23][4])*weightlast)

ma14=(ma13*weightrest+float(BTC[-22][4])*weightlast)

ma15=(ma14*weightrest+float(BTC[-21][4])*weightlast)

ma16=(ma15*weightrest+float(BTC[-20][4])*weightlast)

ma17=(ma16*weightrest+float(BTC[-19][4])*weightlast)

ma18=(ma17*weightrest+float(BTC[-18][4])*weightlast)

ma19=(ma18*weightrest+float(BTC[-17][4])*weightlast)

ma20=(ma19*weightrest+float(BTC[-16][4])*weightlast)

ma21=(ma20*weightrest+float(BTC[-15][4])*weightlast)

ma22=(ma21*weightrest+float(BTC[-14][4])*weightlast)

ma23=(ma22*weightrest+float(BTC[-13][4])*weightlast)

ma24=(ma23*weightrest+float(BTC[-12][4])*weightlast)

ma25=(ma24*weightrest+float(BTC[-11][4])*weightlast)

ma26=(ma25*weightrest+float(BTC[-10][4])*weightlast)

ma27=(ma26*weightrest+float(BTC[-9][4])*weightlast)

ma28=(ma27*weightrest+float(BTC[-8][4])*weightlast)

ma29=(ma28*weightrest+float(BTC[-7][4])*weightlast)

ma30=(ma29*weightrest+float(BTC[-6][4])*weightlast)

ma31=(ma30*weightrest+float(BTC[-5][4])*weightlast)

ma32=(ma31*weightrest+float(BTC[-4][4])*weightlast)

ma33=(ma32*weightrest+float(BTC[-3][4])*weightlast)

ma34=(ma33*weightrest+float(BTC[-2][4])*weightlast)

ma35=(ma34*weightrest+float(BTC[-1][4])*weightlast)

for i in range(61, 50, -1):
    
    sma1=sma1+float(BTC[-i][4])
    y=y+1
print(y)   

sma1=(sma1/11)*sweightrest+float(BTC[-49][4])*sweightlast 

sma2=sma1*sweightrest+float(BTC[-48][4])*sweightlast 

sma3=sma2*sweightrest+float(BTC[-47][4])*sweightlast

sma4=sma3*sweightrest+float(BTC[-46][4])*sweightlast

sma5=sma4*sweightrest+float(BTC[-45][4])*sweightlast

sma6=sma5*sweightrest+float(BTC[-44][4])*sweightlast

sma7=sma6*sweightrest+float(BTC[-43][4])*sweightlast

sma8=sma7*sweightrest+float(BTC[-42][4])*sweightlast

sma9=sma8*sweightrest+float(BTC[-41][4])*sweightlast

sma10=sma9*sweightrest+float(BTC[-40][4])*sweightlast

sma11=sma10*sweightrest+float(BTC[-39][4])*sweightlast

sma12=sma11*sweightrest+float(BTC[-38][4])*sweightlast

sma13=sma12*sweightrest+float(BTC[-37][4])*sweightlast

sma14=sma13*sweightrest+float(BTC[-36][4])*sweightlast

sma15=sma14*sweightrest+float(BTC[-35][4])*sweightlast

sma16=sma15*sweightrest+float(BTC[-34][4])*sweightlast

sma17=sma16*sweightrest+float(BTC[-33][4])*sweightlast

sma18=sma17*sweightrest+float(BTC[-32][4])*sweightlast

sma19=sma18*sweightrest+float(BTC[-31][4])*sweightlast

sma20=sma19*sweightrest+float(BTC[-30][4])*sweightlast

sma21=sma20*sweightrest+float(BTC[-29][4])*sweightlast

sma22=sma21*sweightrest+float(BTC[-28][4])*sweightlast

sma23=sma22*sweightrest+float(BTC[-27][4])*sweightlast

sma24=sma23*sweightrest+float(BTC[-26][4])*sweightlast

sma25=sma24*sweightrest+float(BTC[-25][4])*sweightlast

sma26=sma25*sweightrest+float(BTC[-24][4])*sweightlast

sma27=sma26*sweightrest+float(BTC[-23][4])*sweightlast

sma28=sma27*sweightrest+float(BTC[-22][4])*sweightlast

sma29=sma28*sweightrest+float(BTC[-21][4])*sweightlast

sma30=sma29*sweightrest+float(BTC[-20][4])*sweightlast

sma31=sma30*sweightrest+float(BTC[-19][4])*sweightlast

sma32=sma31*sweightrest+float(BTC[-18][4])*sweightlast

sma33=sma32*sweightrest+float(BTC[-17][4])*sweightlast

sma34=sma33*sweightrest+float(BTC[-16][4])*sweightlast

sma35=sma34*sweightrest+float(BTC[-15][4])*sweightlast

sma36=sma35*sweightrest+float(BTC[-14][4])*sweightlast

sma37=sma36*sweightrest+float(BTC[-13][4])*sweightlast

sma38=sma37*sweightrest+float(BTC[-12][4])*sweightlast

sma39=sma38*sweightrest+float(BTC[-11][4])*sweightlast

sma40=sma39*sweightrest+float(BTC[-10][4])*sweightlast

sma41=sma40*sweightrest+float(BTC[-9][4])*sweightlast

sma42=sma41*sweightrest+float(BTC[-8][4])*sweightlast

sma43=sma42*sweightrest+float(BTC[-7][4])*sweightlast

sma44=sma43*sweightrest+float(BTC[-6][4])*sweightlast

sma45=sma44*sweightrest+float(BTC[-5][4])*sweightlast

sma46=sma45*sweightrest+float(BTC[-4][4])*sweightlast

sma47=sma46*sweightrest+float(BTC[-3][4])*sweightlast

sma48=sma47*sweightrest+float(BTC[-2][4])*sweightlast

sma49=sma48*sweightrest+float(BTC[-1][4])*sweightlast


macd=sma49-ma35

sig91=(sma32 -ma18+sma33-ma19+sma34-ma20+sma35-ma21+sma36-ma22+sma37-ma23+sma38-ma24+sma39-ma25+sma40-ma26)/9

signal1=sig91*sigweightrest+(sma41-ma27)*sigweightlast

signal2=signal1*sigweightrest+(sma42-ma28)*sigweightlast

signal3=signal2*sigweightrest+(sma43-ma29)*sigweightlast

signal4=signal3*sigweightrest+(sma44-ma30)*sigweightlast

signal5=signal4*sigweightrest+(sma45-ma31)*sigweightlast

signal6=signal5*sigweightrest+(sma46-ma32)*sigweightlast

signal7=signal6*sigweightrest+(sma47-ma33)*sigweightlast

signal8=signal7*sigweightrest+(sma48-ma34)*sigweightlast

signal9=signal8*sigweightrest+(sma49-ma35)*sigweightlast


hist=macd-signal9

print(hist)
print(float(BTC[-1][4]))
EN

回答 1

Stack Overflow用户

发布于 2021-07-01 23:07:48

看看同行化学家/终结者MACD计算中的实现

代码语言:javascript
复制
def MACD(
    cls,
    ohlc: DataFrame,
    period_fast: int = 12,
    period_slow: int = 26,
    signal: int = 9,
    column: str = "close",
    adjust: bool = True,
) -> DataFrame:
    """
    MACD, MACD Signal and MACD difference.
    The MACD Line oscillates above and below the zero line, which is also known as the centerline.
    These crossovers signal that the 12-day EMA has crossed the 26-day EMA. The direction, of course, depends on the direction of the moving average cross.
    Positive MACD indicates that the 12-day EMA is above the 26-day EMA. Positive values increase as the shorter EMA diverges further from the longer EMA.
    This means upside momentum is increasing. Negative MACD values indicates that the 12-day EMA is below the 26-day EMA.
    Negative values increase as the shorter EMA diverges further below the longer EMA. This means downside momentum is increasing.
    Signal line crossovers are the most common MACD signals. The signal line is a 9-day EMA of the MACD Line.
    As a moving average of the indicator, it trails the MACD and makes it easier to spot MACD turns.
    A bullish crossover occurs when the MACD turns up and crosses above the signal line.
    A bearish crossover occurs when the MACD turns down and crosses below the signal line.
    """

    EMA_fast = pd.Series(
        ohlc[column].ewm(ignore_na=False, span=period_fast, adjust=adjust).mean(),
        name="EMA_fast",
    )
    EMA_slow = pd.Series(
        ohlc[column].ewm(ignore_na=False, span=period_slow, adjust=adjust).mean(),
        name="EMA_slow",
    )
    MACD = pd.Series(EMA_fast - EMA_slow, name="MACD")
    MACD_signal = pd.Series(
        MACD.ewm(ignore_na=False, span=signal, adjust=adjust).mean(), name="SIGNAL"
    )

    return pd.concat([MACD, MACD_signal], axis=1)

他使用来自exponential weighted (EW)熊猫函数。也许这对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68209761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档