日々のピボットポイントに基づく自動ロング/ショート取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-23 14:24:22
タグ:

img

概要

この戦略は,長/短トレンドの判断のために,日々のキャンドルスタイルの最高値と最低値に基づいて2つの線を描く.価格が最高価格ラインを突破すると長になり,価格が最低価格ラインを突破すると短くなります.長期とショートポジションの間に自動的に切り替えることができます.

戦略の論理

この戦略は,主に日々のキャンドルスタイルのピボットポイントを使用して,ロング/ショートトレンドを決定する.いわゆる"ピボットポイント"は,昨日の最高値と最低値を指します.この2つの線が取引範囲を形成します.今日の価格がいずれかを破ると,トレンドの逆転を示します.

具体的には,主な論理は次のとおりです.

  1. 最高価格ライン:昨日の最高価格値をグラフ化します.突破は長期トレンドを示します.
  2. 最低価格線:昨日の最低価格線を示します.突破は短トレンドを示します.
  3. ロング エントリー: 閉じる価格が最高価格ラインを突破するとロングポジションを開く.
  4. ショートエントリー: 閉じる価格が最低価格ラインを突破したとき,ショートポジションを開く.
  5. ストップ損失: 最低価格ラインに近い長ストップ損失,最高価格ラインに近い短ストップ損失.

最低値/最高値の突破率でトレンドを把握することで,自動で長値と短値の切り替えを実現します.

利点分析

この戦略の主な利点は以下の通りです.

  1. シンプルな論理,理解し実行しやすい
  2. 日々のバーに基づいて,長いサイクルで,短期間のノイズに弱い
  3. ロングとショートに自動的に切り替える,トレンドではない市場を避ける
  4. リスク管理に有益な明確なストップ損失

リスク分析

いくつかのリスク:

  1. 日々のバーは,低周波で,時間内に損失を停止することはできません
  2. 偽の発見は不必要な損失を引き起こす可能性があります
  3. 長期保持は損失を増やす可能性があります

改善:

  1. 確認のために他の高い周波数指標を追加
  2. 偽の突破をフィルタリングするパラメータを最適化
  3. 継続的なストップ・ロスの方法を採用し,タイムリーストップ・ロスを確保する.

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

いくつかの指示:

  1. 安定性をテストするために,異なる製品とより長いデータセットをバックテストする
  2. チャネルやボリンジャー帯など 他の突破指標を探索してください
  3. 取引量を含めて,取引量なしの誤ったブレイクを避ける
  4. 誤差を減らすためにより多くのフィルターを追加します
  5. パラメータ最適化のために機械学習を利用する

概要

概要すると,この簡単な戦略は,日々のピボットに基づいて自動ロング/ショートを実現します.論理は明確で理解しやすいです.さらなる最適化は安定性を向上させることができます.投資家は個人リスク偏見に基づいてライブ取引に適用できます.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

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

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
showlines = input(true, title = "Show lines")
showbg = input(false, title = "Show background")
showday = input(false, title = "Show new day")
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")

//New day trand
bar = close > open ? 1 : close < open ? -1 : 0
newday = request.security(syminfo.tickerid, 'D', time)

//Lines
uplevel = request.security(syminfo.tickerid, 'D', high)
dnlevel = request.security(syminfo.tickerid, 'D', low)
upcolor = uplevel == uplevel[1] and showlines ? lime : na
dncolor = dnlevel == dnlevel[1] and showlines? red : na
plot(uplevel, offset = 1, linewidth = 2, color = upcolor)
plot(dnlevel, offset = 1, linewidth = 2, color = dncolor)

//Background
size = strategy.position_size
col = time == newday + 86400000 and showday ? blue : showbg and size > 0 ? lime : showbg and size < 0 ? red : na
bgcolor(col)

//Orders
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong ? lot : 0, stop = uplevel, when = truetime)
    strategy.entry("Close", strategy.short, needshort ? lot : 0, stop = dnlevel, when = truetime)

もっと