Dynamische Zwei-Wege-Positionsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-27 11:33:11
Tags:

img

Übersicht

Dies ist eine Strategie, die Positionen in beide Richtungen einnimmt, indem sie Signale von starken Durchbrüchen in beide Richtungen verwendet.

Strategieprinzip

Diese Strategie beurteilt die Marktrichtung basierend auf den Signalen von zwei aufeinanderfolgenden starken Kerzen. Insbesondere berechnet sie den Anstieg/Abnahmeprozentsatz jeder Kerze. Wenn der Anstieg/Abnahmeprozentsatz von zwei aufeinanderfolgenden Kerzen beide die vom Benutzer gesetzte Schwelle überschreiten (z. B. 6%), bestimmt sie, dass die Richtung stark ist, und eröffnet eine Long/Short-Position in der dritten Kerze.

Long Condition: Die Schlusskurse von zwei aufeinanderfolgenden Kerzen steigen im Vergleich zum vorherigen Schlusskurs um mehr als 6%

Short-Bedingung: Der Schlusskurs von zwei aufeinanderfolgenden Kerzen fällt im Vergleich zum vorherigen Schlusskurs um mehr als 6%

Nach Eröffnung von Positionen wird der Stop-Profit- und Stop-Loss-Abstand festgelegt, um Risiken zu kontrollieren.

Diese Strategie hat auch einige Hilfsfunktionen zur Risikokontrolle, wie z. B. die Erlaubnis, nur während bestimmter Zeiträume Positionen zu eröffnen, die Festlegung des maximalen Verlustbetrags usw.

Analyse der Vorteile

Dies ist eine relativ stabile und zuverlässige zweiseitige Handelsstrategie.

  1. Der zweiseitige Handel kann Gewinne erzielen, wenn der Markt nach oben und unten geht, wodurch die Stabilität verbessert wird.

  2. Die Bewertung des Trends anhand von zwei starken Signalen kann Lärm effektiv filtern und die Qualität der geöffneten Positionen verbessern.

  3. Die Einstellungen für Stop-Profit und Stop-Loss sind angemessen, was für die Risikokontrolle und die Begrenzung von Verlusten von Vorteil ist.

  4. Die Hilfsfunktionen sind umfassend, wie z. B. Zeitkontrolle, maximale Verlustkontrolle usw. Sie können Risiken sehr gut kontrollieren.

  5. Es ist leicht, diese Strategie zu testen und zu optimieren, da die Logik einfach und klar ist.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Wir können den Parameter des ersten Signals ordnungsgemäß anpassen, um die Qualität des Signals sicherzustellen.

  2. Die Wahrscheinlichkeit von drei aufeinanderfolgenden superstarken Kerzen ist relativ gering, was zu weniger Möglichkeiten zur Eröffnung von Positionen führen kann.

  3. Irrationale Verhaltensweisen, die durch plötzliche Ereignisse verursacht werden, können zu riesigen Verlusten führen, die die Stop-Loss-Distanz übersteigen.

  4. Für die Durchführung des Doppelrichtungshandels müssen wir auf die Probleme der Mittelzuweisung achten, sonst kann dies zu Gewinnen ohne Stop-Losses führen.

Optimierungsrichtlinien

Diese Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren Sie die Logik des ersten Signalurteils, um die Signalqualität zu verbessern. Mehr Faktoren können berücksichtigt werden, wie z. B. Änderung des Transaktionsvolumens, Volatilitätsrate usw.

  2. Optimieren Sie die Standards für Stop-Profit und Stop-Loss. Passen Sie die Parameter auf der Grundlage verschiedener Märkte an, um das Risiko-Rendite-Verhältnis vernünftiger zu machen. Die Stop-Loss-Distanz kann auch als dynamischer Stop-Loss festgelegt werden.

  3. Hinzufügen von mehr Risikokontrollmodulen, z. B. maximaler täglicher Verlust, maximaler aufeinanderfolgender Verlust usw., um eine effiziente und sichere Verwendung von Geldern zu gewährleisten.

  4. Optimierung der Mittelzuweisungsquote, um die Kapitalzuweisung des Dual-Direction-Handels vernünftiger zu gestalten und ohne Stop-Loss Gewinne zu erzielen.

  5. Einstellen verschiedener Parameterkombinationen für die Optimierung des Backtestings für verschiedene Handelsvarianten, um die Anpassungsfähigkeit zu verbessern.

Zusammenfassung

Diese Strategie ist eine relativ robuste zweiräumige Add-Positions-Strategie. Sie hat eine hohe Signalqualität und bestimmte Risikokontrolle-Fähigkeiten. Sie bietet auch großen Optimierungsraum, um die Gewinnstabilität weiter zu verbessern. Die Strategie eignet sich für mittelfristige Trending-Märkte und kann auch Chancen bei Marktkonsolidierungen nutzen.


/*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

Mehr