ダイナミック・双方向追加位置戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-27 11:33:11
タグ:

img

概要

これは,両方向に強い突破のシグナルを使用して両方向にポジションをとる戦略です.同じ方向に2つの連続した強いキャンドルスタイクが現れた後にポジションを開く方向を選択し,リスク管理のためにストップ・プロフィートとストップ・ロスを設定します.

戦略原則

この戦略は,2つの連続した強いキャンドルスタイルの信号に基づいて市場の方向性を判断する.特に,各キャンドルスタイルの増加/減少パーセントを計算する. 2つの連続したキャンドルスタイルの増加/減少パーセントがユーザーによって設定された値 (例えば6%) を超えると,方向性が強いことを決定し,第3のキャンドルスタイルのロング/ショートポジションを開く.

ロングコンディション: 2つの連続したキャンドルスタイクの閉じる価格は,前の閉じる価格と比較して6%以上上昇する.

ショート条件: 2つの連続したキャンドルスタイクの閉じる価格は,以前の閉じる価格と比較して6%以上低下する.

ポジションを開いた後,リスクを制御するためにストップ・プロフィートとストップ・ロスト距離を設定します.ストップ・プロフィート距離はユーザーによって入力され,ストップ・ロスト距離は開通価格の倍数 (例えば8倍) です.

この戦略には,リスク管理のための補助機能もあります.例えば,特定の期間中にのみポジションを開くことを許可し,最大損失額を設定するなどです.

利点分析

これは比較的安定し信頼性の高い二方向取引戦略です.主な利点は以下の通りです.

  1. 双方向取引は 市場が上下するときに利益を得ることができ 安定性を高めます

  2. 2つの強い信号に基づいてトレンドを判断すると,ノイズを効果的にフィルタリングし,開かれたポジションの質を向上させることができます.

  3. ストップ・プロフィートとストップ・ロスの設定は合理的で,リスク管理に有利で損失を制限します.

  4. 時間制御,最大損失制御など,補助機能は包括的です. 彼らはリスクを非常にうまく制御することができます.

  5. この戦略をバックテストし最適化することは簡単です.論理は単純で明確です.

リスク分析

この戦略の主なリスクは,

  1. 市場の整合中にストップ損失を伴う傾向があります 信号の質を確保するために最初の信号のパラメータを適切に調整できます

  2. 3つの連続した超強いキャンドルスタイクの可能性は比較的小さいので,ポジションを開く機会が少なくなる可能性があります. 適切なパラメータを減らすことができますが,信号品質をバランスする必要があります.

  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

もっと