skka3134

skka3134

email
telegram

暗号通貨と量子:3. 戦略設定

1. 新しい戦略、対応する戦略のファイルパス、user_data/strategies/test.py

freqtrade new-strategy --strategy test

2. 追加パラメータ、低レベルテンプレート

freqtrade new-strategy --strategy test --template minimal

3. 高レベルテンプレート

freqtrade new-strategy --strategy test --template advanced

注意事項、未来のデータを使用しないこと、例えばその日の価格の最低点。
注意事項、ベクトル化操作をできるだけ使用すること。
INTERFACE_VERSION、これはロボットが使用するインターフェースのバージョンで、デフォルトは 3 です。

    INTERFACE_VERSION = 3

ショートを有効にする

    can_short: bool = False

最小投資利益率、このコマンドは、退出する前に達成すべき最小利益率を指します。つまり、利益が 4%に達したときに退出し、30 分後に 2%に達したときに退出し、60 分後に 1%に達したときに退出します。roi を有効にしたくない場合は、空に設定できます。

    minimal_roi = {
        "60": 0.01,
        "30": 0.02,
        "0": 0.04
    }

同様に、ROI を時間範囲に基づいて設定することもできます。

from freqtrade.exchange import timeframe_to_minutes

class AwesomeStrategy(IStrategy):

    timeframe = "1d"
    timeframe_mins = timeframe_to_minutes(timeframe)
    minimal_roi = {
        "0": 0.05,                      # 最初の3本のキャンドルのための5%
        str(timeframe_mins * 3): 0.02,  # 3本のキャンドル後の2%
        str(timeframe_mins * 6): 0.01,  # 6本のキャンドル後の1%
    }

損切りを 10%に設定

stoploss = -0.10

時間範囲

timeframe = '5m'

戦略の開始期間、戦略の開始期間は、この期間内に指標の計算に誤差が生じることを指しますが、具体的な開始時間はどれくらいかを解決するために、戦略に startup_candle_count という属性を割り当てます。この値は、指標を計算するために必要な最大周期です。例えば:

startup_candle_count = 100
dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)

