Стратегия P-сигнала - это количественная стратегия торговли, построенная на основе статистических параметров и функций ошибки для построения вероятностного пространства сигналов.
Основным показателем этой стратегии является P-сигнал, который сочетает в себе статистические параметры скользящих средних и стандартных отклонений и отображает их в диапазоне от -1 до 1 через функцию ошибки Гаусса, чтобы сформировать количественный показатель суждения.
Параметры стратегии включают кардинальность, ΔErf и время наблюдения. Кардинальность контролирует размер выборки, ΔErf контролирует мертвую полосу функции ошибки для снижения частоты торговли. Время наблюдения контролирует время начала стратегии.
Наибольшее преимущество P-сигнальной стратегии обратного движения заключается в том, что она основана на вероятностных распределениях статистических параметров, которые могут эффективно оценивать характерные точки рынка и улавливать возможности обратного движения.
Кроме того, параметризированный дизайн стратегии хорошо регулируется, что позволяет пользователям регулировать пространство параметров в соответствии с их собственными потребностями, чтобы найти оптимальную комбинацию.
Основным риском стратегии P-сигнала является то, что она слишком сильно зависит от параметров распределения вероятности, на которое легко влияют аномальные данные, приводящие к ошибочным оценкам.
Увеличение параметра кардинальности для увеличения размера выборки может уменьшить влияние аномалий данных.
Стратегия обратного P-сигнала может быть оптимизирована в следующих аспектах:
Включите другие показатели, чтобы отфильтровать аномальные сигналы, такие как резкое увеличение объема.
Проверяйте сигналы в нескольких временных рамках, чтобы повысить стабильность суждения.
Увеличьте стратегии стоп-лосса для сокращения одиночных потерь.
Оптимизировать параметры, чтобы найти лучшую комбинацию и повысить рентабельность.
Включить машинное обучение для регулировки динамических параметров.
Стратегия 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.