グリッド戦略をフォローする傾向

作者: リン・ハーンチャオチャン, 日付: 2023-12-08 12:05:17
タグ:

img

概要

この戦略は,格子戦略に従うトレンドで,主要トレンドが上昇する時期を選択し,短くはせず,長く続く.デフォルトの格子サイズは1xATRで,注文を追求するために1,2,3の格子レベルをダウンに構築し,5番目の格子では損失を停止する.空のポジションが前の格子に達すると,格子全体が価格を追跡するために上昇する.

戦略の論理

  1. EMA12が EMA144より大きいということは,主要なトレンドが上昇しているということです.
  2. 主なトレンドが上昇しているときにだけロングポジションを開く
  3. デフォルトの格子サイズは1xATRで,倍数は調整できます
  4. 価格を追跡し,個別にロングポジションを開くために,下向きのグリッドレベル1,2,3を構築
  5. 5番目のグリッドでストップ損失ポイントを設定
  6. ポジションを開いた後,ストップ・ロストポイントとプロフィートポイントを設定します.
  7. 価格が上昇する際に利益を引き出すポイントを突破するとポジションを閉じる.
  8. 価格が秋にストップ・ロスのポイントに達するとポジションを閉じる
  9. すべてのポジションが閉鎖された後,価格が再び最後のグリッドを突破した場合,グリッドの位置と量を再計算して上向きに追跡します

この戦略は,主要トレンド方向とグリッド取引を組み合わせて価格を追跡する. 上向きのトレンドでより高い収益を得ることができます.グリッドは,ポジションを別々に開くために複数の価格ポイントを設定し,ポジションごとにリスクを軽減します.ストップ・ロストとテイク・プロフィート設定は利益をロックし,最大損失を制限します.すべてのポジションが閉鎖された後,戦略は再びポジションを開くためにグリッドの新しい高いレベルを再計算し,利益を最大化することができます.

利点分析

  1. 主なトレンド方向を決定するためにEMAを使用し,トレンドに反するポジションを開設することを避ける.
  2. 格子取引は,単一のポジションリスクを減らすために,個別にポジションを開くことができます.
  3. ストップ・ロストと 利益の引き上げ 利益を固定し 最大損失を制御する
  4. すべてのポジションを閉鎖した後,再計算グリッドを追いかけるために,利益空間を拡大することができます

主な利点はトレンド取引とグリッド取引を組み合わせることで,トレンド方向の正確性を保証し,グリッド取引のリスク分散も達成する.また,ポジションを閉じる後にグリッドを再計算することで,無制限の追いかけて,大きなラリーがあるときに巨大な利益を得ることができます.

リスク分析

  1. 主要 な 傾向 の 判断 は 誤り で,間違った 方向 に 進む こと が でき ます
  2. 電力網の大きな損失を伴う大きな横向変動
  3. ストップ・ロスは速すぎた
  4. 戻る後に最適なエントリーポイントに戻すことはできません.

主なリスクは,主要なトレンド方向の誤った判断であり,トレンドに反してポジションを開設し,莫大な損失をもたらす.また,複数のグリッドが閉じ込められ,横向波動性が高くなった場合,損失は悪化する.さらに,急速な価格低下はストップロスを引き起こす可能性があり,すべてのポジションを閉鎖し,その後の利益機会を失う可能性があります.引き下げ後,初期最適なグリッドレベルに戻ることは困難です.

主要トレンド判断の精度は,EMAパラメータを最適化することによって改善することができる.グリッド間隔と最初のエントリのサイズを調整することで,全体的な損失も制御できる.ストップ損失ポジションは市場の変動頻度を考慮する必要がある.また,すべてのポジションを閉鎖するのではなく,部分的なポジションの利益を取ることを考慮することができる.

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

この戦略は,次の側面でも最適化できます.

  1. 主要なトレンド判断の精度を向上させるために,EMAパラメータを最適化
  2. リスク/報酬比を最適化するためにグリッド間隔と量を調整する
  3. ストップ・ロスの改善と,利益を得る論理,例えば,部分的な利益を得る,ストップ・ロスの後続など
  4. 再入国条件にさらなる制限を加え,撤退中に早速再入国を避ける
  5. 最適なエントリータイミングを決定するためにより多くの指標を組み込む.例えばキャンドルスタイルのパターン,指標の感度など.
  6. 異常な市場状況で大きな損失を避けるために異常値検出を追加します

これらの最適化措置により,戦略は重要なトレンドでより大きな利益を得ることができ,同時にリスクを制御し,通常の横向変動で損失を減らすことができます.

概要

この戦略は,トレンドトレードとグリッドトレードを有機的に組み合わせます.主要な方向性を決定するためにEMAを使用し,トレンドを追求するためにグリッドトレードを使用して個別にポジションを開きます.ストップ損失,利益とグリッド再計算メカニズムを含む適切なリスク管理により,この戦略は主要なトレンド中に適正な利益を生み出し,同時にリスクを制御することができます.パラメータと判断の精度に対するさらなる最適化はより高い利益につながる可能性があります.ライブ取引の詳細なテストと最適化に価値がある.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 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/
// © zxcvbnm3260

//@version=5
strategy("grid strategy long", overlay=true)


