Стратегия баланса львиной трещины

Автор:Чао Чжан, Дата: 2023-11-02 16:55:00
Тэги:

img

Обзор

Стратегия баланса львиной трещины - это простая краткосрочная торговая стратегия, основанная на перекрестных пересечениях скользящих средних. Она в основном использует две скользящие средние - когда быстрый MA пересекает более медленного MA снизу, идите в длинный путь; когда быстрый MA пересекает ниже медленного MA сверху, закрывайте позицию.

Логика стратегии

Стратегия использует два скользящих средних: быстрый MA (smallMAPeriod) и медленный MA (bigMAPeriod).

В частности, стратегия сначала рассчитывает быструю MA (smallMA) и медленную MA (bigMA). Затем она рассчитывает линию покупки (buyMA), которая составляет (100 - percentBelowToBuy) % от медленной MA. Когда быстрая MA пересекает линию покупки вверх, идите на длинный; при достижении 1% прибыли или удержании 7 баров без прибыли, закрывайте позицию.

В целом, стратегия направлена на отслеживание "Львиной трещины" между МА для краткосрочной прибыли.

Анализ преимуществ

Стратегия имеет следующие преимущества:

  1. Простая концепция, легкая для понимания и реализации.

  2. Легкая обратная проверка. Стратегия напрямую использует встроенный в TradingView обратный тест без дополнительной реализации.

  3. TradingView может прямо показывать торговые сигналы и статистические данные на графиках.

  4. Контролируемый риск. Стратегия устанавливает условия получения прибыли и остановки убытков для эффективного контроля по убыткам в торговле.

  5. Гибкая настройка. Пользователи могут настраивать параметры MA и другие индикаторы в соответствии с различными продуктами и стилями торговли.

Анализ рисков

Стратегия также имеет следующие риски:

  1. Потенциально избыточные сигналы.

  2. Использование только перекресток MA игнорирует другие факторы, потенциально приводит к плохому качеству сигнала.

  3. Трудность оптимизации параметров.

  4. Простые стратегии двойного MA часто работают лучше в бэк-тестах, чем живая торговля.

  5. Сложный стоп-лосс: фиксированные уровни стоп-лосса могут не адаптироваться к изменяющимся рыночным условиям.

Руководство по оптимизации

Стратегия может быть улучшена в следующих аспектах:

  1. Добавьте другие фильтры, такие как объем и волатильность, чтобы избежать неэффективных сигналов во время консолидации.

  2. Включить тенденционный уклон, чтобы избежать торговли с противоположной тенденцией.

  3. Используйте машинное обучение для поиска оптимальных параметров, таких как последовательная оптимизация параметров или генетические алгоритмы.

  4. Улучшить стратегии стоп-лосса, такие как отслеживание стоп-лосса и адаптивный стоп-лосс для большей гибкости.

  5. Оптимизировать сроки входа с использованием других индикаторов для выявления более вероятных пунктов входа.

  6. Проведение количественных исследований и обратного тестирования для улучшения стабильности оптимизированных наборов параметров.

  7. Разработка автоматизированных торговых систем для систематической оптимизации и оценки комбинаций параметров.

Заключение

Стратегия Lion Fissure Balance является отличной стартовой стратегией для новичков. Она применяет простую логику двойного перекрестного MA и устанавливает правила получения прибыли и остановки потерь для улавливания краткосрочных колебаний цен. Стратегия проста в понимании и реализации и показывает хорошие результаты бэкстеста. Однако она страдает от трудностей оптимизации и сомнительной производительности в режиме реального времени. Мы можем улучшить стратегию, включив другие индикаторы, оптимизируя параметры и разрабатывая автоматизированные торговые системы. В целом, стратегия Lion Fissure Balance предоставляет отличную платформу обучения для начинающих количественную торговлю.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
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/
// © TraderHalai
// This script was born out of my quest to be able to display strategy back test statistics on charts to allow for easier backtesting on devices that do not natively support backtest engine (such as mobile phones, when I am backtesting from away from my computer). There are already a few good ones on TradingView, but most / many are too complicated for my needs.
//
//Found an excellent display backtest engine by 'The Art of Trading'. This script is a snippet of his hard work, with some very minor tweaks and changes. Much respect to the original author.
//
//Full credit to the original author of this script. It can be found here: https://www.tradingview.com/script/t776tkZv-Hammers-Stars-Strategy/?offer_id=10&aff_id=15271
//
// This script can be copied and airlifted onto existing strategy scripts of your own, and integrates out of the box without implementation of additional functions. I've also added Max Runup, Average Win and Average Loss per trade to the orignal script.
//
//Will look to add in more performance metrics in future, as I further develop this script.
//
//Feel free to use this display panel in your scripts and strategies.

