低高トレンド戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-23 11:03:18
タグ:

img

概要

この戦略は,低価格で購入し高価格で販売するという市場原理に基づいて設計されています.特定の期間中,最高価格と最低価格を追跡し,価格が最低価格を突破するとロングポジションを確立し,価格が最高価格を下回り,または利益を得る条件が満たされたときにポジションを閉じる.同時に,この戦略はオプションのトレンドフィルターを追加し,価格が上昇傾向にある場合にのみ購入することを可能にします.

戦略の論理

最低価格と最高価格の計算

  • 最低価格 (lowcriteria): ta.lowest関数を呼び出し,ユーザが設定した回顧期間中の最低価格 (デフォルト20バー) を計算し,最低価格ラインをプロットします.

  • 最大価格 (最高基準): ta.highest 関数を呼び出し,ユーザが設定したバックバック期間中の最高価格 (デフォルト10バー) を計算し,最高価格ラインをプロットします.

入力信号

現在の価格が最下位価格線を突破すると,買い信号が起動し,ロングポジションを確立します.

出口信号

選択肢として 2 つの出口方法が用意されています.

  1. 固定得益: 価格が既定得益レベルに達したとき (例えば入場価格より8%高いとき) 利益を得るためにポジションを閉じる.

  2. 最高価格の分解: トレンドの逆転を判断して価格が最高価格線を下回ると損失を削減するためにポジションを閉じる.

トレンドフィルター

EMA線を追加してトレンド方向を決定する.価格が EMA線 (上昇傾向) 以上である場合にのみ購入を許可する.このフィルターは有効または無効にすることができます.

利点分析

  • 低価格で購入して高価格で販売する 伝統的な戦略を採用し 市場基盤に合わせて

  • 傾向判断を加え,価格変動中に頻繁な開店を避ける.

  • 高い利益を追求したり 損失を減らすための 2 つの脱出オプションを提供してください.

  • パーソナライズ可能なパラメータは,より多くの市場環境に適応します.

  • パラメータ調整やフィルター設計などを通じて戦略の最適化に 大きな余地があります

リスク分析

  • 固定得益レベルは,実際の市場動向に基づいて調整されないため,得益が早すぎるか,得益目標が不十分である.

  • 最も高い価格で売却すれば 損失を効果的にコントロールできないので 巨額の損失を もたらす可能性があります

  • EMAの動向判断は 特定の期間だけを振り返り 実際の動向変化を遅れている可能性があります

  • バックテストの結果は 未来を代表できない ライブパフォーマンスには不確実性がある

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

  • 利潤のレベルを動的に調整するために,トレーリングストップ,部分的な退出などの利潤取りの方法を追加します.

  • 出口信号を最適化する.例えば,部分出口,他の指標を追加する.

  • より多くの指標や機械学習を組み込むことで 傾向判断を強化します

  • パラメータを最適化するために より広範なバックテストを行います

  • ストップ・ロスの方法を追加して 損失を制御する.

概要

この戦略は,一般的に,クラシックな低価格で高い価格で販売する原則を適用し,特定の条件下でうまく機能することができます. しかし,パラメータ調整,出口最適化,ストップ損失メカニズムなどを通じて改善する余地があります. この記事は,戦略の論理,メリット,デメリット,最適化方向についての詳細な分析を提供し,戦略のアイデアを共有することを目的として,投資家にリスクを思い出させ,定量的な戦略で慎重に取引することを目的としています.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

もっと