Fayttero Estimatorに基づく取引戦略


作成日: 2023-09-22 14:12:27 最終変更日: 2023-09-22 14:12:27
コピー: 1 クリック数: 1452
1
フォロー
1617
フォロワー

概要

この戦略は,Faytterro Estimatorの取引信号に基づいて取引を行う戦略である.Faytterro Estimatorは,価格の収束散離率を計算してトレンドを判断する指標である.この戦略は,Faytterro Estimatorの取引信号といくつかの追加条件を組み合わせて,理想的なポイントで異なるサイズの買取と販売の信号を発信する.

戦略原則

この戦略の核心はFaytterro Estimatorである.その計算方法は,まず価格の収束分散率CRを計算し,次に,異なる係数を設定してCRの曲線特性を反映できる二次関数を構築することである.二次関数曲線の曲がり点を観察し,価格傾向の変化を判断することである.

具体的には,戦略は,まず価格の収束散離率CRを計算し,2の長さで構築する.*lenの数列dizi,次々に二次関数値を記入する。その二次関数の係数はCRの値を反映する。その後,len+1+5とlen+1+4の2つの値を観察することによって,二次関数にカーブポイントが発生するかどうかを判断し,カーブポイントが発生した場合に買取または販売信号を発する。

この基礎に,戦略は,価格突破の最小の間隔を設定し,頻繁に取引を避けるように;異なるサイズの入場シグナルを設定するなど,いくつかの追加の条件を設定しています. これらの条件は,いくつかの望ましくない取引ポイントをフィルターするためにあります.

優位分析

この戦略の利点は以下の通りです.

  1. 価格変動に敏感で,早期にトレンドの変化を捉えるFaytterro Estimatorの指数を使用してトレンドを判断します.

  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. Adjustable parametersを最適化し,異なる品種に対して合理的なパラメータを設定する.遺伝的アルゴリズム,ベイズ最適化などの方法を使用できる.

  5. 震動時の取引を避けるため,震動時の取引の認識を高めます.ATR,DMIなどの指標で識別できます.

  6. ピラミッドロジックを最適化して,追いつくのを防ぐ.例えば,トレンドの強さに応じて動的に上昇幅を調整する.

  7. 異なる時間周期のパラメータ設定をテストし,最適な周期を探します.

要約する

この戦略は,ファイテルロ・エスティメーターの取引信号に基づいて意思決定を行い,その基礎に論理判断を加え,異なるサイズの入場信号を設定し,ピラミッド特性のトレンド追跡戦略を形成する. この戦略は,直感的に理解しやすく,強力なトレンドキャプチャ能力を持っている. しかし,指標誤判,無止損,パラメータ調整の優遇などの問題もあります. 将来の最適化の方向は,戦略の安定性と適応性を高めるために,フィルタリング機構,止損論理,パラメータ最適化などの追加を含みます.

ストラテジーソースコード
/*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)