この戦略は,2つのタイムフレームのダイナミックサポートトレーディングシステムで,週日間のタイムフレームでSMAとEMAのクロスオーバー信号を組み合わせます.このシステムは,市場のトレンドと取引機会を識別するために移動平均値の間に形成されたサポートバンドを利用し,異なる2つのタイムフレームからのシグナル確認を通じて取引精度を向上させます.この戦略はパーセントベースのポジション管理を採用し,取引コストとスリップを考慮します.
基本原理は,移動平均のクロスオーバーと2つのタイムフレームにおける相対位置のモニタリングを中心としています. 1. 長いタイムフレーム (週) は20週間のSMAと21週間のEMAを使用し,短いタイムフレーム (毎日) は50日間のSMAと51日間のEMAを使用します. 2. 長いタイムフレームでは,EMA が SMA を越えるとロング シグナルが生成され,ダウンクロスではポジションが閉鎖されます. 3. 短期間の EMA が SMA を越え,短期間の EMA が長期間の EMA を越えるときに,長い信号が発生する. 4. 短いタイムフレームが短いシグナルを生成したり,長いタイムフレームが下向きのクロスを示すとき,すべてのロングポジションは閉鎖されます. 5. この戦略は,指定された時間帯内で動作し,これらの範囲外での自動的なポジション閉鎖
この戦略は,異なるタイムフレームからの移動平均クロスオーバー信号を組み合わせて,比較的堅牢な取引システムを構築する.サポートバンドコンセプトを通じて市場動向を特定し,取引精度を向上させるために複数の確認メカニズムを使用する.戦略設計は,取引コスト,スリップ,時間管理を含むさまざまな実践的な取引要因を考慮する.固有のリスクが存在するものの,提案された最適化方向は戦略の安定性と収益性をさらに高めることができる.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-04 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Demo GPT - Bull Market Support Band", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value=0.1, slippage=3) start_date = input(timestamp("2018-01-01 00:00 +0000"), title="Start Date") end_date = input(timestamp("2069-12-31 00:00 +0000"), title="End Date") lsmaLength = input.int(20, title="Long SMA Length", minval=1) lemaLength = input.int(21, title="Long EMA Length", minval=1) customLongTimeframe = input.timeframe("W", title="Long Timeframe") // Khung thời gian dài ssmaLength = input.int(50, title="Short SMA Length", minval=1) semaLength = input.int(51, title="Short EMA Length", minval=1) customShortTimeframe = input.timeframe("D", title="Short Timeframe") // Khung thời gian ngắn source = close // Tính toán SMA và EMA cho khung thời gian dài smaLong = ta.sma(source, lsmaLength) emaLong = ta.ema(source, lemaLength) outSmaLong = request.security(syminfo.tickerid, customLongTimeframe, smaLong) outEmaLong = request.security(syminfo.tickerid, customLongTimeframe, emaLong) // Tính toán SMA và EMA cho khung thời gian ngắn smaShort = ta.sma(source, ssmaLength) emaShort = ta.ema(source, semaLength) outSmaShort = request.security(syminfo.tickerid, customShortTimeframe, smaShort) outEmaShort = request.security(syminfo.tickerid, customShortTimeframe, emaShort) // Plot các chỉ báo trên biểu đồ smaPlotLong = plot(outSmaLong, color=color.new(color.red, 0), title='20w SMA (Long)') emaPlotLong = plot(outEmaLong, color=color.new(color.green, 0), title='21w EMA (Long)') smaPlotShort = plot(outSmaShort, color=color.new(color.red, 0), title='20d SMA (Short)') emaPlotShort = plot(outEmaShort, color=color.new(color.green, 0), title='21d EMA (Short)') // Fill vùng giữa các đường SMA và EMA fill(smaPlotLong, emaPlotLong, color=color.new(color.orange, 75), fillgaps=true) fill(smaPlotShort, emaPlotShort, color=color.new(color.orange, 75), fillgaps=true) // Điều kiện long và short cho khung thời gian dài longConditionLong = ta.crossover(outEmaLong, outSmaLong) shortConditionLong = ta.crossunder(outEmaLong, outSmaLong) // Điều kiện long và short cho khung thời gian ngắn longConditionShort = ta.crossover(outEmaShort, outSmaShort) and (outEmaShort > outEmaLong) shortConditionShort = ta.crossunder(outEmaShort, outSmaShort) and (outEmaShort > outEmaLong) // Điều kiện short khi EMA ngắn hạn cắt xuống dưới SMA ngắn hạn và EMA ngắn hạn cao hơn EMA dài hạn // Kiểm tra điều kiện trong khoảng thời gian được chỉ định inDateRange = true // Nếu khung ngắn hạn xuất hiện tín hiệu short, ưu tiên đóng tất cả các lệnh Long if shortConditionShort and inDateRange strategy.close_all() // Nếu khung dài có tín hiệu short, đóng tất cả các lệnh Long if shortConditionLong and inDateRange strategy.close_all() // Nếu khung ngắn hạn có tín hiệu long và không có tín hiệu short từ khung dài, vào lệnh Long if longConditionShort and not shortConditionLong and not shortConditionShort and inDateRange strategy.entry("Long", strategy.long) // Đóng tất cả các lệnh khi không trong khoảng thời gian được chọn if not inDateRange strategy.close_all()