Динамическая двусторонняя стратегия добавления позиций

Автор:Чао Чжан, Дата: 2023-11-27 11:33:11
Тэги:

img

Обзор

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

Принцип стратегии

Эта стратегия оценивает направление рынка на основе сигналов двух последовательных сильных свечей. В частности, она рассчитывает процент увеличения/уменьшения каждой свечи. Когда процент увеличения/уменьшения двух последовательных свечей превышает порог, установленный пользователем (например, 6%), она определяет, что направление сильное, и открывает длинную/короткую позицию в третьей свечи.

Долгое условие: цены закрытия двух последовательных свечников повышаются более чем на 6% по сравнению с предыдущей ценой закрытия

Короткое условие: цены закрытия двух последовательных свечей падают более чем на 6% по сравнению с предыдущей ценой закрытия

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

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

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

Это относительно стабильная и надежная двусторонняя стратегия торговли.

  1. Двусторонняя торговля может приносить прибыль, когда рынок поднимается и опускается, улучшая стабильность.

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

  3. Настройки стоп-прибыли и стоп-потери разумны, что полезно для контроля риска и ограничения потерь.

  4. Вспомогательные функции являются всеобъемлющими, такие как контроль времени, контроль максимальных потерь и т. Д. Они могут очень хорошо контролировать риски.

  5. Эта стратегия легко проверить и оптимизировать, поскольку логика проста и ясна.

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

Основными рисками этой стратегии являются:

  1. Мы можем корректировать параметр первого сигнала, чтобы обеспечить качество сигнала.

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

  3. Ирациональное поведение, вызванное внезапными событиями, может привести к огромным потерям, превышающим расстояние остановки.

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

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

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

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

  2. Оптимизировать стандарты стоп-прибыли и стоп-потери. Корректировать параметры на основе различных рынков, чтобы сделать соотношение риск-вознаграждение более разумным. Расстояние стоп-потери также может быть установлено как динамический стоп-потеря.

  3. Добавьте дополнительные модули управления рисками, например, максимальный ежедневный убыток, максимальный последовательный убыток и т. д., чтобы обеспечить эффективное и безопасное использование средств.

  4. Оптимизировать соотношение распределения средств, чтобы сделать распределение капитала двойной торговли более разумным, предотвращая получение прибыли без остановки потерь.

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

Резюме

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


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="GAVAD", shorttitle="GAVAD", overlay=false, initial_capital=36000)

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                     GAVAD %                        //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////
Sinal = input(6, title="Sinal", type=input.integer, minval=1, maxval=150)
//Objetivo = input(6, title="Objetivo", type=input.integer, minval=1, maxval=100)
Multip = input(10000, title="Sinal", type=input.integer, minval=1, maxval=100000)



//GavadEntrada1 = (close - low [1])/close[1]
//plot(GavadEntrada1, style=plot.style_line, linewidth=3, color=color.yellow)

//sombra
//DownOL = (low - open ) / open * -10000
//plot(DownOL, style=plot.style_area, linewidth=3, color=color.silver)


// imprime o GAVAD
GavadEntrada = (close - close [1])/close[1] * Multip
plot(GavadEntrada, style=plot.style_histogram, linewidth=3, color=color.purple)

//linha do Sinal
plot(Sinal, style=plot.style_line, linewidth=1, color=color.yellow)
//linha do Objetivo
//plot(Objetivo, style=plot.style_line, linewidth=1, color=color.white)

Fura1 = GavadEntrada [0] >= Sinal
Fura2 = GavadEntrada [1] >= Sinal

Alert = Fura1
plotshape(Alert, style=shape.circle,  location = location.top, color= color.yellow)

SinalON = Fura1 and Fura2
plotshape(SinalON, style=shape.circle,  location = location.bottom, color= color.green)



////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//              CONDIÇÕES DE OPERACAO                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////



Sell_Forte2 = SinalON
//plotshape(Sell_Forte2, style=shape.xcross, color=color.yellow, location=location.bottom)

//Call_Forte2 = SinalON
//plotshape(Call_Forte2, style=shape.xcross, color=color.yellow, location=location.top)


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    CALENDARIO                      //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

//052)
// trading view solicita que se ja informado data para gerar backtest a partir de tal data
//começa backtest do trading sistem em qual data ?

