
この策は,K線の実体長を基に多空方向を判断する.これは,最近30本のK線の平均実体長を計算し,陽線実体長が平均実体長より大きいときは多行し,陰線実体長が平均実体長より大きいときは空行する.
この戦略は,まず K 線の実体長 body を計算し,最近 30 つの K 線実体長 sbody の平均値を計算する.
今日のK線が陰線 ((bar==-1) であり,実体長が平均実体長より大きいとき,多項を打開する ((up1) 〜.
今日のK線が陽線 ((bar==1) であり,実体長が平均実体長より大きいとき,空欄 ((dn1)) を開きます.
多項開設後,今日のK線が陽線 ((bar==1) であり,現在のポジションが利潤状態である場合,平仓多項。
空券を開けた後,今日のK線が陰線 ((bar==-1) であり,現在のポジションが利潤状態である場合,平仓空券である.
この策略は,K線実体長さを簡単に効率的に利用して市場トレンドを判断する.実体長さがトレンドの強さを示すので,実体長さを多空の判断の根拠として使用する.
この戦略の利点は以下の通りです.
戦略はシンプルでわかりやすく,実行可能だ.
K線実体長を利用してトレンドを判断し,騒音による干渉を避ける.
動的平均の計算により,市場の変化に適応できます.
利回りの平準化条件を設定することで,戦略の収益率を向上させることができる.
設定可能な戦略パラメータが,異なる市場環境に適用されます.
この戦略にはいくつかのリスクがあります.
長い実体は必ずしも強いトレンドを表すのではなく,正常な波動である可能性があります.
平均実体長さのタイムウィンドウを正しく設定しないことは,取引機会を逃す可能性があります.
突発的な出来事は戦略的損失を招く可能性があります.
長期にわたって空白のポジションを保有すると,損失が拡大する可能性があります.
リスクに対する対処法:
取引を誤ってしないように,他の指標と組み合わせてトレンドを判断してください.
異なるパラメータをテストし,平均実体長を最適化する計算.
単発損失を制御するストップ・ストップ条件を設定します.
ポジション開設とポジションのロジックを最適化して,ポジションの長期間保持を避ける.
この戦略は以下の点で最適化できます.
MACD,RSIなどの指標と組み合わせてトレンドを判断し,通常の波動による誤信号を避ける.
異なる平均実体長時間ウィンドウのパラメータをテストし,最適なパラメータの組み合わせを探します.
ポジション開設量制御ロジックを追加し,損失回数が増加するにつれて,ポジション開設量を徐々に減らす.
移動ストップまたは利回りストップの退出条件を設定し,単発損失率を制御する.
ポジション開設とポジション条件を最適化して,無効取引を避ける.例えば,連続3つのK線エンティティが長ければ,またポジション開設する.
特定の期間または重要なデータの発表前後に取引を避け,為替相場ショックによる損失を制御する.
この戦略の全体的な構想は明快で分かりやすく,K線実体とその平均長さを比較して入場のタイミングを判断する.戦略の最適化スペースは大きい.戦略のパラメータを異なる市場環境により適合させるために,多方面から最適化調整を行うことができる.全体的に,この戦略は,量的な取引入場戦略として,使用と学習の新手トレーダーに適した,シンプルで信頼できる.継続的に最適化し,より多くの指標を組み合わせることで,戦略の収益率と安定性をさらに向上させることができる.
/*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()