Эта стратегия генерирует торговые сигналы, основанные на перекрестке простой скользящей средней и взвешенной скользящей средней, в сочетании со стоп-лосом и получением прибыли для управления позициями.
Основная логика заключается в расчете двух скользящих средних с разными периодами, один из которых является 9-дневной простой скользящей средней, а другой - 21-дневной взвешенной скользящей средней.
После получения сигнала, заказы размещаются в соответствии с установленными коэффициентами стоп-лосса и прибыли. Например, если коэффициент стоп-лосса установлен на 5%, то цена стоп-лосса будет установлена на 95% от цены входа. Если коэффициент прибыли составляет 5%, то цена прибыли будет установлена на 105% от цены входа. Это реализует слияние динамических факторов (движущийся средний кроссовер, определяющий время входа и выхода) и статических факторов (фиксированные коэффициенты стоп-лосса и прибыли).
Стратегия сочетает в себе динамические технические индикаторы и статические параметры стратегии, обладающие преимуществами как динамических, так и статических систем. Технические индикаторы могут динамически улавливать характеристики рынка, что полезно для улавливания тенденций. Настройки параметров обеспечивают стабильный контроль риска и доходности, что помогает уменьшить случайность в управлении позициями.
По сравнению с чистыми динамическими системами, эта стратегия более надежна в управлении позициями, что снижает влияние иррациональных решений. По сравнению с чистыми статическими системами, эта стратегия более гибкая в выборе входа, что лучше адаптируется к изменениям рынка. Поэтому эта стратегия имеет хорошую общую надежность и прибыльность.
Риски этой стратегии в основном исходят из двух аспектов. Во-первых, возможность неправильных сигналов от скользящих средних. Когда рынок ограничен диапазоном, скользящие средние могут иметь частые перекрестки, в результате чего стратегия может быть нарушена.
Во-вторых, риск того, что фиксированные стоп-лосс и прибыль не могут адаптироваться к экстремальным рыночным условиям.
Контрмеры: во-первых, избегать ключевых временных узлов, чтобы уменьшить вероятность ошибочных сигналов; во-вторых, включить адаптивные алгоритмы остановки потери в соответствии с волатильностью рынка и особыми событиями, позволяя регулировать остановку потери и прибыль с рынком.
Эта стратегия может быть оптимизирована из следующих аспектов:
Испытать различные комбинации параметров для определения оптимальных параметров;
Добавить условия фильтрации для предотвращения недействительных сигналов;
Применение адаптивных алгоритмов стоп-лосса для продвижения с рынком;
Включить другие показатели для оценки силы тренда, избегая рынков с ограниченным диапазоном;
Используйте методы машинного обучения для автоматической оптимизации параметров.
Благодаря тестированию параметров, добавлению фильтров, улучшению остановок, оценке тенденций и т.д. стабильность и рентабельность стратегии могут быть еще более повышены.
Стратегия успешно сочетает в себе динамические показатели и статические параметры, сбалансируя гибкость и надежность. По сравнению с чистыми динамическими и статическими стратегиями эта стратегия в целом работает лучше. Конечно, все еще есть место для оптимизации путем корректировки параметров, добавления фильтров, адаптивных остановок, машинного обучения и т. Д., Чтобы сделать стратегию более эффективной.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("WMA vs MMA Crossover Strategy with SL/TP", shorttitle="WMA_MMA_Cross_SL_TP", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Définition des périodes pour les moyennes mobiles wmaLength = input.int(9, title="WMA Length") mmaLength = input.int(21, title="MMA Length") // Paramètres de Stop Loss et Take Profit en pourcentage stopLossPercentage = input.float(5, title="Stop Loss (%)") / 100 takeProfitPercentage = input.float(5, title="Take Profit (%)") / 100 // Calcul des moyennes mobiles wmaValue = ta.wma(close, wmaLength) mmaValue = ta.sma(close, mmaLength) // Conditions pour les signaux d'achat et de vente buySignal = ta.crossover(wmaValue, mmaValue) sellSignal = ta.crossunder(wmaValue, mmaValue) // Génération des ordres en fonction des signaux if buySignal strategy.entry("Buy", strategy.long) strategy.exit("Exit Buy", "Buy", stop=strategy.position_avg_price * (1 - stopLossPercentage), limit=strategy.position_avg_price * (1 + takeProfitPercentage)) if sellSignal strategy.entry("Sell", strategy.short) strategy.exit("Exit Sell", "Sell", stop=strategy.position_avg_price * (1 + stopLossPercentage), limit=strategy.position_avg_price * (1 - takeProfitPercentage)) // Affichage des moyennes mobiles sur le graphique plot(wmaValue, color=color.blue, title="WMA") plot(mmaValue, color=color.red, title="MMA") // Affichage des signaux sur le graphique pour référence plotshape(series=buySignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=sellSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")