クロス・リーミット・オーダー・クロス・ピリオド・トレーディング・ストラテジー

作者: リン・ハーンチャオチャン,日付: 2023年11月3日 17:11:34
タグ:

img

概要

この戦略は,市場傾向の方向性を決定するために単純な移動平均を使用し,移動平均線に沿ってトレンドに従うために制限オーダーを置くトレンドフォローする取引戦略です.

戦略の論理

  1. 単純な移動平均値 (SMA) とトレンド方向のトレンドを計算する.

  2. Anti-Sawフィルタが有効になっている場合,低値がSMA以上,高値がSMA以下の場合はダウントレンドが識別されます. Anti-Sawフィルタが無効になっている場合は,閉じるがSMA以上,閉じるがSMA以下である場合はダウントレンドが識別されます.

  3. トレンド方向のトレンドと有効なトレード方向の NEEDLONGと NEEDSHORTに従って,SMA価格でリミットオーダーを行う:

    • 長期取引が必要な場合 (needlongは正しい) と上昇傾向にある場合,SMA価格で長期制限注文をします.

    • ショート・トレードが必要な場合 (needshortは正しい) ダウントレンドでは,SMA価格でショート・リーミット・オーダーをします.

  4. ポジション方向がトレンド方向と一致しない場合,ストップ・ロスのロジックを終了ポジションに設定します.

  5. 指定された日付範囲内での取引のみ

利点分析

  1. トレンドを決定するためにSMAを使用することで,市場の騒音を効果的にフィルタリングし,長期的なトレンドを固定することができます.

  2. SMA価格でリミットオーダーを出すことで トレンドが始まると良いエントリーポイントを得ることができます

  3. 個人的な取引スタイルに応じて 長期または短期間の取引を行うための柔軟性

  4. 損失を増やすのを防ぐために 損失を停止します

  5. 大事なイベントの波動を避けるため 取引時間帯を設定します

リスク分析

  1. 傾向指標としてのSMAは遅延効果を持ち,傾向の転換点を見逃し損失を引き起こす可能性があります.

  2. リミットオーダーは柔軟性がなく,短期的なトレンド調整によりポジションに入れない可能性があります.

  3. SMA 周期パラメータは適切な設定が必要で,不適切な設定は誤ったトレンド決定につながります.

  4. 取引セッションのパラメータは,機会を逃したり,リスクのある期間の取引を避けるために,合理的である必要があります.

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

  1. マルチインジケータ確認のための他の指標を追加することを検討し,SMAの遅れの問題を回避する.

  2. 価格がSMAを突破すると市場オーダー追跡に切り替える. 追跡柔軟性を向上させる.

  3. 動的にSMA期間を最適化し,異なる市場サイクルに適応する.

  4. より柔軟なストップのために,SMA価格に厳格ではなく,低/高のスイングにストップロスを設定します.

  5. よりスマートなダイナミックな取引セッションのためにアルゴリズム要素を増やし,大きなリスクイベントを回避する.

概要

一般的には,これは比較的単純なトレンドフォロー戦略で,SMAでトレンド方向を決定し,SMA価格でトレンドをフォローするためにリミットオーダーを出すという核心の考えです.特定の最適化により,柔軟性,適応性,インテリジェンスを改善することができます.この戦略は理解し,実装するのが簡単で,アルゴリズム取引初心者にとって適しています.しかし,リスク意識,慎重なバックテスト評価,厳格な監視,ライブ取引の最適化が必要です.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-03-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's CrossLimit", shorttitle = "CrossLimit", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.0)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, defval = close, title = "MA Source")
len = input(5, defval = 5, minval = 1, title = "SMA length")
off = input(0, defval = 0, minval = 0, title = "SMA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
rev = input(false, defval = false, title = "Reverse")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
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")

//MA
ma = sma(src, len)[off]
macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = (trend == 1 and rev == false) or (trend == -1 and rev == true)
dn = (trend == -1 and rev == false) or (trend == 1 and rev == true)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend != 0
    strategy.entry("Long", strategy.long, lot, limit = ma, when = needlong and truetime and up)
    strategy.entry("Short", strategy.short, lot, limit = ma, when = needshort and truetime and dn)
if size > 0 and needshort == false and trend == -1
    strategy.exit("Stop Long", "Long", limit = ma)
if size < 0 and needlong == false and trend == 1
    strategy.exit("Stop Short", "Short", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

もっと