Двухфакторная стратегия торговли

Автор:Чао Чжан, Дата: 2023-12-07 15:11:37
Тэги:

img

Обзор

Эта стратегия сочетает в себе 123 фактора обратного движения и осциллятора простых чисел для реализации количественной торговли, основанной на двойных факторах.

Принципы

Первая часть - стратегия 123 реверсии. Для определения пунктов входа и выхода она использует функцию реверсии цен в течение 2 дней. Когда цены растут непрерывно в течение 2 дней, а медленный стохастик ниже 50, это считается перепроданным, что дает сигнал покупки. Когда цены падают непрерывно в течение 2 дней, а быстрый стохастик выше 50, это считается перекупленным отскоком, что дает сигнал продажи.

Вторая часть - стратегия осциллятора простых чисел. Этот индикатор рассчитывает ближайшее простейшее число выше и ниже текущей цены в определенном диапазоне и выводит разницу от текущей цены. Положительное значение означает, что текущая цена находится рядом с потолком простых чисел, в то время как отрицательное значение означает, что она находится рядом с потолком простых чисел. Направление тренда определяется значениями разницы, которые сочетаются с 123 сигналами обратного движения для генерации окончательного торгового сигнала.

Правило слияния сигналов гласит: фактические торговые сигналы генерируются только тогда, когда две подстратегии дают сигналы в одном направлении, в противном случае не открывается новая позиция, когда сигналы конфликтуют.

Преимущества

Сочетая два фактора, эта стратегия учитывает как краткосрочные эффекты отмены, так и долгосрочные характеристики тенденции, чтобы сделать многоугольные рыночные суждения, повышая устойчивость к риску стратегии.

По сравнению с единой импульсной стратегией, эта стратегия может своевременно остановить потерю или обратить позицию во время внезапного падения цен, эффективно контролируя внутридневные риски с помощью коэффициента обращения.

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

Риски

Наибольший риск заключается в конфликте сигналов между этими двумя факторами. Если 123 отклонение показывает признаки перекупа/перепродажи и производит сигналы отклонения, в то время как осциллятор простых чисел показывает, что он все еще находится в тренде, прямое принятие отклонения сделок может привести к потерям.

Чтобы контролировать этот риск, добавляется дополнительная логика - фактические сделки генерируются только тогда, когда два сигнала выстраиваются в направлении.

Усовершенствования

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

  2. Оптимизировать процент толерантности осциллятора простых чисел для снижения шума торговли

  3. Добавление стратегий стоп-лосса для ограничения расширения односторонних потерь

  4. Добавить модуль размещения позиций для корректировки позиций для различных рыночных условий

  5. Добавление моделей машинного обучения для оценки надежности сигнала между двумя факторами, уменьшение конфликтов

Заключение

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


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 28/04/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// Determining market trends has become a science even though a high number or people 
// still believe it’s a gambling game. Mathematicians, technicians, brokers and investors 
// have worked together in developing quite several indicators to help them better understand 
// and forecast market movements.
//
// Developed by Modulus Financial Engineering Inc., the prime number oscillator indicates the 
// nearest prime number, be it at the top or the bottom of the series, and outlines the 
// difference between that prime number and the respective series.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

PrimeNumberOscillator(price, percent) =>
    res = 0.0
    res1 = 0.0
    res2 = 0.0
    for j = price to price + (price * percent / 100)
        res1 := j
	    for i = 2 to sqrt(price)
        	res1 := iff(j % i == 0 , 0, j)
            if res1 == 0 
                break
		if res1 > 0 
		    break
    for j = price to price - (price * percent / 100)
        res2 := j
	    for i = 2 to sqrt(price)
        	res2 := iff(j % i == 0 , 0, j)
            if res2 == 0 
                break
		if res2 > 0 
		    break
    res := iff(res1 - price < price - res2,  res1 - price, res2 - price)
    res := iff(res == 0, res[1], res)
    res
    
PNO(percent) =>
    pos = 0.0
    xPNO = PrimeNumberOscillator(close, percent)
    pos:= iff(xPNO > 0, 1,
           iff(xPNO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Prime Number Oscillator", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Prime Number Oscillator ----")
percent = input(5, minval=0.01, step = 0.01, title="Tolerance Percentage")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posPNO = PNO(percent)
pos = iff(posReversal123 == 1 and posPNO == 1 , 1,
	   iff(posReversal123 == -1 and posPNO == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1 ) 
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Больше