ano = input(2021, minval=1, title="Ano")
mes = input(1, minval=1, maxval=12, title="Mes")
dia = input(1, minval=1, maxval=30, title="Dia")
hora = input(0, minval=1, maxval=23, title="hora")
minuto = input(0, minval=1, maxval=59, title="minuto")
horaabertura = input(10, minval=1, maxval=23, title="hora Inicio Operacao Robo")
minutoabertura = input(40, minval=1, maxval=59, title="Minuto Encerra Tudo")
horaencerra = input(17, minval=1, maxval=23, title="hora Fechamento")
minutoencerra = input(50, minval=1, maxval=59, title="Minuto Encerra Novas Operacoes")
minutofinaliza = input(50, minval=1, maxval=59, title="Minuto Encerra Tudo")


//valida se o dia de hoje é posterior ao dia informado acima
Validadia = year >= ano and month >= mes and dayofmonth >= dia


//cria horario de abertura de negociaçao, considerar default 10 hs, pois os indicadores ja estarão corrigidos
abreloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaabertura
//and minute >= minutoabertura)


//cria horario de fechamento de todas as negociaçoes, considerar default 17:00 hs
//nenhuma ordem pode ser aberta depois dessa data e as abertas devem ser fechadas
fechaloja = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra
//and minute >= minutoencerra)

fechaloja2 = year >= ano and month >= mes and dayofmonth >= dia and hour >= horaencerra
//and minute >= minutofinaliza)


//valida horario de negociação, pra liberar as operacoes.
lojaaberta = abreloja == true and fechaloja == false and fechaloja2 == false


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//             GERENCIAMENTO DE RISCO                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

//seta meta mensal
meta = input(150000, "Meta de Lucro")
Contratos= input(5, "Contratos")

//seta tamanho do lote (ordem inicial-unica)
tamanhodolote = Contratos

//seta stop gain final em pontos (metade da barra anterior)
//gaintotal = input(30, "Gain")
gaintotal = input(3, "Gain")

//seta stop loss final em pontos
lossmaximo = input(8, "Loss")
//lossmaximo = (open- close)*100

////////////////////////////////////////////////////////
//                                                    //
//                     Checkbox                       //
//                                                    //
////////////////////////////////////////////////////////

//ativacomprasretorno = input(title="Ativar Compras Retorno", type=input.bool , defval=true)
//ativavendasretorno = input(title="Ativar Vendas Retorno", type=input.bool , defval=true)


////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                  COMPRA E VENDA                    //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

Tradenumber = strategy.closedtrades + 1
Batemeta = strategy.netprofit < meta

//COMPRA RETORNO
//longcondition2 = Validadia and Call_Forte2 and Batemeta


//strategy.entry("Comprar", strategy.long, tamanhodolote, when=longcondition2, comment="[Oper=" + tostring(Tradenumber) + "]win=" + tostring(strategy.wintrades) + " | Loss=" + tostring(strategy.losstrades))
//strategy.exit("Saida Compra", "Comprar", profit=gaintotal, loss=lossmaximo)
//if (CruzamentoFechaCallGG)
    //strategy.close(id="Comprar")
//if (EscapeFechaCall)
  // strategy.close(id="Comprar")   
   
    
//plotchar(longcondition2, char="C", location=location.bottom, color=color.lime, transp=0)
//alertcondition(longcondition2, "Comprar", "Compra Rápida!")

//VENDA RETORNO
Shortcondition2 = Validadia and Sell_Forte2 and Batemeta

strategy.entry("Vender", strategy.short, tamanhodolote, when=Shortcondition2)
strategy.exit("Fecha Venda", "Vender", profit=gaintotal, loss=lossmaximo)
//if (CruzamentoFechaSellGG)
   // strategy.close(id="Vender")
//if (EscapeFechaSell)
   // strategy.close(id="Comprar")  
//plotchar(CruzamentoFechaSellGG, char="Y", location=location.top, color=color.lime, transp=0) 

//plotchar(longcondition2, char="S", location=location.bottom, color=color.lime, transp=0)
//alertcondition(longcondition2, "Vender", "Venda Rápida!")

//fim do codigo

Больше