フェイテトロ推定値に基づく取引戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-22 14:12:27
タグ:

概要

この戦略は,Faytterro Estimatorによって生成される取引信号に基づいて取引する.Faytterro Estimatorは,価格の収束率と離散率を計算することによってトレンドを判断する指標である.この戦略は,Faytterro Estimatorの取引信号といくつかの追加の条件を組み合わせて,理想的なポイントで異なるサイズのロングとショート信号を生成する.

戦略の論理

この戦略の核心はファイトレロ推定値である.その計算は,まず価格の収束率と離散率 (CR) を計算し,次に二次関数を構築し,異なる係数を設定することによってCR曲線の形を反映することができる.二次曲線の曲線点を観察することで,価格動向の変化を判断する.

具体的には,戦略はまず価格のCRを計算する.その後,長さ2*lenの配列 diziを構築し,二次関数値で順に満たす.二次関数の係数はCRの値を反映する.その後,インデックス len+1+5と len+1+4の2つの値を観察することで,二次関数に折り点があるかどうかを決定する.折り点がある場合は,購入または販売信号を生成する.

この根拠に基づいて,戦略は,価格突破間の最小距離を設定し,頻繁な取引を回避し,異なるサイズのシグナルを生成するなど,いくつかの追加の条件を設定します.これらの条件は,いくつかの望ましくない取引ポイントをフィルタリングするために使用されます.

利点分析

この戦略には以下の利点があります.

  1. 価格変動に敏感で 傾向の変化を早期に把握できるファイトレロ推定器を使って 傾向を判断します

  2. CR曲線の形を反映する二次関数を構築し,直接かつ効果的に折り点を見つけます

  3. 異なるサイズのシグナルを生成することで ピラミッド取引が理想的なポイントで可能になり 利益の可能性が増加します

  4. 最低距離設定を増加させることで 信号を効果的にフィルタリングし,非効率な頻繁な取引を回避できます

  5. 多くの調整可能なパラメータは,異なる取引製品に最適化され,適応性が向上します.

  6. 戦略の論理は明確で分かりやすいし コードも読みやすいので 学習が簡単です

リスク分析

この戦略には注意すべきリスクもあります.

  1. Faytterro Estimatorは曲線フィッティングの危険性があり,一部の取引製品では劣悪なパフォーマンスを発揮する可能性があります.

  2. 二次曲線の折り点のみを 判断することは 粗末すぎて 判断に誤りが生じるかもしれません

  3. 頻繁にピラミッド取引をすることで コミションのコストが上がります

  4. 調整可能なパラメータが多くなり,最適化の難易度は高まる.

  5. 価格変動の期間に誤った判断を効果的に処理することはできません.

  6. ストップ・ロスのメカニズムがない場合,損失が大きくなる可能性があります.

対応する解は次のとおりです.

  1. 耐久性を向上させるために,異なる製品のパラメータを最適化します.

  2. フィルタリングのための他の指標を追加し,曲線点のみを基に誤った判断を避ける.

  3. 適切なストップ損失を設定して 単一の損失を制御する

  4. パーマータを自動最適化するためにビッグデータメソッドを使用します

  5. 振動期間の取引を避けるために振動の識別を追加する.

  6. 合理的なストップ・ロスを設定する

オプティマイゼーションの方向性

オプティマイゼーションの方向性には,以下が含まれます.

  1. 単一の損失を制御するためにストップ損失ロジックを追加します. 例えば,トラッキングストップ損失やタイムストップ損失.

  2. 他の指標を追加して,Faytterro Estimatorだけに依存する判断を避ける.例えば,MACD,KDJなどと組み合わせる.

  3. 確認メカニズムを追加して 短期的な撤退によって停止されないようにします. 再入国の確認を検討してください.

  4. 遺伝子アルゴリズム,ベイジアン最適化などを使用して,異なる製品のための調整可能なパラメータを最適化します

  5. ATR,DMI などを用いて振動する市場を特定し,振動中に取引を避ける.

  6. トレンドを追いかけるのを防ぐためにピラミッドロジックを最適化します.例えば,トレンド強度に基づいてピラミッド位置を動的に調整します.

  7. 最適な時間枠を見つけるため,異なる時間枠でパラメータをテストします.

結論

この戦略は,Faytterro Estimatorの取引信号に基づいて決定を行い,その上に論理判断と異なるサイズのエントリー信号を追加してピラミッドの特徴を持つトレンドフォロー戦略を形成する.この戦略は直感的で理解しやすいもので,強力なトレンドキャッチ機能を持っています.しかし,指標の誤判,ストップ損失なし,パラメータ最適化の困難などの問題もあります.将来の最適化には,過濾メカニズム,ストップ損失論理,パラメータ最適化などを追加して強度と適応性を向上させます.全体的に,この戦略は,トレンド変化を判断するために指標を使用する方法を提供します.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-08-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © faytterro

//@version=5
// strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100)

src=input(hlc3,title="source")
len=input.int(10,title="faytterro estimator lenght", maxval=500)
len2=100
len3=input.float(500,title="minumum enrty-close gap (different direction)")
len4=input.float(500,title="minumum entry-entry gap (same direction)")
cr(x, y) =>
    z = 0.0
    weight = 0.0
    for i = 0 to y-1
        z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2))
    z/(((y+1)/2)*(y+1)/2)
cr= cr(src,2*len-1) 
width=input.int(10, title="strong entry size", minval=1)

dizi = array.new_float(500)
// var line=array.new_line()
//if barstate.islast
for i=0 to len*2
    array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2]))

buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] 
sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len]
bb=buy? hlc3 : na
ss=sell? hlc3 : na 
sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3
ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3

buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3
sell:=  sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3
alertcondition(buy or sell)


if (sbuy)
    strategy.entry("strong buy", strategy.long,width)
if (ssell)
    strategy.entry("strong sell", strategy.short,width)
if (buy)
    strategy.entry("buy", strategy.long)
if (sell)
    strategy.entry("sell", strategy.short)

もっと