
この戦略は,日線レベルの海アシーク線をベースに,異なる周期レベルの動力の分析と組み合わせて,動的に現在の株価の背後にある支柱力を特定し,それによって,ポジションの構築とポジションのタイミングを判断する.
異なる周期層の海アヒK線の収束価格を計算する.これは後続動能計算の基礎である.
月線と日線の開盤価格と,異なる歴史周期の閉盤価格の上昇・下落をそれぞれ計算する。これは,現在の株式価格の相対的な歴史価格の動力の強さを反映する。
月線と日線の動能落をそれぞれ平均して,部分的なノイズをフィルターして,安定した月線と日線動能指標が得られる.
平均動力の上昇・下落から,現在の株価が反映する市場の支給力を計算することができる.すなわち,市場の変動の影響を取り除いた価格である.この価格は,現在の実際の株価の動力の値として見ることができる.
閉盘価格が動能値より高いときは,毎月多額の投資を行う.閉盘価格が動能値より低いときは,平仓止損を行う.
この戦略の最大の利点は,単に株価を追うのではなく,株価の背後にある動力に基づいて実際のサポート力を計算し,そうしてポジションを立て,ストープをすることにある.これは,振動的な状況のノイズを効果的にフィルターし,安定した上昇の機会をロックすることができます.
また,戦略がベースとするデータはすべて海アシヒK線である。この特殊なK線は,それ自体で結合周期に過度に依存する問題を軽減できる。したがって,戦略の安定性は他のK線戦略よりも優れている。
この戦略の最大のリスクは,動能計算は歴史的価格に基づいていることである. 会社の基本面や市場状況が大きく変化した場合,歴史的価格の代表性は低下し,ポジション構築とストップ損失判断の偏差を引き起こす.
さらに,戦略は月日周期を使用している.これは,戦略のリアルタイム性が高くなく,市場の急激な変化に迅速に反応することができないことを意味する.これは,市場の突破時に損失を止めるリスクをもたらす.
これらのリスクを低減するために,より高周波のデータ,および会社の基本面に関するリアルタイムフィードバックの導入を考慮することもできます.または,他のより主観的な取引信号と組み合わせて,その承認と最適化を行うこともできます.
この戦略をさらに改善するには,以下のポイントを考慮する必要があります.
海阿希K線自体は,重量配置の調整などによりさらに最適化できる.
より多くの異なる周期のデータを追加し,指数平均の動能評価機構を構築し,安定性を向上させる.
戦略のリアルさを高めるため,日数分線などの高周波数データを導入する.
業績発表や再編の噂などと組み合わせて,対動能計算は,会社の基本面へのフィードバックを集めます.
貯蔵庫を毎月建設する上で,日数や週数の増減や増積の仕組みを考慮することができる.
この戦略は,全体的に非常に安定しており,動能トラッキングの方法によってリスクを効果的に制御しています.その最大の優点は,株式価格の背後にある動力の量を使用して,実際の状況を判断することであり,単に株式価格自身を追跡することではありません.次のステップは,より高い頻度で,より情報豊富なデータを導入することにより,この戦略をさらに最適化して,市場機会をよりうまく把握できるようになります.
/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FrancoPassuello
//@version=5
strategy("Heiken Ashi ADM", overlay=true)
haClose = (open + high + low + close) / 4
// prevHaOpen = line.new(na, na, na, na, width = 1)
haOpen = (open[1] + close[1]) / 2
// line.set_xy1(prevHaOpen, bar_index[1], nz(haOpen[1]))
// line.set_xy2(prevHaOpen, bar_index, haClose[1])
[monopen, _1monopen, _2monopen, _3monopen, _4monopen, _5monopen, _6monopen] = request.security(syminfo.tickerid, "M", [haOpen, haOpen[1], haOpen[2], haOpen[3], haOpen[4], haOpen[5], haOpen[6]] , barmerge.gaps_off, barmerge.lookahead_on)
[monclose, _1monclose, _3monclose, _6monclose] = request.security(syminfo.tickerid, "M", [haClose, haClose[1], haClose[3], haClose[6]] , barmerge.gaps_off, barmerge.lookahead_on)
[dayclose1, _21dayclose, _63dayclose, _126dayclose, dayclose] = request.security(syminfo.tickerid, "1D", [haClose[1], haClose[21], haClose[63], haClose[126], haClose], barmerge.gaps_off, barmerge.lookahead_on)
[dayopen1, _21dayopen, _63dayopen, _126dayopen] = request.security(syminfo.tickerid, "1D", [haOpen[1], haOpen[21], haOpen[63], haOpen[126]], barmerge.gaps_off, barmerge.lookahead_on)
get_rate_of_return(price1, price2) =>
return_ = (price1/price2 -1)*100
return_
m0 = get_rate_of_return(monclose, monopen)
m1 = get_rate_of_return(_1monclose, _1monopen)
m2 = get_rate_of_return(monclose, _2monopen)
m3 = get_rate_of_return(_1monclose, _3monopen)
m4 = get_rate_of_return(monclose, _4monopen)
m5 = get_rate_of_return(monclose, _5monopen)
m6 = get_rate_of_return(_1monclose, _6monopen)
MS = (m1 + m3 + m6)/100
CS = (m0 + m2 + m5)/100
d1 = get_rate_of_return(dayclose1, _21dayopen)
d2 = get_rate_of_return(dayclose1, _63dayopen)
d3 = get_rate_of_return(dayclose1, _126dayopen)
DS = (d1 + d2 + d3)/100
//Last (DAILY)
lastd_s_avg1 = DS/3
lastd_Approximate1 = dayclose1*(1-lastd_s_avg1)
last_approx1_d21 = lastd_Approximate1 / _21dayopen-1
last_approx1_d63 = lastd_Approximate1 / _63dayopen-1
last_approx1_d126 = lastd_Approximate1 / _126dayopen-1
lastd_s_avg2 = (last_approx1_d21 + last_approx1_d63 + last_approx1_d126) / 3
lastd_approximate2 = (dayclose1)*(1-(lastd_s_avg1 + lastd_s_avg2))
lastd_price = lastd_approximate2
//plot(lastd_price,color = color.rgb(255, 255, 255, 14), title = "Last momentum threshold")
//Last
last_s_avg1 = MS/3
last_Approximate1 = _1monclose*(1-last_s_avg1)
last_approx1_m1 = last_Approximate1 / _1monopen-1
last_approx1_m3 = last_Approximate1 / _3monopen-1
last_approx1_m6 = last_Approximate1 / _6monopen-1
last_s_avg2 = (last_approx1_m1 + last_approx1_m3 + last_approx1_m6) / 3
last_approximate2 = (_1monclose)*(1-(last_s_avg1 + last_s_avg2))
last_price = last_approximate2
Scoring_price = _1monclose*(1-CS)
plot(last_price,color = color.rgb(255, 255, 255, 14), title = "Last momentum threshold")
//plot(Scoring_price,color = color.rgb(234, 0, 255, 14), title = "Last momentum threshold")
//Long based on month close and being the first trade of the month.
var int lastClosedMonth = -1
limit_longCondition = _1monclose > last_approximate2 and (lastClosedMonth == -1 or month(time) != lastClosedMonth)
// Long based on day close and being the first trade of the month.
limit_Dlongcondition = dayclose1 > lastd_approximate2 and (lastClosedMonth == -1 or month(time) != lastClosedMonth)
// Close trade based on day close
DCloseLongCondition = dayclose1<lastd_approximate2
//Old standard Trading rules
longCondition = _1monclose > Scoring_price
MCloseLongCondition = _1monclose<Scoring_price
shortCondition = CS < 0
if (longCondition)
strategy.entry("Long", strategy.long)
if (strategy.position_size > 0 and MCloseLongCondition)
strategy.close("Long")
lastClosedMonth := month(time)