Автоматическая торговля на основе торговой стратегии STOCH


Дата создания: 2023-09-28 11:38:44 Последнее изменение: 2023-09-28 11:38:44
Копировать: 0 Количество просмотров: 702
1
Подписаться
1617
Подписчики

Эта стратегия разработана на основе 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)