동적 양방향 마진 콜 전략


생성 날짜: 2023-11-27 11:33:11 마지막으로 수정됨: 2023-11-27 11:33:11
복사: 1 클릭수: 609
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 양방향 마진 콜 전략

개요

이것은 시장의 양방향 강렬한 돌파 신호를 이용한 양방향 포지션 개시의 전략이다. 그것은 동방향 강렬한 두 가지 K 라인이 나타나면 방향을 선택하여 포지션을 개시하고, 그 다음에는 스톱 스톱을 설정하여 위험 관리를 한다.

전략 원칙

이 전략은 두 개의 강력한 K 라인 신호를 기반으로 시장 방향을 판단한다. 구체적으로, 그것은 각 K 라인의 오락을 계산하고, 두 개의 연속적인 K 라인의 오락이 사용자가 설정한 문턱을 초과한 후 (예를 들어 6%), 그 방향을 강도 방향으로 판단하고, 세 번째 K 라인에서 상장/무익을 한다.

더 많은 조건: 2개의 연속 K 라인 종료 가격 전날 종료 가격 상승 6% 이상 공백 조건: 연속 2개의 K선 종결 가격 전날 종결 가격보다 6% 이상 하락

포지션을 개시한 뒤에는 위험을 제어하기 위해 스톱 스톱 손실 거리를 설정한다. 스톱 스톱 손실 거리는 사용자에 의해 입력되며, 스톱 손실 거리는 포지션 개시 가격의 일정한 배수 (예: 8배) 이다.

이 전략은 또한 위험을 통제하기 위한 몇 가지 보조 기능이 있습니다. 예를 들어, 특정 시간 동안만 포지션을 열고, 최대 손실 금액을 설정합니다.

우위 분석

이것은 안정적이고 신뢰할 수 있는 쌍방향 거래 전략이다. 주요 장점은 다음과 같다:

  1. 양방향 거래는 시장의 상승과 하락을 통해 수익을 창출하고 안정성을 높일 수 있습니다.

  2. 두 가지 강력한 신호 판단 경향을 기반으로, 잡음을 효과적으로 필터링 할 수 있으며, 들어온 위치 질이 높습니다.

  3. 스톱 스톱 손실 설정은 합리적이며, 위험 통제에 도움이 되며, 손실은 제한된다.

  4. 보조 기능이 완성되어 있어, 시간 제어, 최대 손실 제어 등과 같이, 위험을 잘 제어할 수 있다.

  5. 실제 현장에서 검증하고 최적화하기 쉽고, 전략 논리는 간단하고 명확하다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 시장이 흔들릴 때, stopwords 손실이 발생할 수 있다. 첫 번째 신호 판단 파라미터를 적절히 조정하여 신호 품질을 보장할 수 있다.

  2. 세 개의 초강력 K 라인을 만나게 될 확률이 낮고, 포지션 개설 기회는 낮을 수 있다. 적절히 파라미터를 낮출 수 있지만, 신호 품질을 밸런스해야 한다.

  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