
この戦略は,市場の低点での買取,高点での販売の思想設計に基づいています. それは,過去の一定の周期内の最高価格と最低価格を追跡し,価格が最低価格を破るときに多頭ポジションを確立し,価格が最高価格を下回るか,ストップ条件に達した場合に平仓します. 同時に,この戦略は,オプションのトレンドフィルターを追加し,価格が上昇傾向にある場合にのみ購入します.
最低価格 ((lowcriteria):ta.lowest関数を呼び,ユーザが設定した回顧周期 ((デフォルトの20根K線) をベースに,過去一定期間の最低価格を計算し,最低価格線を描画する.
最高価格 ((highcriteria):ta.highest関数を呼び出し,ユーザが設定した回顧周期 ((デフォルトの10根K線) をベースに,過去一定の周期における最高価格を計算し,最高価格線を描画する.
現金価格が最低価格線を突破すると,買入シグナルを発信し,多頭ポジションを確立する.
2つの出場方法が提供されています.
固定ストップ:価格が設定されたストップレベルに達したときに (入場価格の8%を超えた場合) ポジションの利回り.
最高値突破:価格が最高値線を下回ったとき,トレンドを逆転して平仓を停止する.
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()