
この戦略は,主に移動平均線とブリン带を利用して市場の傾向と波動を捕捉する.この戦略では,3つの異なる移動平均線が使用されています:単純な移動平均線 (SMA),重力移動平均線 (WMA),インデックス移動平均線 (EMA).ブリン带は,価格の通路を設定し,上下軌道を分けて開場ポジションの平和のシグナルとして使用します.価格がブリン帯の上軌道を突破すると空きポジションが開け,下軌道を突破すると多ポジションが開けます.同時に,より広いブリン帯を損失のストップとして設定し,価格がブリン帯のポジションを突破すると平らげます.
マリーナ・パルフェノヴァ・スクール・プロジェクト・ロボットは,移動平均とブリン帯に基づく量化取引戦略である.それは,市場トレンドを捉え,ブリン帯のストップ・ローズ・ラインを制御しながら,利益を得るように試みている.戦略の論理は単純明快で,適用範囲は広い.市場特性に合わせてパラメータを柔軟に調整することができる.しかし,実用的なアプリケーションでは,依然として,震動市場,極端な状況,パラメータ最適化などの問題に注意し,資金管理とポジション管理のルールをさらに細かくする必要がある.全体的に,この戦略は,基礎の量化取引の枠組みとして機能し,その基礎の上に継続的に最適化され,改善され,より安定した取引効果を得ることができる.
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy ("Marina Parfenova School Project Bot", overlay = true)
sma(price, n) =>
result = 0.0
for i = 0 to n - 1
result := result + price [i] / n
result
wma(price, n) =>
result = 0.0
sum_weight = 0.0
weight = 0.0
for i = 0 to n - 1
weight := n - 1
result := result + price [i]*weight
sum_weight := sum_weight + weight
result/sum_weight
ema(price, n) =>
result = 0.0
alpha = 2/(n + 1)
prevResult = price
if (na(result[1]) == false)
prevResult := result[1]
result := alpha * price + (1 - alpha) * prevResult
/// Настройки
n_slow = input.int(50, "Период медленной скользящей средней", step=5)
n_fast = input.int(4, "Период быстрой скользящей средней")
n_deviation = input.int(30, "Период среднеквадратического отклонения", step=5)
k_deviation_open = input.float(1.2, "Коэффициент ширины коридора покупки", step=0.1)
k_deviation_close = input.float(1.6, "Коэффициент ширины коридора продажи", step=0.1)
// ----- Линии индикаторов -----
// Медленная скользящая
sma = sma(close, n_slow)
plot(sma, color=#d3d3d3)
// Линии Боллинджера, обозначающие коридор цены
bollinger_open = k_deviation_open * ta.stdev(close, n_deviation)
open_short_line = sma + bollinger_open
plot(open_short_line, color=#ec8383)
open_long_line = sma - bollinger_open
plot(open_long_line, color=#6dd86d)
bollinger_close = k_deviation_close * ta.stdev(close, n_deviation)
close_short_line = sma + bollinger_close
plot(close_short_line, color=#e3e3e3)
close_long_line = sma - bollinger_close
plot(close_long_line, color=#e3e3e3)
// Быстрая скользящая
ema = ema(close, n_fast)
plot(ema, color = color.aqua, linewidth = 2)
// ----- Сигналы для запуска стратегии -----
// если ema пересекает линию open_short сверху вниз - сигнал на создание ордера в short
if(ema[1] >= open_short_line[1] and ema < open_short_line)
strategy.entry("short", strategy.short)
// если ema пересекает линию open_long снизу вверх - сигнал на создание ордера в long
if(ema[1] <= open_long_line[1] and ema > open_long_line)
strategy.entry("long", strategy.long)
// если свеча пересекает верхнюю линию коридора продажи - закрываем все long-ордера
if (high >= close_short_line)
strategy.close("long")
// если свеча пересекает нижнюю линию коридора продажи - закрываем все short-ордера
if (low <= close_long_line)
strategy.close("short")