// 版本更新记录:
// v1.0 2021/11/09 只做多、不做空,选择大趋势向上的时间段。网格大小默认为1倍ATR,往下1、2、3个网格吃单,第5个网格止损。空仓时到达往上一个网格则网格整体抬升。(Only go long, not short, choose a time period when the general trend is up. The default grid size is 1x ATR, the next one, two, and three grids will take orders, and the fifth grid will stop loss. When the empty position reaches the upper grid, the grid as a whole rises.)


X_ATR = input.float(title='网格大小是多少倍ATR?', defval = 1)


// 1.基础变量
ema169 = ta.ema(close, 169)
ema144 = ta.ema(close, 144)
ema12 = ta.ema(close, 12)

ema576 = ta.ema(close, 576)
ema676 = ta.ema(close, 676)

plot(ema169, color=color.new(color.orange, 0), linewidth=2)
// plot(ema144, color=color.orange)
plot(ema12,  color=color.blue)
// plot(ema676, color=color.orange, linewidth=1)

mtr = math.max(high - low, math.abs(close[1] - high), math.abs(close[1] - low))
atr = ta.ema(mtr, 30)

is_0930 = hour(time, 'GMT-4') == 9  and minute(time, 'GMT-4') == 30
is_1500 = hour(time, 'GMT-4') == 15 and minute(time, 'GMT-4') == 00
is_1530 = hour(time, 'GMT-4') == 15 and minute(time, 'GMT-4') == 30

is_yangxian = close>open
is_yinxian = close<open

// 2.基本趋势标记

big_trend  = ema12 >= ema169 ? 1 : 0
big_trend2 = ema12 <= ema169 ? 1 : 0

// 背景的变色处理:
bgcolor(big_trend == 1 ? color.new(color.green, 90) : color.new(color.red, 90) )

// 3.网格点位初始化

grid_size = atr * X_ATR // 网格大小
        
price_entry1 = open - grid_size*1
price_entry2 = open - grid_size*2
price_entry3 = open - grid_size*3
price_stop_loss = open - grid_size*5

price_exit1 = price_entry1 + grid_size*1
price_exit2 = price_entry2 + grid_size*1
price_exit3 = price_entry3 + grid_size*1

qty1 = int(1000/price_entry1)
qty2 = int(1000/price_entry2)
qty3 = int(1000/price_entry3)


// 标出各种点位
slm_lines_time(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)=>
    time2 = time + 1000*3600*24*5
    line.new(time, price_stop_loss, time2, price_stop_loss, color=color.red, xloc = xloc.bar_time, width=2)  // 止损位
    line.new(time, price_entry1, time2, price_entry1, color=color.green, xloc = xloc.bar_time)  // 
    line.new(time, price_entry2, time2, price_entry2, color=color.green, xloc = xloc.bar_time)  // 
    line.new(time, price_entry3, time2, price_entry3, color=color.green, xloc = xloc.bar_time)  // 
    line.new(time, price_exit1,  time2, price_exit1,  color=color.green, xloc = xloc.bar_time, width=2)  // 

slm_lines(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)=>
    line.new(bar_index, price_stop_loss, bar_index[5], price_stop_loss, color=color.red, xloc = xloc.bar_index, width=2)  // 止损位
    line.new(bar_index, price_entry1, bar_index[5], price_entry1, color=color.green, xloc = xloc.bar_index)  // 
    line.new(bar_index, price_entry2, bar_index[5], price_entry2, color=color.green, xloc = xloc.bar_index)  // 
    line.new(bar_index, price_entry3, bar_index[5], price_entry3, color=color.green, xloc = xloc.bar_index)  // 
    line.new(bar_index, price_exit1,  bar_index[5], price_exit1,  color=color.green, xloc = xloc.bar_index, width=2)  // 


// 4.网格点位更新和下单

is_entry0 = big_trend==1 and year>=2020

var is_entry = false

// 未进场时:
if is_entry0 and not is_entry
    is_entry := true
    
    grid_size := atr * X_ATR // 网格大小
    
    price_entry1 := close - grid_size*1
    price_entry2 := close - grid_size*2
    price_entry3 := close - grid_size*3
    price_stop_loss := close - grid_size*5
    
    price_exit1 := price_entry1 + grid_size*1
    price_exit2 := price_entry2 + grid_size*1
    price_exit3 := price_entry3 + grid_size*1
    
    qty1 := int(1000/price_entry1)
    qty2 := int(1000/price_entry2)
    qty3 := int(1000/price_entry3)
    
    // slm_lines(time, price_entry1, price_entry2, price_entry3, price_stop_loss, price_exit1)
    
    strategy.entry("open1", strategy.long, qty1, limit = price_entry1)
    strategy.entry("open2", strategy.long, qty2, limit = price_entry2)
    strategy.entry("open3", strategy.long, qty3, limit = price_entry3)
    
    strategy.exit("close1", qty = qty1, limit = price_exit1, stop = price_stop_loss)
    strategy.exit("close2", qty = qty2, limit = price_exit2, stop = price_stop_loss)
    strategy.exit("close3", qty = qty3, limit = price_exit3, stop = price_stop_loss)

// 已进场的各类情况

// 1.止损
if is_entry and close <= price_stop_loss
    strategy.close_all()
    is_entry := false

// 2.网格抬升
if is_entry and close >= price_exit1
    is_entry := false
        




もっと