この戦略は,ロングとショート方向を決定するためにキャンドルストイックボディの長さを使用します.近年の30個のキャンドルストイックの平均ボディ長さを計算します. ブライッシュキャンドルボディ長さが平均よりも大きいとき,それは長い.ベアッシュキャンドルボディ長さが平均よりも大きいとき,それは短い.
この戦略はまず,キャンドルスタイク体長体と 最近30個のキャンドルスタイク体体の平均体長を計算します.
今日のキャンドルスタイクが下落傾向 (バー==−1) で,ボディ長が平均ボディ長よりも大きいとき,ロングポジション (アップ1) を開きます.
本日のキャンドルスタイクが上昇傾向 (bar==1) で,ボディ長が平均ボディ長よりも大きいとき,ショートポジション (dn1) を開きます.
ロングを開いた後,今日のキャンドルスタイクが上昇傾向 (bar==1) で,現在のポジションが収益的である場合,ロングポジションを閉じる.
ショートを開いた後,今日のキャンドルスタイクが下落傾向 (バー==−1) で,現在のポジションが収益的である場合,ショートポジションを閉じる.
この戦略は,シンプルで効果的な方法で,キャンドルスタイクの体長を使用して市場トレンドを決定します.体が長くなるほど,トレンドが強くなります.したがって,体長を長と短の基準として使用します.
この戦略の利点は
論理は単純で明快で 分かりやすく実行できます
トレンドを判断するためにキャンドルスタイルの体長を使用し,騒音の干渉を避ける.
動的平均計算を採用し,市場の変化に適応できる.
収益性の向上のために 収益性の高い退出条件を設定します
設定可能なパラメータで,異なる市場環境に適応できます.
この戦略のリスクは
長身は必ずしも強い傾向を示さない 普通の変動かもしれない
不適切な平均体長時間窓は 取引機会を逃す可能性があります
ブラック・スワン・イベントは 損失を引き起こす可能性があります
ポジションを長く持っていれば 損失が増える可能性があります
解決策:
他の指標と組み合わせて 傾向を特定し 間違った取引を避ける
異なるパラメータ値をテストして 平均体長計算を最適化します
単一の損失を制御するストップ損失を設定する.
入口と出口の論理を最適化して 長く待たずに済みます
戦略は以下の側面で最適化できます.
MACDとRSIを組み合わせて 傾向を決定し 普通の変動からの誤った信号を避ける
適正なパラメータセットを見つけるために,異なる平均体長時間窓パラメータをテストします.
ポジションサイズ制御ロジックを追加し,損失が発生するときにポジションサイズを徐々に減らす.
単一の損失パーセントを制御するために,ストップ損失または利益目標を設定します.
効果のない取引を避けるために,エントリーと出口条件を最適化します.例えば,エントリーする前に連続して3つの長いキャンドルスタイクを待ってください.
変動による損失を制御するために,特定の期間や重要なデータリリース周辺の取引を避ける.
この戦略は,エントリータイムリングのためにキャンドルスタイクボディを平均長さと比較する明確で理解しやすい論理を持っています. 複数の次元から最適化するための大きな余地があり,異なる市場環境により適しています. 全体的に,初心者トレーダーが使用し学ぶのに適したシンプルで信頼性の高い導入量取引戦略です. さらにより多くの指標を組み合わせ,収益性と強度を改善するために最適化します.
/*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()