カンドルスタイクボディベースのダブルスルーストラテジー

作者: リン・ハーンチャオチャン, 日付: 2023-11-16 17:14:48
タグ:

img

概要

この戦略は,ロングとショート方向を決定するためにキャンドルストイックボディの長さを使用します.近年の30個のキャンドルストイックの平均ボディ長さを計算します. ブライッシュキャンドルボディ長さが平均よりも大きいとき,それは長い.ベアッシュキャンドルボディ長さが平均よりも大きいとき,それは短い.

戦略の論理

この戦略はまず,キャンドルスタイク体長体と 最近30個のキャンドルスタイク体体の平均体長を計算します.

今日のキャンドルスタイクが下落傾向 (バー==−1) で,ボディ長が平均ボディ長よりも大きいとき,ロングポジション (アップ1) を開きます.

本日のキャンドルスタイクが上昇傾向 (bar==1) で,ボディ長が平均ボディ長よりも大きいとき,ショートポジション (dn1) を開きます.

ロングを開いた後,今日のキャンドルスタイクが上昇傾向 (bar==1) で,現在のポジションが収益的である場合,ロングポジションを閉じる.

ショートを開いた後,今日のキャンドルスタイクが下落傾向 (バー==−1) で,現在のポジションが収益的である場合,ショートポジションを閉じる.

この戦略は,シンプルで効果的な方法で,キャンドルスタイクの体長を使用して市場トレンドを決定します.体が長くなるほど,トレンドが強くなります.したがって,体長を長と短の基準として使用します.

利点分析

この戦略の利点は

  1. 論理は単純で明快で 分かりやすく実行できます

  2. トレンドを判断するためにキャンドルスタイルの体長を使用し,騒音の干渉を避ける.

  3. 動的平均計算を採用し,市場の変化に適応できる.

  4. 収益性の向上のために 収益性の高い退出条件を設定します

  5. 設定可能なパラメータで,異なる市場環境に適応できます.

リスク分析

この戦略のリスクは

  1. 長身は必ずしも強い傾向を示さない 普通の変動かもしれない

  2. 不適切な平均体長時間窓は 取引機会を逃す可能性があります

  3. ブラック・スワン・イベントは 損失を引き起こす可能性があります

  4. ポジションを長く持っていれば 損失が増える可能性があります

解決策:

  1. 他の指標と組み合わせて 傾向を特定し 間違った取引を避ける

  2. 異なるパラメータ値をテストして 平均体長計算を最適化します

  3. 単一の損失を制御するストップ損失を設定する.

  4. 入口と出口の論理を最適化して 長く待たずに済みます

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

戦略は以下の側面で最適化できます.

  1. MACDとRSIを組み合わせて 傾向を決定し 普通の変動からの誤った信号を避ける

  2. 適正なパラメータセットを見つけるために,異なる平均体長時間窓パラメータをテストします.

  3. ポジションサイズ制御ロジックを追加し,損失が発生するときにポジションサイズを徐々に減らす.

  4. 単一の損失パーセントを制御するために,ストップ損失または利益目標を設定します.

  5. 効果のない取引を避けるために,エントリーと出口条件を最適化します.例えば,エントリーする前に連続して3つの長いキャンドルスタイクを待ってください.

  6. 変動による損失を制御するために,特定の期間や重要なデータリリース周辺の取引を避ける.

結論

この戦略は,エントリータイムリングのためにキャンドルスタイクボディを平均長さと比較する明確で理解しやすい論理を持っています. 複数の次元から最適化するための大きな余地があり,異なる市場環境により適しています. 全体的に,初心者トレーダーが使用し学ぶのに適したシンプルで信頼性の高い導入量取引戦略です. さらにより多くの指標を組み合わせ,収益性と強度を改善するために最適化します.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's ColorBar Strategy v1.0", shorttitle = "ColorBar str v1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usebody = input(true, defval = true, title = "Use body")
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")

//Signals
bar = close > open ? 1 : close < open ? - 1 : 0
body = abs(close - open)
sbody = ema(body, 30)

up1 = bar == -1 and (body > sbody or usebody == false)
dn1 = bar == 1 and (body > sbody or usebody == false)

plus = (close > strategy.position_avg_price and strategy.position_size > 0) or (close < strategy.position_avg_price and strategy.position_size < 0)
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and plus

if up1
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00) or exit
    strategy.close_all()

もっと