ダイナミックな双方向マージンコール戦略


作成日: 2023-11-27 11:33:11 最終変更日: 2023-11-27 11:33:11
コピー: 1 クリック数: 378
1
フォロー
1214
フォロワー

ダイナミックな双方向マージンコール戦略

概要

これは,市場の両方向の強い突破シグナルを利用して二方向のポジション開設を行う戦略である.それは,同方向の2つの強いK線が現れた後に方向を選択してポジションを開設し,その後,ストップ・ストップ・ロスを設定し,リスク管理を行う.

戦略原則

この戦略は,2つの強いK線信号に基づいて市場の方向を判断する.具体的には,各K線の落を計算し,連続した2つのK線の落がユーザが設定した値 (例えば6%) を超えた後に,その方向を強い方向として判断し,第3のK線でポジションを開く.

複数の条件:K線の2つの連続の閉盘価格が前日より6%以上上昇 空白条件:連続2つのK線の閉盘価格が前日閉盘価格より6%以上下落

ポジション開設後,リスク管理のためにストップ・ストラスト・距離を設定する. ストップ・ストラスト・距離は,ユーザが入力し,ストラスト・距離は,ポジション開設価格の一定の倍数 (例えば8倍) である.

この戦略には,特定の時間帯でのみポジションを開くこと,最大損失額を設定することなど,リスクを制御するための補助機能もあります.

優位分析

これは,より安定した信頼性の高い二方向取引戦略である.主な利点は:

  1. 市場が上昇する時も下降する時も,双方向取引を利用して利益を得ることができ,安定性を高めます.

  2. 2つの強い信号判断の傾向に基づいて,ノイズを効果的にフィルターし,入ったポジションの質が高くなります.

  3. ストップ・ストップ・ロスの設定は合理的で,リスク管理に有利で,損失は限られている.

  4. 時間制御,最大損失制御などの補助機能が完備しているため,リスクをコントロールできます.

  5. リアルタイムで検証し,最適化し,戦略ロジックはシンプルで明確である.

リスク分析

この戦略の主なリスクは

  1. 市場が揺れると,ストップワードの損失が起こりやすい.最初の信号判断パラメータを適切に調整して,信号の質を保証することができる.

  2. 3つの超強のK線に出会う確率は低いため,開口するチャンスは少ないだろう.適切なパラメータを低減することができるが,信号品質をバランスさせる必要がある.

  3. 突発的な出来事による非合理的な行動は,止損距離を超えた大きな損失を引き起こす可能性があります.これは,補助的な最大損失制限を制御する必要があります.

  4. 双方向取引を具体的に実施する際には,資金管理の問題に注意してください.資金の分配が不均等である場合,口座は損益しか得られない可能性があります.

最適化の方向

この戦略は,以下の点でさらに最適化できます.

  1. 最初の信号の判断論理を最適化し,信号の質を向上させる.取引量変化,波動率など,さらに多くの要素を加えるのを考慮することができる.

  2. 最適化ストップ・ストップ・損失基準 異なる市場に応じてパラメータを調整して,損失比を合理的にすることができる ストップ・損失距離も動的ストップ・損失として設定できる

  3. リスク管理モジュールを追加する.例えば,最大1日損失,最大連續損失など.資金の安全かつ効率的な使用を保証する.

  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