//Thanks and enjoy! :)
//@version=5
// strategy("Strategy BackTest Display Statistics - TraderHalai", overlay=true, default_qty_value= 5, default_qty_type = strategy.percent_of_equity, initial_capital=10000,  commission_type=strategy.commission.percent, commission_value=0.1)

//DEMO basic strategy - Use your own strategy here -  Jaws Mean Reversion from my profile used here
source = input(title = "Source", defval = close)
smallMAPeriod = input(title = "Small Moving Average", defval = 2)
bigMAPeriod = input(title = "Big Moving Average", defval = 8)
percentBelowToBuy = input(title = "Percent below to buy %", defval = 1)

smallMA = ta.sma(source, smallMAPeriod)
bigMA =  ta.sma(source, bigMAPeriod) 
buyMA = ((100 - percentBelowToBuy) / 100) * ta.sma(source, bigMAPeriod)[0]

buy = ta.crossunder(smallMA, buyMA)
if(buy)
    strategy.entry("BUY", strategy.long)

if(strategy.openprofit >= strategy.position_avg_price * 0.01) // 1% profit target
    strategy.close("BUY")

if(ta.barssince(buy) >= 7) //Timed Exit, if you fail to make 1 percent in 7 candles.
    strategy.close("BUY")
    
///////////////////////////// --- BEGIN TESTER CODE --- ////////////////////////
// COPY below into your strategy to enable display
////////////////////////////////////////////////////////////////////////////////

// strategy.initial_capital = 50000
// // Declare performance tracking variables
// drawTester = input.bool(true, "Draw Tester")
// var balance = strategy.initial_capital
// var drawdown = 0.0
// var maxDrawdown = 0.0
// var maxBalance = 0.0
// var totalWins = 0
// var totalLoss = 0

// // Prepare stats table
// var table testTable = table.new(position.top_right, 5, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
//     _cellText = _title + "\n" + _value
//     table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)
    
// // Custom function to truncate (cut) excess decimal places
// truncate(_number, _decimalPlaces) =>
//     _factor = math.pow(10, _decimalPlaces)
//     int(_number * _factor) / _factor
    
// // Draw stats table
// var bgcolor = color.new(color.black,0)
// if drawTester
//     if barstate.islastconfirmedhistory
//         // Update table
//         dollarReturn = strategy.netprofit
//         f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
//         f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(truncate((strategy.wintrades/strategy.closedtrades)*100,2)) + "%", bgcolor, color.white)
//         f_fillCell(testTable, 1, 0, "Starting:", "$" + str.tostring(strategy.initial_capital), bgcolor, color.white)
//         f_fillCell(testTable, 1, 1, "Ending:", "$" + str.tostring(truncate(strategy.initial_capital + strategy.netprofit,2)), bgcolor, color.white)
//         f_fillCell(testTable, 2, 0, "Avg Win:", "$"+ str.tostring(truncate(strategy.grossprofit / strategy.wintrades, 2)), bgcolor, color.white)
//         f_fillCell(testTable, 2, 1, "Avg Loss:", "$"+ str.tostring(truncate(strategy.grossloss / strategy.losstrades, 2)), bgcolor, color.white)
//         f_fillCell(testTable, 3, 0, "Profit Factor:", str.tostring(truncate(strategy.grossprofit / strategy.grossloss,2)), strategy.grossprofit > strategy.grossloss ? color.green : color.red, color.white)
//         f_fillCell(testTable, 3, 1, "Max Runup:",  str.tostring(truncate(strategy.max_runup, 2 )), bgcolor, color.white)
//         f_fillCell(testTable, 4, 0, "Return:", (dollarReturn > 0 ? "+" : "") + str.tostring(truncate((dollarReturn / strategy.initial_capital)*100,2)) + "%", dollarReturn > 0 ? color.green : color.red, color.white)
//         f_fillCell(testTable, 4, 1, "Max DD:", str.tostring(truncate((strategy.max_drawdown / strategy.equity) * 100 ,2)) + "%", color.red, color.white)
// // --- END TESTER CODE --- ///////////////

Больше