Dies ist eine Strategie, die Positionen in beide Richtungen einnimmt, indem sie Signale von starken Durchbrüchen in beide Richtungen verwendet.
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.
Dies ist eine relativ stabile und zuverlässige zweiseitige Handelsstrategie.
Der zweiseitige Handel kann Gewinne erzielen, wenn der Markt nach oben und unten geht, wodurch die Stabilität verbessert wird.
Die Bewertung des Trends anhand von zwei starken Signalen kann Lärm effektiv filtern und die Qualität der geöffneten Positionen verbessern.
Die Einstellungen für Stop-Profit und Stop-Loss sind angemessen, was für die Risikokontrolle und die Begrenzung von Verlusten von Vorteil ist.
Die Hilfsfunktionen sind umfassend, wie z. B. Zeitkontrolle, maximale Verlustkontrolle usw. Sie können Risiken sehr gut kontrollieren.
Es ist leicht, diese Strategie zu testen und zu optimieren, da die Logik einfach und klar ist.
Die wichtigsten Risiken dieser Strategie sind:
Wir können den Parameter des ersten Signals ordnungsgemäß anpassen, um die Qualität des Signals sicherzustellen.
Die Wahrscheinlichkeit von drei aufeinanderfolgenden superstarken Kerzen ist relativ gering, was zu weniger Möglichkeiten zur Eröffnung von Positionen führen kann.
Irrationale Verhaltensweisen, die durch plötzliche Ereignisse verursacht werden, können zu riesigen Verlusten führen, die die Stop-Loss-Distanz übersteigen.
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.
Diese Strategie kann in folgenden Bereichen weiter optimiert werden:
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.
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.
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.
Optimierung der Mittelzuweisungsquote, um die Kapitalzuweisung des Dual-Direction-Handels vernünftiger zu gestalten und ohne Stop-Loss Gewinne zu erzielen.
Einstellen verschiedener Parameterkombinationen für die Optimierung des Backtestings für verschiedene Handelsvarianten, um die Anpassungsfähigkeit zu verbessern.
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