
Стратегия квантовой торговли, основанная на искусственной нейронной сети (ANN), является высокочастотной торговой системой, предназначенной для оптимизации временных рамок на уровне 1 секунды. Стратегия использует нейронную сеть для анализа кратковременных ценовых колебаний, прогнозирования направления цены с помощью алгоритмов перемещения вперед и оптимизации торговых решений в сочетании с фильтрацией колебаний и контролем времени сеанса.
Стратегия использует трехслойную архитектуру нейронной сети для обработки данных о ценовых разницах с помощью алгоритмов передового распространения:
Входный уровень (L0): Процентная разница между принятием текущего OHLC4 (средняя цена запуска) и исторического OHLC4 (дифолтная 15-секундная временная рамка) в качестве одного входного нейрона.
Первый скрытый слой (L1): Содержит 5 нейронов, использующих двойную прямоугольную ((tanh) как функцию активации для нелинейного преобразования входных данных. Каждый нейрон имеет предварительно обученные веса, используемые для захвата различий в ценах.
Второй скрытый слой (L2): содержит 33 нейронов, также используя функцию активации tanh, для дальнейшей обработки вывода первого скрытого слоя с помощью более сложной матрицы весов.
Выходный уровень (L3): Одиночный нейрон выводит окончательный прогнозный сигнал, значение которого переворачивается для коррекции направления сигнала.
Логика транзакции развивается вокруг выходной величины нейронной сети ((L3_0)):
Также в стратегии реализуется тройной механизм фильтрации:
Высокая точность прогнозированияМногоуровневая структура нейронной сети позволяет улавливать сложные нелинейные связи в ценовых движениях, что сложно сделать с помощью традиционных технических индикаторов. Особенно в высокочастотных условиях эта структура может распознавать краткосрочные ценовые модели и предоставлять более точные входные и выходные сигналы.
Отличный коэффициент риска и прибыли: Стратегия достигла коэффициента прибыли 3.754, что означает, что сумма прибыльных сделок в 3.754 раза превышает сумму убыточных сделок, что является очень хорошим показателем в количественной стратегии.
Гибкое пространство для оптимизации параметров: Стратегия предоставляет множество регулируемых параметров, включая вход/выходные пороги, длину охлаждающего периода, временные рамки ссылки и минимальные требования к волатильности, что позволяет трейдерам оптимизировать в зависимости от различных рыночных условий и типов торгов.
Множественная фильтрацияС помощью трехкратной фильтрации, включающей в себя период охлаждения, волатильность и время торгов, стратегия эффективно снижает количество ненужных сделок и ложных сигналов, повышая качество торгов.
Приспособность к высокочастотной торговлеОптимизация для 1-секундных временных рамок, позволяющая использовать высокочастотные торговые возможности для получения прибыли от краткосрочных колебаний цен.
Низкая задержка реализации: Четкая и эффективная структура кода стратегии, часть нейронной сети использует прямой расчет предварительных весов, без необходимости реальной тренировки, чтобы обеспечить низкую задержку выполнения в высокочастотных средах.
Риск переизмеримости: Модель нейронной сети содержит большое количество заранее заданных весовых параметров, существует риск перенастройки на исторические данные. Это может привести к тому, что стратегия будет работать не так хорошо в ретроспективных сделках, особенно при значительных изменениях рыночных условий. Методы реагирования включают: регулярную переподготовку нейронной сети, проверку с использованием данных с более длительным периодом времени, а также внедрение надежных мер управления рисками.
Параметр Чувствительность: эффективность стратегии сильно зависит от множества параметров, таких как вход/выходный порог, длина охлаждающего периода и т. д.; незначительные изменения параметров могут привести к значительным колебаниям в эффективности стратегии; рекомендуется найти стабильную комбинацию параметров с помощью сканирования параметров и пошагового тестирования и избегать чрезмерной оптимизации;
Риски высокочастотных сделокНа 1-секундных временных рамках, затраты на торговлю (например, расхождение и скольжение) могут существенно влиять на прибыльность стратегии. Эти затраты должны быть полностью учтены перед торговлей в реальном времени и имитировать реальные условия затрат на торговлю в обратной связи.
Технологические вызовы: высокочастотная стратегия требует, чтобы торговая система имела очень низкую задержку и высокую надежность. Любая задержка сети, задержка данных или задержка исполнения может привести к сбою стратегии.
Риск рыночных колебанийВ экстремальных рыночных условиях (например, внезапные новости или истощение ликвидности) модели нейронной сети могут не быть точными в прогнозировании ценовых движений, что приводит к значительным потерям. Рекомендуется установить стоп-стоп и максимальные суточные лимиты потерь и приостановить действие стратегии во время экстремальных колебаний.
Оптимизация архитектуры нейронных сетей:
Механизм коррекции динамических параметров:
Интегрированная прогнозная структура:
Усиление управления рисками:
Изучение и адаптация в реальном времени:
Стратегия количественной торговли, оптимизирующей колебания цен в нейронных сетях, представляет собой передовую практику современной количественной торговли и успешно применяет технологию искусственной нейронной сети в области высокочастотной торговли. Благодаря тщательно разработанной многоуровневой структуре нейронной сети, стратегия может улавливать тонкие модели в краткосрочных изменениях цен и повышать качество торговли с помощью множества механизмов фильтрации.
3.754 рентабельность свидетельствует о превосходной эффективности этой стратегии в тестовой среде, но при практическом применении следует осторожно учитывать риски, связанные с чрезмерной совместимостью, чувствительностью к параметрам и высокой частотой торговли. Стратегия имеет потенциал для долгосрочной конкурентоспособности в конкурентоспособной области количественных торгов путем постоянной оптимизации архитектуры нейронной сети, реализации динамической корректировки параметров и усиления управления рисками.
Ключевой фактор успеха стратегии заключается в сочетании сложных технологий нейронных сетей с практической логикой торговли, используя как прогнозирующие возможности машинного обучения, так и возможности реальной торговли. Для опытных количественных трейдеров это обеспечивает масштабируемую структуру, которая может быть дополнительно настроена и оптимизирована в соответствии с различными рынками и личными предпочтениями в отношении риска.
/*backtest
start: 2024-06-23 00:00:00
end: 2025-06-21 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("ANN Strategy v2 (Optimized for 1s)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
entryThreshold = input.float(0.003, title="Entry Threshold")
exitThreshold = input.float(0.001, title="Exit Threshold")
cooldownBars = input.int(60, title="Cooldown (bars)") // 60 seconds cooldown
timeframe = input.timeframe("1", title="Reference Timeframe") // 1-minute diff reference
minVolatility = input.float(0.02, title="Min ATR (Volatility Filter)")
useSession = input.bool(true, title="Use Session Filter")
// === UTILITY FUNCTIONS ===
getDiff() =>
prev = request.security(syminfo.tickerid, timeframe, ohlc4[1])
now = ohlc4
(now - prev) / prev
linear(v) => v
tanh(v) => (math.exp(v) - math.exp(-v)) / (math.exp(v) + math.exp(-v))
// === ANN FORWARD PROPAGATION ===
l0_0 = linear(getDiff())
l1 = array.new_float()
array.push(l1, tanh(l0_0 * 0.8446488687))
array.push(l1, tanh(l0_0 * -0.5674069006))
array.push(l1, tanh(l0_0 * 0.8676766445))
array.push(l1, tanh(l0_0 * 0.5200611473))
array.push(l1, tanh(l0_0 * -0.2215499554))
// === Layer 2 weights ===
w2 = array.from( 0.3341657935, -2.0060003664, 0.8606354375, 0.9184846912, -0.8531172267, -0.0394076437, -0.4720374911, 0.2900968524, 1.0653326022, 0.3000188806, -0.559307785, -0.9353655177, 1.2133832962, 0.1952686024, 0.8552068166, -0.4293220754, 0.8484259409, -0.7154087313, 0.1102971055, 0.2279392724, 0.9111779155, 0.2801691115, 0.0039982713, -0.5648257117, 0.3281705155, -0.2963954503, 0.4046532178, 0.2460580977, 0.6608675819, -0.8732022547, 0.8810811932, 0.6903706878, -0.5953059103, -0.3084040686, -0.4038498853, -0.5687101164, 0.2736758588, -0.2217360382, 0.8742950972, 0.2997583987, 0.0708459913, 0.8221730616, -0.7213265567, -0.3810462836, 0.0503867753, 0.4880140595, 0.9466627196, 1.0163097961, -0.9500386514, -0.6341709382, 1.3402207103, 0.0013395288, 3.4813009133, -0.8636814677, 41.3171047132, 1.2388217292, -0.6520886912, 0.3508321737, 0.6640560714, 1.5936220597, -0.1800525171, -0.2620989752, 0.056675277, -0.5045395315, 0.2732553554, -0.7776331454, 0.1895231137, 0.5384918862, 0.093711904, -0.3725627758, -0.3181583022, 0.2467979854, 0.4341718676, -0.7277619935, 0.1799381758, -0.5558227731, 0.3666152536, 0.1538243225, -0.8915928174, -0.7659355684, 0.6111516061, -0.5459495224, -0.5724238425, -0.8553500765, -0.8696190472, 0.6843667454, 0.408652181, -0.8830470112, -0.8602324935, 0.1135462621, -0.1569048216, -1.4643247888, 0.5557152813, 1.0482791924, 1.4523116833, 0.5207514017, -0.2734444192, -0.3328660936, -0.7941515963, -0.3536051491, -0.4097807954, 0.3198619826, 0.461681627, -0.1135575498, 0.7103339851, -0.8725014237, -1.0312091401, 0.2267643037, -0.6814258121, 0.7524828703, -0.3986855003, 0.4962556631, -0.7330224516, 0.7355772164, 0.3180141739, -1.083080442, 1.8752543187, 0.3623326265, -0.348145191, 0.1977935038, -0.0291290625, 0.0612906199, 0.1219696687, -1.0273685429, 0.0872219768, 0.931791094, -0.313753684, -0.3028724837, 0.7387076712, 0.3806140391, 0.2630619402, -1.9827996702, -0.7741413496, 0.1262957444, 0.2248777886, -0.2666322362, -1.124654664, 0.7288282621, -0.1384289204, 0.2395966188, 0.6611845175, 0.0466048937, -0.1980999993, 0.8152350927, 0.0032723211, -0.3150344751, 0.1391754608, 0.5462816249, -0.7952302364, -0.7520712378, -0.0576916066, 0.3678415302, 0.6802537378, 1.1437036331, -0.8637405666, 0.7016273068, 0.3978601709, 0.3157049654, -0.2528455662, -0.8614146703, 1.1741126834, -1.4046408959, 1.2914477803, 0.9904052964, -0.6980155826)
l2 = array.new_float()
for i = 0 to 32
sum = 0.0
for j = 0 to 4
weight = array.get(w2, i * 5 + j)
sum += weight * array.get(l1, j)
array.push(l2, tanh(sum))
// === Output layer weights ===
weights_out = array.from( -0.1366382003, 0.8161960822, -0.9458773183, 0.4692969576, 0.0126710629, -0.0403001012, -0.0116244898, -0.4874816289, -0.6392241448, -0.410338398, -0.1181027081, 0.1075562037, -0.5948728252, 0.5593677345, -0.3642935247, -0.2867603217, 0.142250271, -0.0535698019, -0.034007685, -0.3594532426, 0.2551095195, 0.4214344983, 0.8941621336, 0.6283377368, -0.7138020667, -0.1426738249, 0.172671223, 0.0714824385, -0.3268182144, -0.0078989755, -0.2032828145, -0.0260631534, 0.4918037012)
sum_out = 0.0
for i = 0 to array.size(l2) - 1
sum_out += array.get(weights_out, i) * array.get(l2, i)
// === Final ANN output (inverted for signal correction) ===
l3_0 = -tanh(sum_out)
// === TRADE FILTERS ===
volatility = ta.atr(14)
isVolOkay = volatility > minVolatility
isSession = (hour >= 9 and hour < 16) // Adjust to your market hours
sessionOkay = useSession ? isSession : true
// === SIGNAL LOGIC ===
var string activeTrade = "none"
var int lastTradeBar = na
canTrade = (na(lastTradeBar) or (bar_index - lastTradeBar > cooldownBars)) and isVolOkay and sessionOkay
enterLong = l3_0 > entryThreshold and activeTrade != "long" and canTrade
exitLong = l3_0 < exitThreshold and activeTrade == "long"
enterShort = l3_0 < -entryThreshold and activeTrade != "short" and canTrade
exitShort = l3_0 > -exitThreshold and activeTrade == "short"
// === STRATEGY EXECUTION ===
if barstate.isrealtime
if enterLong
strategy.entry("Long", strategy.short)
activeTrade := "long"
lastTradeBar := bar_index
if exitLong
strategy.close("Long")
activeTrade := "none"
if enterShort
strategy.entry("Short", strategy.long)
activeTrade := "short"
lastTradeBar := bar_index
if exitShort
strategy.close("Short")
activeTrade := "none"
// === PLOTTING ===
bgcolor(activeTrade == "long" ? color.new(color.green, 85) : activeTrade == "short" ? color.new(color.red, 85) : na)
plot(l3_0, title="ANN Output (Inverted)", color=color.aqua, linewidth=2)