追加情報ペア、これらの情報ペアは戦略に役立つ可能性がありますが、取引には使用されません。

    def informative_pairs(self):
        """
        取引所からキャッシュされる追加の情報ペア/インターバルの組み合わせを定義します。
        これらのペア/インターバルの組み合わせは、ホワイトリストの一部でない限り、取引可能ではありません。
        詳細については、ドキュメントを参照してください。
        :return: (pair, interval)形式のタプルのリスト
            サンプル: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

情報ペアデコレーター、すべてのメソッドは独立して実行され、最後に populate_indicators に渡されます。

def informative(timeframe: str, asset: str = '',
                fmt: Optional[Union[str, Callable[[KwArg(str)], str]]] = None,
                *,
                candle_type: Optional[CandleType] = None,
                ffill: bool = True) -> Callable[[PopulateIndicators], PopulateIndicators]:
    """
    populate_indicators_Nn(self, dataframe, metadata)のためのデコレーターで、これらの関数が
    情報指標を定義できるようにします。

    使用例:

        @informative('1h')
        def populate_indicators_1h(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
            dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
            return dataframe

    :param timeframe: 情報の時間枠。戦略の時間枠と常に等しいかそれ以上でなければなりません。
    :param asset: 情報の資産、例えばBTC、BTC/USDT、ETH/BTC。現在のペアを使用するには指定しないでください。
    :param fmt: 列のフォーマット(str)または列のフォーマッタ(callable(name, asset, timeframe))。指定しない場合は、デフォルトで:
    * {base}_{quote}_{column}_{timeframe}が資産が指定されている場合。
    * {column}_{timeframe}が資産が指定されていない場合。
    フォーマット文字列はこれらのフォーマット変数をサポートします:
    * {asset} - 資産のフルネーム、例えば'BTC/USDT'。
    * {base} - 小文字の基軸通貨、例えば'eth'。
    * {BASE} - {base}と同じですが、大文字です。
    * {quote} - 小文字の見積もり通貨、例えば'usdt'。
    * {QUOTE} - {quote}と同じですが、大文字です。
    * {column} - データフレーム列の名前。
    * {timeframe} - 情報データフレームの時間枠。
    :param ffill: 情報ペアをマージした後のデータフレームをffillします。
    :param candle_type: '', mark, index, premiumIndex, または funding_rate
    """

カスタム指標 populate_indicators ()、買いまたは売り信号で使用する必要がある指標

def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    """
    指定されたDataFrameにいくつかの異なるTA指標を追加します。

    パフォーマンスノート:最高のパフォーマンスを得るためには、使用している指標の数を抑えてください。
    戦略やハイパーオプト設定で使用している指標だけをコメント解除し、それ以外はメモリとCPUの使用を無駄にします。
    :param dataframe: 取引所からのデータを含むデータフレーム
    :param metadata: 現在取引されているペアのような追加情報
    :return: 戦略に必要なすべての指標を含むデータフレーム
    """
    dataframe['sar'] = ta.SAR(dataframe)
    dataframe['adx'] = ta.ADX(dataframe)
    stoch = ta.STOCHF(dataframe)
    dataframe['fastd'] = stoch['fastd']
    dataframe['fastk'] = stoch['fastk']
    dataframe['blower'] = ta.BBANDS(dataframe, nbdevup=2, nbdevdn=2)['lowerband']
    dataframe['sma'] = ta.SMA(dataframe, timeperiod=40)
    dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)
    dataframe['mfi'] = ta.MFI(dataframe)
    dataframe['rsi'] = ta.RSI(dataframe)
    dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5)
    dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10)
    dataframe['ema50'] = ta.EMA(dataframe, timeperiod=50)
    dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)
    dataframe['ao'] = awesome_oscillator(dataframe)
    macd = ta.MACD(dataframe)
    dataframe['macd'] = macd['macd']
    dataframe['macdsignal'] = macd['macdsignal']
    dataframe['macdhist'] = macd['macdhist']
    hilbert = ta.HT_SINE(dataframe)
    dataframe['htsine'] = hilbert['sine']
    dataframe['htleadsine'] = hilbert['leadsine']
    dataframe['plus_dm'] = ta.PLUS_DM(dataframe)
    dataframe['plus_di'] = ta.PLUS_DI(dataframe)
    dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
    dataframe['minus_di'] = ta.MINUS_DI(dataframe)
    return dataframe

エントリー信号

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        TA指標に基づいて、指定されたデータフレームのエントリー信号を設定します。
        :param dataframe: DataFrame
        :param metadata: 現在取引されているペアのような追加情報
        :return: エントリー列が設定されたDataFrame
        """
        dataframe.loc[
            (
                # 信号: RSIが30を上回る
                (qtpylib.crossed_above(dataframe['rsi'], self.buy_rsi.value)) &
                (dataframe['tema'] <= dataframe['bb_middleband']) &  # ガード: temaがBBの中央値以下
                (dataframe['tema'] > dataframe['tema'].shift(1)) &  # ガード: temaが上昇中
                (dataframe['volume'] > 0)  # ボリュームが0でないことを確認
            ),
            'enter_long'] = 1

        dataframe.loc[
            (
                # 信号: RSIが70を上回る
                (qtpylib.crossed_above(dataframe['rsi'], self.short_rsi.value)) &
                (dataframe['tema'] > dataframe['bb_middleband']) &  # ガード: temaがBBの中央値を上回る
                (dataframe['tema'] < dataframe['tema'].shift(1)) &  # ガード: temaが下降中
                (dataframe['volume'] > 0)  # ボリュームが0でないことを確認
            ),
            'enter_short'] = 1

        return dataframe

退出信号

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        TA指標に基づいて、指定されたデータフレームの退出信号を設定します。
        :param dataframe: DataFrame
        :param metadata: 現在取引されているペアのような追加情報
        :return: 退出列が設定されたDataFrame
        """
        dataframe.loc[
            (
                # 信号: RSIが70を上回る
                (qtpylib.crossed_above(dataframe['rsi'], self.sell_rsi.value)) &
                (dataframe['tema'] > dataframe['bb_middleband']) &  # ガード: temaがBBの中央値を上回る
                (dataframe['tema'] < dataframe['tema'].shift(1)) &  # ガード: temaが下降中
                (dataframe['volume'] > 0)  # ボリュームが0でないことを確認
            ),

            'exit_long'] = 1

        dataframe.loc[
            (
                # 信号: RSIが30を上回る
                (qtpylib.crossed_above(dataframe['rsi'], self.exit_short_rsi.value)) &
                # ガード: temaがBBの中央値以下
                (dataframe['tema'] <= dataframe['bb_middleband']) &
                (dataframe['tema'] > dataframe['tema'].shift(1)) &  # ガード: temaが上昇中
                (dataframe['volume'] > 0)  # ボリュームが0でないことを確認
            ),
            'exit_short'] = 1

        return dataframe

Metadata dict メタデータ辞書、
未完待続

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。