P信号逆転戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-29 14:44:56
タグ:

img

概要

P信号逆転戦略 (P-Signal reversal strategy) は,確率信号空間を構築するために統計パラメータとエラー関数に基づいて構築された定量的な取引戦略である.市場逆転点を捕捉するために,一連のKラインの極端値分布を追跡することによって,動的に取引信号を取得する.

戦略の原則

この戦略の核心指標はP信号で,移動平均値と標準偏差の統計パラメータを組み合わせ,ガウス誤差関数を通じて1〜1の範囲にマッピングして定量化された判断指標を形成する.P信号が正から負に逆転すると短くなり,負から正に逆転すると長くなり,逆転戦略論理を形成する.

戦略パラメータには,カーディナリティ,ΔErf,観察時間が含まれます.カーディナリティはサンプルサイズを制御し,ΔErfはエラー関数のデッドバンドを制御し,取引頻度を減らす.観察時間は戦略の開始時間を制御します.

利点分析

P信号逆転戦略の最大の利点は,統計パラメータの確率分布に基づいていることであり,市場の特徴的な点を効果的に判断し,逆転機会を把握することができる.単一の技術指標と比較して,より多くの市場情報を組み込み,より包括的で信頼性の高い判断を行う.

さらに,戦略のパラメータ化設計はよく規制されており,ユーザーが最適な組み合わせを見つけるために自分のニーズに応じてパラメータ空間を調整することができます.これは戦略の適応性と柔軟性を保証します.

リスク分析

P信号逆転戦略の主なリスクは,確率分布のパラメータに過度に依存しており,誤った判断を起こす異常データによって容易に影響を受けることである.また,逆転戦略のリスク・報酬比は一般的に低で,単一の利益は限られている.

サンプルサイズを増やすためにカーディナリティパラメータを増加させることで,データ異常の影響が軽減される.取引頻度を減らすためにΔErf範囲を適切に拡大することで,リスクを制御するのに役立ちます.

オプティマイゼーションの方向性

P信号逆転戦略は,次の側面で最適化することができる:

  1. 音量が急激に増加するなど異常信号をフィルタリングするために他の指標を組み込む.

  2. 判断の安定性を高めるため,複数の時間枠で信号を検証します.

  3. ストップ・ロスの戦略を増やして 単一の損失を減らす

  4. 最適な組み合わせを見つけ 収益性を向上させるためにパラメータを最適化します

  5. 機械学習を組み込み ダイナミックなパラメータ調整をします

概要

P信号逆転戦略は,柔軟なパラメータデザインとユーザーフレンドリーな確率分布に基づく定量的な取引枠組みを確立する. 市場の統計的特徴を効果的に判断し,逆転機会を把握する. 戦略は,多指標検証,ストップ損失最適化などの手段によって安定性と収益性をさらに向上させることができる. 定量的な技術を使用してアルゴリズム取引のための効率的かつ信頼性の高いパラダイムを提供します.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// **********************************************************************************************************
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0, 
     commission_type=strategy.commission.percent,
     commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0 / (1.0 + 0.5 * math.abs(x))
    nAns = 1.0 - nT * math.exp(-x * x - 1.26551223 + 
     nT * (1.00002368 + nT * (0.37409196 + nT * (0.09678418 + 
     nT * (-0.18628806 + nT * (0.27886807 + nT * (-1.13520398 + 
     nT * (1.48851587 + nT * (-0.82215223 + nT * 0.17087277)))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) =>
    nStDev = ta.stdev(ser, int)
    nSma = ta.sma(ser, int)
    nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting. 
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
    var Table = table.new(position=position.bottom_right, columns=3, rows=1, 
     frame_color=color.new(color.orange, 70), frame_width=1, 
     border_color=color.new(color.orange, 70), border_width=1)
    table.cell(table_id=Table, column=0, row=0, 
     text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size), 
     text_color=strategy.position_size > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=1, row=0, 
     text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'), 
     text_color=strategy.netprofit > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=2, row=0, 
     text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'), 
     text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.



もっと