Эта стратегия генерирует торговые сигналы путем расчета суммы различий между ROC и SMA.
Стратегия сначала рассчитывает SMA с длиной l и ROC. Затем она рассчитывает разницу k между ценой закрытия и SMA. Далее она суммирует k за s дней и получает сумму. Когда сумма > 0, она идет длинной. Когда сумма < 0, она идет короткой.
В частности, в коде:
Вычислим SMA с длиной l, получим a.
Вычислим ROC с длиной l, получим r.
Вычислить разницу между ценой закрытия и SMA: k = закрытие - a.
Подсчитайте k для s дней, получаем сумму.
Если сумма>0, то длинная позиция; если сумма<0, то короткая позиция.
Выйти, когда сумма <0 для длинной и сумма>0 для короткой.
Ключ заключается в том, чтобы суммировать разницу k и использовать знак суммы для торговых сигналов. Когда k > 0 за последние дни, цена растет, так что идти долго. Когда k < 0, цена снижается, так что идти коротко.
Эта простая краткосрочная стратегия торговли имеет следующие преимущества:
Используемые показатели просты и понятны.
Фильтрация по разнице показателей может найти более точные торговые возможности.
Подведение итогов различий позволяет лучше определить краткосрочные тенденции.
Параметры l и s могут регулироваться для разных циклов.
Логика ясна и легко модифицировать и оптимизировать.
Высокая эффективность использования капитала при частом краткосрочном торговле.
Существуют также некоторые риски:
Высокие риски в краткосрочной торговле, возможны убытки.
Неправильные параметры могут привести к чрезмерной торговле или упущенным возможностям.
Трудно адаптироваться к изменению тренда, отсутствие остановки может привести к большим потерям.
Частые корректировки параметров в значительной степени зависят от опыта трейдера.
Высокая частота торговли может увеличить затраты на транзакции и скольжение.
Решения:
Правильно настраивайте параметры, чтобы снизить частоту торгов.
Добавьте индикаторы тренда для выявления перемен.
Оптимизировать стоп-лосс для контроля одиночных потерь.
Добавьте автоматическую оптимизацию параметров для снижения зависимости от опыта.
Оптимизировать модель исполнения заказов для снижения затрат на транзакции.
Стратегия может быть дополнительно оптимизирована в следующих аспектах:
Оптимизировать методы расчета параметров, такие как генетические алгоритмы, чтобы сделать параметры адаптивными.
Добавить больше показателей и фильтров для улучшения качества сигнала.
Улучшить стратегию стоп-лосса, например, отслеживать стоп-лосс.
Оптимизируйте стратегии управления деньгами, такие как контроль рисков.
Оптимизировать модель исполнения ордеров с последующим трендом, контролем скольжения и т.д.
Добавьте модули обратного тестирования и автоматической оптимизации.
Добавьте количественную оценку качества сигнала.
Благодаря этим оптимизациям эта стратегия может стать более полной, интеллектуальной, стабильной и управляемой краткосрочной торговой системой.
В целом, эта стратегия генерирует простые сигналы из индикаторов, с четкой логикой и простой реализацией. С дальнейшей оптимизацией параметров, стоп-лосса, управления деньгами и т. Д. Она может стать полезной количественной торговой стратегией. Но ни одна стратегия не является идеальной. Трейдеры все еще должны рационально применять ее на основе личных предпочтений риска.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=662, overlay=false) l = input(defval=170,title="Length for indicator") s = input(title="Length of summation",defval=18) a= sma(close,l) r=roc(close,l) k=close-a sum = 0 for i = 0 to s sum := sum + k[i] //plot(a,color=yellow,linewidth=2,transp=0) //bc = iff( sum > 0, white, teal) //plot(sum,color=bc, transp=20, linewidth=3,style=columns) //plot(sma(sum,3),color=white) //hline(0) inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na ////buyEntry = crossover(source, lower) ////sellEntry = crossunder(source, upper) if sum>0 strategy.entry("Long", strategy.long, oca_name="Long", comment="Long") else strategy.cancel(id="Long") if sum<0 strategy.entry("Short", strategy.short, oca_name="Short", comment="Short") else strategy.cancel(id="Short") strategy.initial_capital = 50000 plot(strategy.equity-strategy.initial_capital-strategy.closedtrades*.25/2, title="equity", color=red, linewidth=2) hline(0) //longCondition = sum>0 //exitlong = sum<0 //shortCondition = sum<0 //exitshort = sum>0 //strategy.entry(id = "Long", long=true, when = longCondition) //strategy.close(id = "Long", when = exitlong) //strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong) //strategy.entry(id = "Short", long=false, when = shortCondition) //strategy.close(id = "Short", when = exitshort) //strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)