この戦略は,ローレンツの分類法に基づく多時間枠取引システムで,ターゲット価格と動的ストップ・ロスの仕組みを組み合わせている.指数移動平均 ((EMA)) と分類指数 ((CI)) を使って市場動向を識別し,高時間枠と現在の時間枠で交差分析を行う.この戦略は,ターゲットパーセントを設定して利益を最大化するとともに,トレードシグナルの有効性を確認するために,回顧メカニズムを使用する.
この戦略の核心はローレンツの分類法であり,トリプル指数移動平均 ((EMA) と分類指数 ((CI) を組み合わせて取引信号を生成する.具体的ステップは以下の通りである.
戦略は,現在の時間枠とそれ以上の時間枠の両方でローレンツ線を計算して,多次元的な市場視点を提供する.取引シグナルは,価格とローレンツ線の交差に基づいており,リバースメカニズムで確認される.買いシグナルは,価格がローレンツ線を突破し,リバースメカニズムで最低価格がローレンツ線を下回ったときに誘発される.売るシグナルはその逆である.
戦略はまた,ユーザが設定したターゲットパーセントに基づいて退出点を決定するターゲット価格メカニズムを導入した.同時に,リスクを制御するために動的ストップロスを実現した.
多時間枠分析:現在の時間枠とより高い時間枠を組み合わせたローレンツ線によって,戦略はより全面的な市場トレンドを捉え,偽信号を減らすことができる.
ダイナミックなトレンド識別:ローレンツ分類は,市場の変化に迅速に適応し,敏捷なトレンド識別能力を提供します.
シグナル確認機構: 取引シグナルを確認するために回顧期を使用し,誤った取引の確率を効果的に低下させる.
目標価格の最適化: 目標パーセントを設定することで,戦略は有利な市場状況で利益を最大化することができる.
リスク管理: ダイナミック・ストップ・ローズ・メカニズムを導入し,各取引のリスクを効果的に管理する.
視覚化と統計:戦略は,トレーダーが分析し,戦略のパフォーマンスを最適化するために,直感的なグラフ表示と取引統計データを提供します.
柔軟性:複数の調整可能なパラメータにより,トレーダーは異なる市場条件と個人の好みに応じて最適化することができます.
パラメータ感性: 戦略の性能は,入力パラメータの選択に強く依存し,不適切なパラメータ設定は,過度取引や重要な機会を逃す可能性があります.
市場条件依存: 波動的な市場では,戦略が頻繁に偽信号を生じ,連續的な損失を引き起こす可能性がある.
スライドポイントリスク: 急速な波動のある市場では,実際の実行価格とシグナル価格の有意な差異がある可能性があります.
過度最適化のリスク:過去データに適したパラメータを過度調整すると,将来のリールディスクのパフォーマンスを影響する過度フィットが起こりうる.
技術的障害:複雑な技術指標の計算に依存するシステム障害やデータエラーが,誤った取引決定につながる可能性があります.
これらのリスクを減らすために,以下のようなことをお勧めします.
ダイナミックパラメータ調整:市場波動に応じてEMA長さと値を自動的に調整する自己適応パラメータ調整メカニズムを実現する.
フィルターを追加: フィルターとして追加の技術指標または基本指標を導入し,信号の質を向上させる.
機械学習統合:機械学習アルゴリズムを利用してパラメータ選択と信号生成プロセスを最適化する.
多種関連性分析: 多種関連性のデータを考慮して,より包括的な市場視点を提供する.
ニュースイベント統合: ニュースイベント分析機能を追加し,重要な経済データ発表の際に戦略行動を調整する.
波動性調整:市場の波動性の動向に合わせて目標パーセントとストップ・レベルを調整する
リスク管理の強化:より複雑なポジション管理とリスク管理策,例えば変動に基づくポジション調整を実現する.
これらの最適化方向は,戦略の適応性と安定性を向上させ,異なる市場条件下で良好なパフォーマンスを維持できるようにすることを目的としています.
ローレンツ分類の多時間枠目標戦略は,高度な技術分析方法とインテリジェントのリスク管理機構を組み合わせた総合的な取引システムである.多時間枠分析,動的トレンド識別,およびターゲット価格の最適化により,この戦略は,様々な市場条件下で安定した取引パフォーマンスを実現する潜在性がある.しかしながら,パラメータ感受性や市場依存性などの課題にも直面している.継続的な最適化とリスク管理により,トレーダーは,潜在的なリスクを効果的に制御しながら,この戦略の優位性を最大限に活用することができます.
/*backtest
start: 2023-07-31 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Lorenzian Classification Strategy with Target and Multi-Timeframe", overlay=true)
// Input parameters
length = input.int(5, "Lorenzian Length", minval=1)
threshold = input.float(1.0, "Threshold", step=0.1)
lookback = input.int(3, "Lookback Candles", minval=1, maxval=20)
targetPercentage = input.float(1.5, "Target Percentage (%)", step=0.1) // Target percentage for exit
higherTimeframe = input.timeframe("D", "Higher Timeframe") // Higher timeframe for multi-timeframe analysis
// Lorenzian Classification calculation for current timeframe
ema1 = ta.ema(hlc3, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
d = ema1 - ema2
ci = d / (0.015 * ta.ema(math.abs(d), length)) * 100
lorenzian = ema3 + ci
// Lorenzian Classification calculation for higher timeframe
hlc3_htf = request.security(syminfo.tickerid, higherTimeframe, (high + low + close)/3 )
ema1_htf = ta.ema(hlc3_htf, length)
ema2_htf = ta.ema(ema1_htf, length)
ema3_htf = ta.ema(ema2_htf, length)
d_htf = ema1_htf - ema2_htf
ci_htf = d_htf / (0.015 * ta.ema(math.abs(d_htf), length)) * 100
lorenzian_htf = ema3_htf + ci_htf
// Signal generation
crossUp = ta.crossover(close, lorenzian)
crossDown = ta.crossunder(close, lorenzian)
// Determine color based on price position relative to the line
lineColor = close > ema3 ? color.green : color.red
lineColorH = close > ema3_htf ? color.blue : color.red
// Plot the line with dynamic color
plot(ema3, color=lineColor, title="EMA3", linewidth=2)
plot(ema3_htf, color=lineColorH, title="EMA3 HTF", linewidth=2)
// Function to check for opposite movement
oppositeMove(isLong) =>
if isLong
lowest = ta.lowest(low, lookback)
lowest < lorenzian[lookback]
else
highest = ta.highest(high, lookback)
highest > lorenzian[lookback]
// Generate buy and sell signals
buySignal = crossUp and oppositeMove(true)
sellSignal = crossDown and oppositeMove(false)
// Calculate and manage target price
var float targetPrice = na
var float plotTargetPrice = na
var float entryPrice = na
// Variables to track trade outcomes
var int targetMet = 0
var int targetNotMet = 0
var int totalTrades = 0
if (buySignal)
strategy.entry("Buy", strategy.long)
entryPrice := close
targetPrice := entryPrice * (1 + targetPercentage/100)
plotTargetPrice := targetPrice
totalTrades := totalTrades + 1
if (sellSignal)
strategy.entry("Sell", strategy.short)
entryPrice := close
targetPrice := entryPrice * (1 - targetPercentage/100)
plotTargetPrice := targetPrice
totalTrades := totalTrades + 1
// Check if target price is met to exit
if (not na(targetPrice))
if (strategy.position_size > 0 and high >= targetPrice) // Long position exit condition
strategy.close("Buy")
targetPrice := na
entryPrice := na
targetMet := targetMet + 1
else if (strategy.position_size > 0 and low < entryPrice * (1 - targetPercentage/100)) // Stop loss for long
strategy.close("Buy")
targetPrice := na
entryPrice := na
targetNotMet := targetNotMet + 1
if (strategy.position_size < 0 and low <= targetPrice) // Short position exit condition
strategy.close("Sell")
targetPrice := na
entryPrice := na
targetMet := targetMet + 1
else if (strategy.position_size < 0 and high > entryPrice * (1 + targetPercentage/100)) // Stop loss for short
strategy.close("Sell")
targetPrice := na
entryPrice := na
targetNotMet := targetNotMet + 1
// Reset plotTargetPrice when position is closed
if (strategy.position_size == 0)
plotTargetPrice := na
// Plot signals and target price
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.purple, style=shape.triangledown, size=size.small)
plot(plotTargetPrice, color=color.yellow, title="Target Price", style=plot.style_circles, linewidth=2)
// Add alerts
alertcondition(buySignal, title="Buy Signal", message="Lorenzian Buy Signal")
alertcondition(sellSignal, title="Sell Signal", message="Lorenzian Sell Signal")
// Calculate success percentage
successPercentage = totalTrades > 0 ? (targetMet / totalTrades) * 100 : 0
// Create a table to display trade outcomes
var table tradeStats = table.new(position.top_right, 2, 3, border_width=1)
table.cell(tradeStats, 0, 0, "Targets Met", bgcolor=color.new(color.green, 30))
table.cell(tradeStats, 1, 0, "Targets Missed", bgcolor=color.new(color.red, 30))
table.cell(tradeStats, 0, 1, str.tostring(targetMet), bgcolor=color.new(color.green, 30))
table.cell(tradeStats, 1, 1, str.tostring(targetNotMet), bgcolor=color.new(color.red, 30))
table.cell(tradeStats, 0, 2, "Success Rate", bgcolor=color.new(color.blue, 30))
table.cell(tradeStats, 1, 2, str.tostring(successPercentage, "#.##") + "%", bgcolor=color.new(color.blue, 30))