ダイナインチ・ビーチの取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-26 14:35:02
タグ:

唐安奇海龟交易策略

概要

取引戦略は,非常に簡素化された海取引戦略である.これは原始の海取引戦略とは大きく異なる.この戦略は2つの唐通道,高速通道と遅い通道を使用する.通路周期はユーザーによって設定され,デフォルト値は高速通道20K線,遅い通道50K線である.戦略は,遅い通道の上下軌道を使って入場し,高速通道の中央軌道で停止を設定する.

戦略の原理

この戦略の核心ロジックは,

  1. 速経路を計算する:最近のfast root K線の最高価格を経路上線,最低価格を経路下線とする.経路の中間線を経路上線の平均値とする.

  2. 遅い通道を計算する: 最近のスロールーツK線の最高価格を通路上,最低価格を通路下とする.

  3. 持っていないとき,多信号で価格がスローパネルに触れる.空信号で価格がスローパネルに触れる.

  4. 取引開始後,急通路の中央線を停止線として使用します.

  5. 持股の過程で,取引信号と開場信号が逆のとき,平衡は終了します.

優位性分析

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

  1. ルールがシンプルで実行が簡単である.唐通路と移動停止は理解しやすく,初心者向けである.

  2. カスタマイズ可能なパラメータ. ユーザーは取引品種や時間周期に応じてパラメータを調整し,異なる市場環境に対応できます.

  3. 衝突する取引信号は少ない. 価格が通路を突破して上下を走るだけで,一般的な指標が誤った信号を生む状況を回避する.

  4. 自動ストップ管理リスク.高速通路の中央線移動ストップ,単一のストップを制限する.

リスク分析

この戦略は,次のリスクに直面しています:

  1. 価格波動の傾向がはっきりしない場合,ストップ損失が増える.これは戦略的収益性に影響を与える.

  2. 逆転は大きくなる.トレンドが転換する時,前向きの浮出損失は実際の損失に変換される.

  3. パラメータの設定が不適切である場合,極端または保守的になりかねない.これは,繰り返しテストによって適切な値を得ることが必要である.

  4. 自動化取引の依存度が高い.サーバーの安定性を確保し,異常が正常な自動化取引を妨げないようにする必要があります.

上記のリスクを軽減するために,パラメータ設定を最適化し,倉庫のサイズを適切に制限し,風力制御モジュールを追加することによって改善することができます.

優化方向

この戦略は,以下の方向から最適化することができます:

  1. トレンドインデックスなどの指標を組み合わせて判断する傾向分析など.

  2. パラメータ設定を最適化して,異なる取引種に適するようにします.例えば,高速な通路周期,ポジションサイズなど.

  3. 風制御モジュールを追加します.例えば最大撤回,日中の損失制限など.リスクイベントが大きな損失を引き起こすのを避ける.

  4. トレーリングストップなどのダイナミックストップを活用して,ストップを市場傾向に合わせる.

概要

取引戦略は全体として非常にシンプルなトレンド追跡戦略である. その利点は,理解しやすく,自動化しやすい,程序化取引に適している. しかし,特定のリスクも存在し,そのパラメータを実際の市場状況に合わせてさらに最適化する必要がある. 参数調整,開設信号の最適化,風控モジュールを追加などの手段によって,この戦略の実戦効果を向上させることができる.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's SimpleTurtle Strategy", shorttitle = "SimpleTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
sizelong  = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
fast      = input(20, minval=1)
slow      = input(50, minval=1)
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(false, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear    = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth   = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday   = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today     = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc)
plot(ls, offset = offset, color = colorpc)
plot(center, offset = offset, color = colorsl)

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Orders
truetime = true
lotlong = 0.0
lotshort = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and truetime)
strategy.exit("Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if true
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)

もっと見る