Эта стратегия разработана на основе STOCH, простой автоматической торговой системы. Эта стратегия подходит для таких рынков, как иностранные валюты, фондовые индексы, товары, а также может быть расширена на рынки акций и криптовалют.
Эта стратегия использует STOCH-индикатор, чтобы идентифицировать состояние перекупа и перепродажи, в сочетании с PIVOT-точкой, чтобы установить стоп-позицию для отслеживания тенденции. Когда STOCH-индикатор показывает перекупа и перепродажу, выполняется много операций по ликвидации; стоп-потери расположены вблизи PIVOT-точки в тот же день, что позволяет эффективно контролировать риск; частично стоп-стоп устанавливается для закрытия части позиций после определенной прибыли.
Стратегия использует STOCH индикатор с быстрой линией %K и медленной линией %D для реализации золотых форков и мертвых форков. Конкретная логика заключается в том, чтобы совершать много операций, когда линия%K нарушает линию%D снизу вверх; совершать пробелы, когда линия%K нарушает линию%D снизу вверх. Таким образом, можно захватить состояние перекупа и перепродажи.
Для контроля риска, долгое положение с большим стоп-подом, установленным вблизи наименьшей точки PIVOT в тот день, и пустое положение с пустым стоп-подом, установленным вблизи наивысшей точки PIVOT в тот день, может эффективно блокировать риск.
Частичная логика хранения заключается в том, что после открытия позиции при определенном уровне прибыли закрывается 50% позиции. Таким образом, оптимизируется эффективность использования средств.
В целом, это стратегия, которая является точкой, когда Capture перекупает, Control контролирует риски, Optimize использует средства эффективно. Можно сказать, что это органическое сочетание Capture, Control и Optimize.
Использование индикатора STOCH позволяет эффективно улавливать сверхпокупки и сверхпродажи, а также контролировать риск с помощью точки PIVOT, что позволяет полностью контролировать риск торговли.
Механизм частичного остановки позволяет оптимизировать эффективность использования капитала. Используется метод частичного ликвидации, который обеспечивает частичную прибыль, но также сохраняет последующее поле для прибыльности.
Параметры стратегии могут быть настроены, и трейдер может скорректировать параметры в соответствии с рыночными и рисковыми предпочтениями, чтобы обеспечить гибкое использование стратегии.
Логика стратегии очень проста, понятна, легко понять и освоить, подходит для использования различными трейдерами. Код интуитивно прост в чтении, легко модифицировать и обслуживать.
В качестве стратегии отслеживания тенденций, они могут оказаться в затруднительном положении и не принести прибыли.
STOCH может создавать ошибочные сигналы, вызывающие ненужные торговые действия. Следует соответствующим образом фильтровать сигналы, чтобы избежать бесполезной торговли.
Стоп-стоп находится близко к центральной точке дня, может быть слишком близко после прорыва, следует увеличить стоп-дистанцию.
Некоторые параметры стратегии, такие как длина периода, должны быть скорректированы в зависимости от различных рынков, иначе это может повлиять на эффективность стратегии.
Отзыв основан только на исторических данных, и не может гарантировать будущую производительность.
Автоматическая торговая система должна обеспечивать стабильность сервера, чтобы избежать проблем с подключением, которые могут привести к неисправности торгов.
Можно вводить фильтры на тренды, чтобы избежать слепой торговли, когда тренд неизвестен. Например, включить индикатор MA, чтобы определить направление тренда.
Можно добавить мониторинг объемов сделок, такие как отпуск, пустой отпуск и т. д., фильтровать ложные прорывы.
Можно корректировать параметры в зависимости от разных сортов и циклов, оптимизируя эффективность стратегии. Например, можно корректировать параметры STOCH.
Можно рассмотреть возможность включения алгоритмов машинного обучения, использования моделей обучения большим объемам данных, автоматической оптимизации параметров.
Можно установить убыточное соотношение, чтобы ввести контроль риска и избежать крупных убытков.
Дополнительные условия могут быть добавлены для фильтрации времени входа в рынок и повышения вероятности выигрыша стратегии. Например, введение базовой модели акций.
В целом, эта стратегия использует более простой и интуитивно понятный метод отслеживания тенденций, чтобы идентифицировать перекуп и перепродажу с помощью индикатора STOCH, а также включает в себя PIVOT-стоп-лосс для контроля риска, а также вводит частичные стопы для оптимизации эффективности капитала. Строение из трех уровней Capture, Control и Optimize создает более полную автоматическую торговую систему.
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
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/
// © Peter_O
//@version=4
// strategy(title="TradingView Alerts to MT4 MT5 - Forex, indices, commodities, stocks, crypto", commission_type=strategy.commission.cash_per_contract, commission_value=0.00003, overlay=false, default_qty_value=20000, initial_capital=1000)
//
// This script was created for educational purposes only.
// It is showing how to use Alerts-Straight-From-Strategies and
// dynamic variables in TradingView alerts.
// And how to auto-execute them in Forex, indices, commodities markets
//
// (This method will also work with stocks and crypto - anything your
// broker is offering via their MT4/MT5 platform).
TakeProfitLevel=input(400)
TakePartialProfitLevel=input(150)
// **** Entries logic **** {
periodK = input(13, title="K", minval=1)
periodD = input(3, title="D", minval=1)
smoothK = input(4, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
plot(k, title="%K", color=color.blue)
plot(d, title="%D", color=color.orange)
h0 = hline(80)
h1 = hline(20)
fill(h0, h1, color=color.purple, transp=75)
GoLong=crossover(k,d) and k<80 and year>2009
GoShort=crossunder(k,d) and k>20 and year>2009
AlertTest=open>close or open<close or open==close
// } End of entries logic
// **** Pivot-points and stop-loss logic **** {
piv_high = pivothigh(high,1,1)
piv_low = pivotlow(low,1,1)
var float stoploss_long=low
var float stoploss_short=high
pl=valuewhen(piv_low,piv_low,0)
ph=valuewhen(piv_high,piv_high,0)
if GoLong
stoploss_long := low<pl ? low : pl
if GoShort
stoploss_short := high>ph ? high : ph
// } End of Pivot-points and stop-loss logic
// **** Trade counter and partial closing mechanism **** {
var int trade_id=0
if GoLong or GoShort
trade_id:=trade_id+1
TakePartialProfitLong = barssince(GoLong)<barssince(GoShort) and crossover(high,(valuewhen(GoLong,close,0)+TakePartialProfitLevel*syminfo.mintick))
TakePartialProfitShort = barssince(GoLong)>barssince(GoShort) and crossunder(low,(valuewhen(GoShort,close,0)-TakePartialProfitLevel*syminfo.mintick))
// } End of Trade counter and partial closing mechanism
strategy.entry("Long", strategy.long, when=GoLong)
strategy.exit("XPartLong", from_entry="Long", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XLong", from_entry="Long", stop=stoploss_long, profit=TakeProfitLevel)
strategy.entry("Short", strategy.short, when=GoShort)
strategy.exit("XPartShort", from_entry="Short", qty_percent=50, profit=TakePartialProfitLevel)
strategy.exit("XShort", from_entry="Short", stop=stoploss_short, profit=TakeProfitLevel)
if GoLong
alertsyntax_golong='long slprice=' + tostring(stoploss_long) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
alert(message=alertsyntax_golong, freq=alert.freq_once_per_bar_close)
if GoShort
alertsyntax_goshort='short slprice=' + tostring(stoploss_short) + ' tradeid=' + tostring(trade_id) + ' tp=' + tostring(TakeProfitLevel)
alert(message=alertsyntax_goshort, freq=alert.freq_once_per_bar_close)
if TakePartialProfitLong
alertsyntax_closepartlong='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
alert(message=alertsyntax_closepartlong, freq=alert.freq_once_per_bar_close)
if TakePartialProfitShort
alertsyntax_closepartshort='closepart tradeid=' + tostring(trade_id) + ' part=0.5'
alert(message=alertsyntax_closepartshort, freq=alert.freq_once_per_bar_close)