この戦略は,迅速な移動平均線と遅い移動平均線の交差をベースに購入と売却の信号として,トレンドフォローの戦略の類である.移動平均線のパラメータを自動的に調整し,市場傾向に動的に適応することによって,収益を最大化する.
急速移動平均線と遅い移動平均線を計算する. 急速移動平均線のパラメータは21で,遅い移動平均線のパラメータは34で既定である.
急速移動平均線をゆっくり移動平均線に横切ると,上向きの動きを示し,買入信号を発する.
急速移動平均線の下をゆっくり移動平均線を通るときは,下向きを示し,出売信号を発する。
移動平均線の長さのパラメータを自動的に調整し,市場動向に動的に適応させ,トレンドを追跡して利益を得る.
戦略はシンプルでわかりやすく,理解しやすい.
市場動向を効率的に追跡し,収益を上げる可能性が高い.
パラメータを動的に調整することで,状況の変化に対応できます.
モバイル均線アルゴリズムを設定し,戦略の柔軟性を高めます.
ソフトウェアは,ソフトウェアの構成が自由で, 論理的,柔軟なアプリケーションで, 購入・販売が可能です.
移動均線戦略は,取引頻度や取引コストが高くなります.
市場が急激に波動すると,移動平均線が遅滞し,最適の買入・売却のタイミングを逃してしまう可能性があります.
移動平均線のパラメータと調整頻度を最適化する必要がある.不適切な配置は,戦略の失敗を引き起こす.
損失拡大を防ぐために,厳格な止損制御が必要である.
市場が逆転すると,大きな損失が生まれやすい.
移動平均のパラメータを最適化して,トレンドの変化を迅速に捉えるようにします.
ストップロズロジックが追加され,単一損失を厳格に管理する.
トレンド判断の指標を増やして,トレンドの逆転が損失を生じさせないようにする.
モバイル平均線調整戦略を最適化し,よりスマートで自動化します.
パラメータ最適化モジュールを追加し,機械学習方法を使用して自動的に最適化します.
この戦略の全体的な考え方は,明確で分かりやすく,異なる長さの快慢な移動平均線を配置して買い売りを完了する.これは典型的なトレンド追跡戦略の1つである.戦略の優点は,取引規則がシンプルで,容易に実現でき,トレンドを効果的に捕捉できるという点である.しかし,一定のリスクも存在し,パラメータ配置を継続的に最適化し,ストップペアロジクスを使って,戦略をより安定して信頼できるようにする必要がある.全体的に言えば,この戦略は,大きな改善の可能性を持ち,研究と応用を深める価値がある.
/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//
// @version=4
// © Ehsan Haghpanah, (ehsanha)
// Algorithmic Trading Research
//
// eha Moving Averages Strategy,
// A simple strategy based on crossing Moving Averages of
// different lengths (a fast moving average and slow one)
//
strategy(title = "eha Moving Averages Strategy", shorttitle = "eha MA Strategy", overlay = true)
//
// -- strategy parameter(s)
// moving averages parameter(s)
var _fastMA_len = input(title = "Fast MA Length", defval = 21, type = input.integer, minval = 1, step = 1)
var _slowMA_len = input(title = "Slow MA Length", defval = 34, type = input.integer, minval = 1, step = 1)
var _ma_algo_id = input(title = "MA Algorithm", defval = "SMA", options = ["SMA", "EMA", "WMA"])
// backtesting date and time range parameter(s)
var _startYear = input(defval = 2020, title = "Start Year", type = input.integer, minval = 1976)
var _startMonth = input(defval = 1, title = "Start Month", type = input.integer, minval = 1, maxval = 12)
var _startDay = input(defval = 1, title = "Start Day", type = input.integer, minval = 1, maxval = 31)
var _closeYear = input(defval = 2020, title = "Close Year", type = input.integer, minval = 1984)
var _closeMonth = input(defval = 9, title = "Close Month", type = input.integer, minval = 1, maxval = 12)
var _closeDay = input(defval = 1, title = "Close Day", type = input.integer, minval = 1, maxval = 31)
//
// -- function(s) and calculation(s)
// checks whether current time is in backtesting time range
start_t = timestamp(_startYear, _startMonth, _startDay, 00, 00) // backtesting range start time, (00, 00); (hour, minute)
close_t = timestamp(_closeYear, _closeMonth, _closeDay, 23, 59) // backtesting range close time, (23, 59); (hour, minute)
isInRange() => true
//
// calculates moving average based on provided algorithm, source and length
// alg : moving average algorithm
// len : length
// ser : series
calcMA(alg, len, ser) =>
(len == 0) ? ser : ((alg == "SMA") ? sma(ser, len) : ((alg == "EMA") ? ema(ser, len) : (alg == "WMA" ? wma(ser, len) : na)))
//
// -- strategy logic and calculation(s)
ma_fast = calcMA(_ma_algo_id, _fastMA_len, close)
ma_slow = calcMA(_ma_algo_id, _slowMA_len, close)
cross_ov = crossover (ma_fast, ma_slow) // returns true if fastMA crosses over slowMA
cross_un = crossunder(ma_fast, ma_slow) // returns true if slowMA crosses over fastMA
//
// -- strategy execution logic
// opens a long position whenever the time is in range and crosses over
strategy.entry("ID", comment = "-", long = strategy.long, when = isInRange() and cross_ov)
// closes the position whenever the time is in range and crosses under
strategy.close("ID", comment = "-", when = isInRange() and cross_un)
//
// -- drawing and visualization
co_fast = color.new(color.gray, 25)
co_slow = color.new(color.gray, 75)
// drawing moving average(s)
plot(ma_fast, color = co_fast, linewidth = 2, style = plot.style_line)
plot(ma_slow, color = co_slow, linewidth = 3, style = plot.style_line)