統合戦略の転換

作者: リン・ハーンチャオチャン,日付: 2023年11月3日17時26分53秒
タグ:

img

概要

この戦略の主な目的は,株式価格の動きで明らかな短期間の整合を検出し,その後の傾向を"整合"段階で形成された整合パターンに基づいて判断し,対応するロングまたはショートポジションを取ることです.

戦略の論理

  1. この戦略は,ストキャスト・オシレーター指標を使用して,株価が収縮状態に入っているかどうかを判断する.過剰購入または過剰売却ゾーンにおけるストキャスト・オシレーターの振動は価格収縮を示します.

  2. ストカスティックオシレーターが振動するとき,キャンドルストックの方向の変化は,トレンド逆転点を検出するために使用されます.キャンドルの変化が黒から白にすると,統合が終了し,ロングになります.白から黒にすると,統合が終了し,ショートになります.

  3. 入場後の利益目標とストップ損失は,トレーリングストップを使用して入場価格に基づいて動的に設定されます. 完全なポジションに使用される固定利益/損失,部分ポジションに使用されるトレーリングストップ.

  4. この戦略は,完全なポジションと部分的なポジションの取引の両方をサポートします.完全なポジションに使用される固定ポイント,部分的なポジションに使用されるトレーリングストップ.

  5. 取引時間は戦略で設定されています. 取引は,設定された時間にのみ許可されています.

利点分析

  1. ストカスティックオシレーターは 短期的な価格統合を正確に識別します

  2. 統合後の逆転点での取引は正確性を向上させる.

  3. 価格が好調に動いていると 利益が確保されます

  4. リスク優先に基づく完全および部分的なポジション取引をサポートする.

  5. 取引時間は不安定な期間に間違った取引を避ける.

リスク分析

  1. 誤った信号,欠落したエントリ,または早速エントリを与える傾向にあるストカスティックオシレーター

  2. キャンドルスタイク逆転は,トレンド変化を検出するのに正確ではないかもしれません.

  3. 価格変動の影響を受ければ 遅れが止まる

  4. 部分的なポジション取引ではリスクが高く 逆転で損失は拡大する可能性があります

  5. ストップ・ロストとトライリング・ストップのパラメータは 異なる楽器に調整する必要があります

  6. 大事な出来事が戦略の業績に影響を与えます

増進 の 機会

  1. 統合の検出の改善のためにストカスティックオシレーターパラメータを最適化する.

  2. キャンドルスタイク信号を確認するフィルターを追加し 精度を向上します

  3. より良い追跡のために 追跡停止アルゴリズムを改良する

  4. 単一の株での損失を制限するために,ポジションサイズルールを追加します.

  5. 主なイベントによる変動を回避するために,イベントスケジュールを組み込む.

  6. 傾向を把握するために部分位置モデルを改良する.

結論

統合後のターンアワウンド戦略は,ストーカスティックオシレーターを使用して短期間の統合を特定し,統合段階の後,トレンド逆転点で取引する.これは立派な勝利率を有し,トレンドでセグメント利益をロックすることができます.しかし,ストーカスティックは誤った信号に傾向があります.パラメータを最適化し,フィルターを追加することで精度を向上させることができます.さらに,トレーリングストップを最適化し,ポジションサイズを制御し,イベントリスクを回避することは焦点を求める分野です.全体的に,この戦略は参照モデルを提供しますが,個々の取引スタイルに基づいてライブ取引のための調整とリスク制御が必要です.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Cross', overlay=true, initial_capital=1000 )

// Creditos : Cleber.martinelli
////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                    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.int(2022, minval=1, title="Ano")
mes = input.int(1, minval=1, maxval=12, title="Mes")
dia = input.int(1, minval=1, maxval=31, title="Dia")
hora = input.int(1, minval=1, maxval=23, title="hora")
minuto = input.int(0, minval=0, maxval=59, title="minuto")
horaabertura = input.int(10, minval=1, maxval=23, title="hora Inicio Operacao Robo")
minutoabertura = input.int(40, minval=1, maxval=59, title="Minuto Encerra Tudo")
horaencerra = input.int(17, minval=1, maxval=23, title="hora Fechamento")
minutoencerra = input.int(50, minval=1, maxval=59, title="Minuto Encerra Novas Operacoes")
minutofinaliza = input.int(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

////////////////////////////////////////////////////////
//                                                    //
//                                                    //
//                 Codigo Operacional                 //
//                                                    //
//                                                    //
////////////////////////////////////////////////////////

// Inputs da Estratégia
pmax = input.int(90, minval=0, maxval=100, title="Estocastico Alvo - Para Short")
pmin = input.int(10, minval=0, maxval=100, title="Estocastico Alvo - Para Buy ")

parcial = input(title="Parcial ? ", defval=true)
p_gain = input.int(150, minval=0, maxval=1000, title="Pontos para Gain ")
p_loss = input.int(150, minval=0, maxval=1000, title="Pontos para Loss")
p_parcial = input.int(50, minval=0, maxval=100, title="Pontos para Parcial ")

// puxando os indicadores que usaremos 
estoc = ta.stoch(close,high,low,5)

if (estoc >=pmax and close < open)
    strategy.entry("Vende", strategy.short ,qty = 2)


if (estoc <=pmax and close > open)
    strategy.entry("Compra", strategy.long ,qty  =  2 )


pm_ativo = strategy.opentrades.entry_price(0)

if strategy.position_size > 0 and parcial// Posicionado na compra 
    if strategy.position_size == 2 // Mão cheia
        if close < pm_ativo - 100
            strategy.exit("Fecha Compra", "Compra", loss=p_loss , qty  =  2 )
        if close > pm_ativo + 50
            strategy.exit("Fecha Compra", "Compra", profit=p_gain , qty  =  1 )
    if strategy.position_size == 1// Mão cheia
        if close < pm_ativo 
            strategy.exit("Fecha Compra", "Compra", loss=0 , qty  =  1 )
        if close > pm_ativo + 100
            strategy.exit("Fecha Compra", "Compra", profit= p_gain * 1.5 , qty  =  1 )    
    
if strategy.position_size < 0 and parcial // Posicionado na Venda 
    if strategy.position_size == -2 // Mão cheia
        if close > pm_ativo - 100
            strategy.exit("Fecha Venda", "Vende", loss=p_loss , qty  =  2 )
        if close < pm_ativo + 50
            strategy.exit("Fecha Venda", "Vende", profit=p_gain , qty  =  1 )
    if strategy.position_size == -1// Mão cheia
        if close > pm_ativo 
            strategy.exit("Fecha Venda", "Vende", loss=0 , qty  =  1 )
        if close < pm_ativo + 100
            strategy.exit("Fecha Venda", "Vende", profit=p_gain*1.5 , qty  =  1 )    
    
if strategy.position_size > 0 and parcial == false // Sem Parcial 
    strategy.exit("Fecha Compra", "Compra", loss=p_loss , profit = p_gain , qty  =  2 )
if strategy.position_size < 0 and parcial == false // Sem Parcial 
    strategy.exit("Fecha Venda", "Vende", loss=p_loss , profit = p_gain , qty  =  2 )





















もっと