配列配列配列配列配列配列

作者: リン・ハーンチャオチャン, 日時: 2023-09-23 15:40:57
タグ:

概要

この戦略は,価格がフィットされたラインを突破したときの取引信号を生成するために,バーの高低点に二次曲線を調整します.これは,ブレークアウト取引のための主要なサポート/レジスタンスレベルを数学的に特定しようとします.

戦略の論理

主要な構成要素と規則は次のとおりです.

  1. 平方回帰を用いた高低点の曲線フィッティング

  2. 上部帯を超えると 信号を買いなさい

  3. 信号を売りなさい ダウンバンドを下回る時

  4. 誤った断裂を避けるため N 期間の検証

  5. バックテストによって出口を最適化します

この戦略は,重要な価格を数学的に特定し,典型的なブレイクアウトシステムであるブレイクアウトを取引しようとします.

利点

他のブレイクアウトシステムと比較して,主な利点は以下の通りです.

  1. 数学的な適合は主観的な判断よりも客観的です

  2. 技術分析と統計モデルを組み合わせた新しいアプローチ

  3. 多期検証は誤った断裂を回避する.

  4. バックテストは出口と待機期間を最適化できます

  5. 柔軟な調整で簡単に実装できます

  6. モデルは手動の介入なしに自動的に更新されます.

  7. 製品や時間枠の間でパラメータの安定性をテストできます

  8. 機械学習によってさらに最適化できる可能性

  9. 探求価値のある新しいアプローチです

リスク

しかしリスクは次のとおりです

  1. 配合性能はパラメータ調整に依存し 過剰配合の危険性があります

  2. 配線が遅れてしまい 損失を完全に回避できません

  3. 音量確認がない 閉じ込められる危険だ

  4. 持続性アルファは 統計的仲裁に挑戦しています

  5. バックテスト期間が限られていて 安定性を確認する必要がある

  6. 多市場適応性は検証が必要です

  7. 固定サイズには動的調整がない.

  8. 報酬/リスク比を厳格に評価する必要がある

改良

分析に基づいて,改善には以下の要素が含まれる.

  1. 市場システムにおけるパラメータの安定性をテストする.

  2. 音量確認指標を追加します

  3. より高い品質の信号のために入力/出口ロジックを最適化します

  4. ダイナミックな位置サイズモデルを構築します

  5. 損失を制限するためにストップを組み込む.

  6. リスク管理戦略を最適化する

  7. ローリング・ウィンドウ バックテストの検証

  8. 多市場安定性を評価する.

  9. モデル最適化のために機械学習を活用します

結論

概要すると,この戦略にはいくつかの革新的価値と実験的価値があります. しかし,統計的アービタージの長期的有効性はまだ証明されていません. 安定性,リスク/報酬に関する包括的なサンプルテストは,過剰な適応を防止し,適応性を維持するための鍵です.


/*backtest
start: 2023-08-23 00:00:00
end: 2023-09-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

strategy(title = " Strategy Quadratic Semaphore ",
         shorttitle = "SQS",
         overlay = true,
         precision = 8,
         calc_on_order_fills = true,
         calc_on_every_tick = true,
         backtest_fill_limits_assumption = 0,
         default_qty_type = strategy.fixed,
         default_qty_value = 2,
         initial_capital = 10000,
         pyramiding=5,
         currency = currency.USD,
         linktoseries = true)

//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool)

FromMonth         = input(defval = 1, title = "Month", minval = 1)
FromDay           = input(defval = 1, title = "Day", minval = 1)
FromYear          = input(defval = 2019, title = "Year", minval = 2014)

backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool)
ToMonth           = input(defval = 31, title = "Month", minval = 1)
ToDay             = input(defval = 12, title = "Day", minval = 1)
ToYear            = input(defval = 9999, title = "Year", minval = 2014)

Config            = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool)
p = input(6)
length = input(30)
//
backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))
//
//
// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ //

x1 = bar_index
x2 = sqrt(x1)
y = high
//
S11 = sum(x2,length) - sqrt(sum(x1,length)) / length  
S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length  
S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length            
Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length   
Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length   
//
max1 = sma(x1,length) 
max2 = sma(x2,length)
may = sma(y,length)
b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12))
b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12))
b1 = may - b2*max1 - b3*max2
qr = b1 + b2*x1 + b3*x2
//
yl = low
//
Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length  
Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length  
//
mayl = sma(yl,length)
b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12))
b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12))
b1l = mayl - b2l*max1 - b3l*max2
qrl = b1l + b2l*x1 + b3l*x2
//
period = round(p/2)+1
hh = qr[period]
ll = qrl[period]
countH = 0
countL = 0
buy=0
sell=0
//
for i = 1 to period-1
    if qr[i]<hh
        countH:=countH+1
    if qrl[i]>ll
        countL:=countL+1

for i = period+1 to p+1
    if qr[i]<hh
        countH:=countH+1
    if qrl[i]>ll
        countL:=countL+1

if countH==p
    pivotH = high[period]
    buy := 1
    
if countL==p
    pivotL = low[period]
    sell := 1
//    
plotshape(buy == 1 , text='💣', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto)
plotshape(sell == 1 , text='🔨', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto)
//

if (backTestPeriod())
    strategy.entry("long", true, 1, when = buy == 1)
    strategy.entry("short", false, 1, when = sell == 1) 


もっと