微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

适用于 Python 交易机器人的赫尔移动平均线 HMA 指标代码修复

如何解决适用于 Python 交易机器人的赫尔移动平均线 HMA 指标代码修复

我需要更正赫尔移动平均线代码才能进行买卖交易。

在交易世界中,有一些指标可以帮助推测股票或货币的价格变动。 Here 是一篇 Medium 文章,其中详细解释了应用于交易图表时的移动平均线。在赫尔移动平均线部分的文章中,作者描述了 HMA 是如何计算的,以及他如何添加额外的代码行来更改移动平均线的颜色,例如,当趋势向上时,线的颜色变为绿色,当趋势线下降时,颜色变为红色。

我想利用这一点并在趋势改变颜色时自动进行交易。我附上了一张图片,展示了它应用于交易视图图表时的样子。

HMA 的计算代码已经完成并且可以工作,我想添加到现有代码中的是使线条变色的线条,但我不断收到错误

这是交易视图图表的图片,它显示了我正在尝试完成的任务:

BTC/USD Chart

这是指标文件中的代码

import sys
import math
import warnings
from datetime import datetime,timedelta
import numpy as np
import pandas as pd
from pandas.core.base import PandasObject
from pandas import DataFrame,Series

s = pd.Series('close')
def WMA(s,period):
       return s.rolling(period).apply(lambda x: ((np.arange(period)+1)*x).sum()/(np.arange(period)+1).sum(),raw=True)

def HMA(s,period):
       return WMA(WMA(s,period//2).multiply(2).sub(WMA(s,period)),int(np.sqrt(period)))

这是我根据 Medium 文章的描述尝试添加代码

def two_color_hma(dataframe: DataFrame,period: int) -> DataFrame:
    dataframe[:,'Up'] = dataframe[:,HMA(s,period)]
    dataframe[:,'Down'] = dataframe[:,HMA(DataFrame,period)]
    for i in range(len(dataframe)):
        if dataframe[i,period)] > dataframe[i - 1,period)]:
            dataframe[i,'Up'] = dataframe[i,period)]
            dataframe[i,'Down'] = dataframe[i,period)] / 0
        if dataframe[i,period) ] < dataframe[i - 1,period)] / 0
    return dataframe

以下是我尝试在我的策略文件中放置买卖订单的方法

def populate_indicators(self,dataframe: DataFrame,Metadata: dict) -> DataFrame:
    qtpylib.two_color_hma(dataframe,=100)
    return dataframe

def populate_buy_trend(self,Metadata: dict) -> DataFrame:
    dataframe.loc[
        (
            qtpylib.crossed_above(dataframe['Down'],dataframe['Up'])
        ),'buy'] = 1
    return dataframe
    
def populate_sell_trend(self,Metadata: dict) -> DataFrame:
    dataframe.loc[
        (
            qtpylib.crossed_below(dataframe['Down'],dataframe['Up'])
         ),'sell'] = 1
    return dataframe

但是当我尝试回测我的策略时收到以下错误消息

2021-08-04 17:49:25,757 - freqTrade - ERROR - Fatal exception!
Traceback (most recent call last):
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 283,in _prep_values values = ensure_float64(values)
File "pandas/_libs/algos_common_helper.pxi",line 41,in pandas._libs.algos.ensure_float64 ValueError: Could not convert string to float: 'close'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 369,in _apply_series values = self._prep_values(input)
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 285,in _prep_values raise TypeError(f"cannot handle this type -> {values.dtype}") from err
TypeError: cannot handle this type -> object

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/sergIoUz/freqTrade/freqTrade/main.py",line 37,in main return_code = args['func'](args)
File "/home/sergIoUz/freqTrade/freqTrade/commands/optimize_commands.py",line 54,in start_backtesting  backtesting.start()
File "/home/sergIoUz/freqTrade/freqTrade/optimize/backtesting.py",line 534,in start min_date,max_date = self.backtest_one_strategy(strat,data,timerange)
File "/home/sergIoUz/freqTrade/freqTrade/optimize/backtesting.py",line 492,in backtest_one_strategy preprocessed = self.strategy.ohlcvdata_to_dataframe(data)
File "/home/sergIoUz/freqTrade/freqTrade/strategy/interface.py",line 712,in ohlcvdata_to_dataframe return {pair: self.advise_indicators(pair_data.copy(),{'pair': pair})
File "/home/sergIoUz/freqTrade/freqTrade/strategy/interface.py",in <dictcomp> return {pair: self.advise_indicators(pair_data.copy(),line 729,in advise_indicators return self.populate_indicators(dataframe,Metadata)
File "/home/sergIoUz/freqTrade/user_data/strategies/hull.py",line 84,in populate_indicators qtpylib.two_color_hma(dataframe,period=100)
File "/home/sergIoUz/freqTrade/freqTrade/vendor/qtpylib/indicators.py",line 376,in two_color_hma dataframe[:,period)]
File "/home/sergIoUz/freqTrade/freqTrade/vendor/qtpylib/indicators.py",line 373,in HMA return WMA(WMA(s,int(np.sqrt(period)))
File "/home/sergIoUz/freqTrade/freqTrade/vendor/qtpylib/indicators.py",line 370,in WMA return s.rolling(period).apply(lambda x: ((np.arange(period)+1)*x).sum()/(np.arange(period)+1).sum(),raw=True)
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 2030,in apply return super().apply(
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 1319,in apply return self._apply(
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 469,in _apply return self._apply_blockwise(homogeneous_func,name)
File "/home/sergIoUz/freqTrade/.env/lib/python3.8/site-packages/pandas/core/window/rolling.py",line 384,in _apply_blockwise return self._apply_series(homogeneous_func,line 371,in _apply_series raise DataError("No numeric types to aggregate") from err pandas.core.base.DataError: No numeric types to aggregate

我做错了什么,我该如何纠正?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。