2年新高回転移動平均戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-26 14:49:28
タグ:

img

概要

この戦略は,株価の2年新高値と移動平均値のユニークな計算に基づいています. 2年新高値に達した後,株価が13日指数的な移動平均値に下がったときに購入信号を生成します.

戦略原則

この戦略の基本的な論理は,次のユニークな計算に基づいています.

  1. 株価が過去2年間で新たな高値に達すると 短期的なピークを形成します これは重要な価格レベルです

  2. 価格がこの新高値から下がり 13日指数関数移動平均値に戻ると,良い購入機会が生まれます.これは価格統合パターンを利用します.

  3. さらに,買い信号が発信されたとき,株価は2年ぶりの高値の10%の範囲内であり,それほど遠くではない必要があります.適切なタイミングを確保するために,13日線以下と21日線上にある必要があります.

  4. オープンポジションでは,価格が21日間のMA線を下に 5%を突破したり,2年ぶりの最高値から 20%を下回ったりすると,ポジションは利益をロックするために停止されます.

戦略 の 利点

これは長期的脱出戦略で,以下の利点があります.

  1. この2年ぶりの高値で トレンド逆転の可能性を 効果的に特定できるのです

  2. 13日間の EMA線は,インプットフィルターとして機能し,ウイプソウを回避し,より強いモメンタムを決定します.

  3. 単一の計算は,主観的な干渉を避け,価格アクションに基づいた信号を生成します.

  4. 合理的なストップロスは,ほとんどの利益を固定することができます.

リスク と 解決策

リスクは主に以下の通りです.

  1. 市場は深度の引き下げを経験し 間に合わずに止まる可能性があります 損失を断固として削減するかどうかを決めるために 全体的な環境を評価する必要があります

  2. 一夜間の大きなギャップは完璧なストップ損失を防ぐ可能性があります.したがって,ストップ損失率は適応するために拡大する必要があります.

  3. 13日線は 統合をうまくフィルタリングできず 過剰な誤った信号を生む可能性があります. 21日線に拡張することを検討できます.

  4. 新しい高値が傾向の変化を決定するのにうまく機能しない可能性があります.他の指標が組み合わせて有効性を高めることができます.

戦略最適化に関する提案

さらに最適化できる余地があります.

  1. 市場全体的な状況を判断するための他のツールを取り入れ,不必要なポジションを避ける.

  2. 動力指標を追加して 鞭の範囲を避ける

  3. 移動平均のパラメータを最適化して 価格パターンをより良く把握する

  4. 機械学習を利用して 柔軟性を高めるため 2年高パラメータを動的に最適化します

結論

概要すると,これはユニークな長期ブレークアウト戦略であり,鍵となるのは2年間の高価格水準と13日間のEMA線がエントリーフィルターとして機能する.この戦略には一定の利点があるが,さらに研究と探求に値する改善余地もある.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © Part Timer

//This script accepts from and to date parameter for backtesting. 
//This script generates white arrow for each buying signal

//@version=4
strategy("AMRS_LongOnly_PartTimer", overlay = true)

//i_endTime = input(defval = timestamp("02 Jun 2021 15:30 +0000"), title = "End Time", type=input.time)

StartYear=input(defval = 2000, title ="Start Year", type=input.integer)
StartMonth=input(defval = 01, title ="Start Month", type=input.integer)
StartDate=input(defval = 01, title ="Start Date", type=input.integer)

endYear=input(defval = 2021, title ="End Year", type=input.integer)
endMonth=input(defval = 06, title ="End Month", type=input.integer)
endDate=input(defval = 03, title ="End Date", type=input.integer)

ema11=ema(close,11)
ema13=ema(close,13)
ema21=ema(close,21)

afterStartDate = true
//g=bar_index==1
//ath()=>
    //a=0.0
    //a:=g ? high : high>a[1] ? high:a[1]
    
//a = security(syminfo.tickerid, 'M', ath(),lookahead=barmerge.lookahead_on)

newHigh = (high > highest(high,504)[1])
//plot down arrows whenever it's a new high
plotshape(newHigh, style=shape.triangleup, location=location.abovebar, color=color.green, size=size.tiny)
b=highest(high,504)[1]
VarChk=((b-ema13)/b)*100
TrigLow = (low <= ema13) and (low >= ema21) and (VarChk <= 10)
plotshape(TrigLow, style=shape.triangleup, location=location.belowbar, color=color.white, size=size.tiny)
ExitPrice=(ema21 - (ema21*0.05))
DrawPrice=(b - (b*0.20))
stopprice=0.0
if (close <= ExitPrice)
    stopprice := ExitPrice
if (close <= DrawPrice)
    stopprice := DrawPrice

if (TrigLow and afterStartDate)
    strategy.entry("Long", strategy.long)

strategy.exit("exit","Long", stop=stopprice)
//beforeEndDate = (time < i_endTime)
beforeEndDate = (time >= timestamp(syminfo.timezone,endYear, endMonth, endDate, 0, 0))
if (beforeEndDate)
    strategy.close_all()

もっと