Type/to search
2
Follow
484
Followers
Динамическое распределение весов нескольких активов RWA на криптовалютном рынке: стратегия риск-паритет
Discussions
Created 2026-04-08 16:37:16  Updated 2026-04-20 18:13:03
 0
 206

img

Криптовалютный рынок в последнее время переживает не лучшие времена. BTC упал с максимумов, альткоины пострадали еще сильнее, многие заняли выжидательную позицию или даже ушли с рынка. Но в этот же период незаметно набирает обороты другое явление — RWA, то есть токенизация активов реального мира. Золото, американские акции, сырая нефть — активы традиционных рынков — начинают появляться на криптобиржах в виде контрактов. Крупные биржи одна за другой запускают SPY (ETF на S&P 500), XAU (золото), CL (сырая нефть), а вместе с уже существующим BTC впервые на блокчейне формируется мультиактивная торговая среда, охватывающая американские акции, золото, нефть и криптовалюты.

При виде такой конфигурации в голову приходит одна мысль: в традиционных финансах существует классический подход — риск-паритет. Проще говоря — не класть все яйца в одну корзину, а количество яиц в каждой корзине определять в зависимости от того, насколько эта корзина рискованна. Эта логика используется в традиционных финансах уже десятилетиями. В текущий медвежий период все ищут способы выжить, не полагаясь на один актив, и теперь, когда на крипторынке наконец появились контракты на эти активы, я решил попробовать перенести эту логику сюда.


Сначала разберемся с риск-паритетом, чтобы двигаться дальше

Прежде чем говорить о конкретных действиях, нужно четко объяснить, что такое риск-паритет, иначе последующую логику будет трудно уловить.

Обычный человек, распределяя активы, может подумать: разделю деньги поровну на четыре части, в каждый актив по 25%. Звучит сбалансированно, но проблема в том, что BTC может колебаться на 10% за день, а золото — всего на 0,5%. При одинаковой доле в 25% риск, который вы получаете от BTC, в двадцать раз выше, чем от золота. Внешне активы распределены поровну, но на самом деле судьба портфеля почти полностью определяется одним BTC, а остальные три — всего лишь дополнение.

Риск-паритет подходит с обратной стороны: распределяется не капитал, а риск. Если BTC волатилен, его доля уменьшается; если золото стабильно, доля увеличивается — но это только первый шаг. Ключевой момент в том, что активы не независимы: BTC и американские акции могут падать вместе при определенных рыночных условиях. Если два актива сильно скореллированы, выравнивание их риска по волатильности теряет смысл. Настоящий риск-паритет требует учитывать как волатильность каждого актива, так и его корреляцию с другими, используя ковариационную матрицу для измерения маржинального вклада каждого актива в общий риск портфеля, чтобы в итоге вклад каждого актива в риск был примерно одинаковым. Преимущество этой логики в том, что внезапный обвал одного актива не уничтожит весь портфель.

img


Сначала выбираем активы — только тогда диверсификация имеет смысл

Чтобы применить риск-паритет, первым делом нужно выбрать активы для портфеля. Если активы выбраны неправильно, дальнейшие расчеты бесполезны.

Пул активов включает SPY, XAU, CL и BTC. Выбор этих четырех не случаен — их динамика обычно не полностью синхронна. Когда экономика растет, растут акции; когда нарастает неприятие риска, растет золото; когда высоки инфляционные ожидания, растут и нефть, и золото; криптовалюты иногда движутся в одном направлении с акциями, а иногда полностью расходятся. Именно из-за низкой корреляции между ними их объединение имеет смысл для диверсификации риска. Если бы все четыре актива ежедневно росли и падали вместе, диверсификация была бы иллюзией, и никакой метод не спас бы.

После выбора активов следующий вопрос: какую долю выделить каждому? Вот где требуется настоящий расчет риск-паритета.

img


Как рассчитать долю каждого актива

Логика стратегии строится в два этапа.

Первый этап: загрузить данные свечей по четырем активам и выровнять их по временным меткам. Стратегия использует 1-часовые свечи (PERIOD_H1) в качестве входных данных. Кажется, что это просто, но на практике контракты RWA иногда могут иметь пропуски данных. Если для определенного момента времени нет котировки SPY, то данные за этот момент удаляются целиком, и остаются только те точки, где есть котировки по всем четырем активам. Затем проводятся последующие расчеты.

javascript
for (var k = 0; k < keys.length; k++) { var row = timeMap[keys[k]], ok = true; for (var i = 0; i < LABELS.length; i++) { if (row[LABELS[i]] === undefined) { ok = false; break; } } if (ok) timestamps.push(parseInt(keys[k])); }

После выравнивания данных преобразуем ряды цен закрытия в логарифмическую доходность, то есть ln(текущая цена / предыдущая цена). Логарифмическая доходность используется вместо простого процентного изменения, поскольку она обладает свойством аддитивности во времени — сумма нескольких периодов равна общей логарифмической доходности, что удобно для обработки; кроме того, при распространенном предположении, что цена актива следует геометрическому броуновскому движению, логарифмическая доходность имеет нормальное распределение, что совместимо с последующим расчетом ковариационной матрицы. Следует отметить, что фактическая доходность криптоактивов часто имеет тяжелые хвосты — это важное отклонение от предположения, и ковариационная матрица может недооценивать реальный риск в экстремальных рыночных условиях.

javascript
function calcLogReturns(prices) { var r = []; for (var i = 1; i < prices.length; i++) { var prev = prices[i - 1], cur = prices[i]; if (!prev || !cur || prev <= 0 || cur <= 0) { r.push(0); continue; } r.push(Math.log(cur / prev)); } return r; }

Второй этап: используя эти ряды доходности, вычисляем ковариационную матрицу. Простое вычисление исторической средней ковариации слишком грубо — здесь используется EWMA-взвешивание, которое придает более высокий вес недавним данным, позволяя матрице быстрее реагировать на изменения рыночного состояния.

javascript
for (var t = T - 1; t >= 0; t--) { var w = Math.pow(lambda, T - 1 - t); c += w * (retMat[i][t] - means[i]) * (retMat[j][t] - means[j]); ws += w; } cov[i][j] = c / ws; cov[j][i] = cov[i][j];

lambda — коэффициент затухания. Стратегия по умолчанию использует EWMA_LAMBDA = 0.94, что основано на эмпирической настройке RiskMetrics для дневных данных. Важно отметить: RiskMetrics рекомендовал 0.94 для дневных данных, а стратегия использует часовые данные — более высокую частоту. Чтобы ковариационная матрица реагировала на недавние изменения так же чувствительно, как при дневном 0.94, теоретически требуется значение, более близкое к 1. Однако на практике 0.94 на часовом таймфрейме все равно является приемлемой отправной точкой, обеспечивая более высокий вес недавних данных и более быстрое затухание исторических данных. Значение можно дополнительно настраивать по результатам бэктестинга. Чем ближе lambda к 1, тем дольше влияние исторических данных и тем медленнее матрица реагирует на недавние изменения; чем меньше lambda, тем стратегия чувствительнее к изменениям рыночного состояния, но также более подвержена ложным перебалансировкам из-за краткосрочного шума.

После расчета на диагональ добавляется регуляризационный член с коэффициентом 0.1% от среднего диагонального значения (eps = diagMean * 0.001). Коэффициент 0.001 был выбран после тестирования: он достаточен для обеспечения положительной определенности матрицы и оказывает пренебрежимо малое влияние на структуру ковариации. Следует также отметить одно упрощение: строгий расчет EWMA-ковариации требует использования взвешенного среднего для вычисления отклонений, но в коде используется простое арифметическое среднее по всему окну ретроспективы. При условии, что средняя доходность близка к нулю (обычное состояние для краткосрочных доходностей финансовых активов), это упрощение оказывает незначительное влияние на результат, но в сценариях со значительным отклонением среднего от нуля может вносить небольшую погрешность.

Имея ковариационную матрицу, приступаем к решению задачи риск-паритета: найти такой набор весов, при котором вклад каждого актива в риск портфеля примерно равен. Перед началом итераций стратегия уже определила направление для каждого актива через ковариацию равновесного портфеля; результат сохраняется в массиве signs[] (+1 — длинная позиция, -1 — короткая). В процессе итераций используются фиксированные предварительно определенные знаки, корректируются только величины весов, направление не меняется — это сделано для инженерной стабильности, чтобы веса не меняли знак из-за численных колебаний.

Задача не имеет аналитического решения, поэтому используется итерационное приближение. На каждом шаге вычисляется текущий вклад в риск: веса активов, вносящих слишком большой риск, уменьшаются, а тех, чей вклад слишком мал, увеличиваются. Итерации повторяются до сходимости.

javascript
for (var iter = 0; iter < 2000; iter++) { var trc = riskContribs(w, scaledCov); var pv = portVol(w, scaledCov); var target = pv / n; var obj = 0; for (var i = 0; i < n; i++) { for (var j = i + 1; j < n; j++) { var d = Math.abs(trc[i]) - Math.abs(trc[j]); obj += d * d; } } if (obj < 1e-12) break; var nw = [], ns = 0; for (var i = 0; i < n; i++) { var rc = Math.abs(trc[i]); var sign = signs[i]; // используем заранее определённый фиксированный знак var a = target / rc; var v = sign * Math.max(Math.abs(w[i]) * Math.pow(a, 0.5), 1e-6); nw.push(v); ns += Math.abs(v); } // Нормировка по абсолютному значению, чтобы сумма абсолютных весов активов равнялась 1 for (var i = 0; i < n; i++) w[i] = nw[i] / ns; }

Критерий сходимости — сумма квадратов различий в рисковых вкладах всех активов меньше 1e-12. В этом случае считается, что рисковые вклады активов достаточно близки, и итерации прекращаются. Максимальное число итераций ограничено 2000, чтобы предотвратить бесконечный цикл при плохо обусловленной ковариационной матрице. На практике обычно сходимость достигается за несколько сотен итераций. Если по достижении лимита сходимость не наступила, это указывает на проблемы с входными данными или ковариационной матрицей — в таком случае стратегия понижается до равновесной длинной позиции, чтобы система не зависала.

Рисковый вклад каждого актива определяется как его вес, умноженный на предельный риск. Результат может быть отрицательным, что означает, что данный актив снижает общую волатильность портфеля.

javascript
function riskContribs(w, cov) { var sv = matVecMul(cov, w); var pv = portVol(w, cov); var trc = []; for (var i = 0; i < w.length; i++) trc.push(w[i] * sv[i] / pv); return trc; }

Веса могут быть отрицательными, т.е. короткие позиции

Стандартная стратегия risk parity обычно предполагает только длинные позиции, но на рынках контрактов можно открывать короткие позиции, поэтому данная стратегия расширена, разрешая отрицательные веса.

Логика определения знака следующая: сначала рассчитывается эталонный портфель с равной волатильностью — активы с высокой волатильностью получают меньший вес, активы с низкой волатильностью — больший. Затем для каждого актива проверяется знак ковариации с этим эталонным портфелем. Отрицательная ковариация означает, что актив имеет тенденцию двигаться в противоположном направлении относительно портфеля в целом; короткая позиция по нему помогает снизить общий риск портфеля, поэтому вес устанавливается отрицательным, что на рынке контрактов соответствует открытию короткой позиции.

Следует отметить, что это инженерное приближение, а не строгое теоретическое решение для длинно-короткого risk parity. Строгий длинно-короткий risk parity требует решения задачи условной оптимизации на основе полной ковариационной матрицы, что более затратно в вычислительном плане. Данное приближение даёт разумное направление в большинстве рыночных ситуаций, однако когда сразу несколько активов имеют отрицательную ковариацию с эталонным портфелем, необходимо конкретно проверять, действительно ли одновременное открытие коротких позиций по ним снижает риск портфеля — это нельзя обобщать.

javascript
var invVols = [], sumInvVol = 0; for (var i = 0; i < n; i++) { var vol = Math.sqrt(Math.max(scaledCov[i][i], 1e-16)); invVols.push(1 / vol); sumInvVol += 1 / vol; } var eqVolWeights = []; for (var i = 0; i < n; i++) { eqVolWeights.push(invVols[i] / sumInvVol); } var covWithPortfolio = 0; for (var j = 0; j < n; j++) { covWithPortfolio += eqVolWeights[j] * scaledCov[i][j]; } var dir = covWithPortfolio < 0 ? -1 : 1; Log('[Направление]', LABELS[i], 'Ковариация с портфелем равной волатильности:', _N(covWithPortfolio, 8), '→', dir < 0 ? '🔴 Короткая (short)' : '🟢 Длинная (long)');

После того как направление определено, оно фиксируется в массиве signs[] и не изменяется в процессе итераций. Итерации отвечают только за корректировку величины весов, но не их знака. После фиксации направлений остаётся ещё один вопрос: какой коэффициент кредитного плеча применить ко всему портфелю.


Кредитное плечо не максимизируется, а следует за волатильностью

В стратегии встроен механизм регулировки кредитного плеча, цель которого — поддерживать общую волатильность портфеля вокруг заданного уровня. Для аналогии: вы ведёте машину, целевая скорость — 60 км/ч. На шоссе условия хорошие, можно немного прибавить газ; в городе трафик сложный — нужно сбросить скорость. Механизм кредитного плеча работает аналогично: когда рыночная волатильность низкая, плечо увеличивается, чтобы достичь целевого уровня риска; когда волатильность высокая, плечо автоматически снижается, сокращая экспозицию.

Стратегия использует 1-часовые свечи, в году ровно 8760 свечей, поэтому годовой коэффициент берётся как sqrt(8760). Если используются другие таймфреймы, этот коэффициент необходимо синхронно корректировать: для 15-минутных свечей sqrt(35040), для 4-часовых sqrt(2190), для дневных sqrt(365).

javascript
function calcLeverage(w, cov) { var pv = portVol(w, cov) * Math.sqrt(8760); if (!isFinite(pv) || pv <= 0) return 1; return Math.min(TARGET_VOL / pv, MAX_LEVERAGE); }

Годовая волатильность портфеля делится на целевую волатильность, получая коэффициент плеча, который следует применить. При этом устанавливается верхний предел, чтобы предотвратить неконтролируемое увеличение плеча в экстремальных ситуациях. Это не погоня за максимальной доходностью, а управление риском-бюджетом: сколько риска мы готовы взять ради потенциальной доходности — это решение принимается заранее, а не дрейфует вместе с рынком.

После расчёта плеча портфель может быть сформирован. Одновременно стратегия автоматически корректирует интервал опроса основного цикла в зависимости от текущего уровня волатильности: при высокой волатильности обновления производятся чаще, при низкой — реже, сокращая излишние вычисления и транзакционные издержки.

javascript
function getAdaptiveSleep(w, cov) { var av = portVol(w, cov) * Math.sqrt(8760); if (av > 0.50) return FAST_INTERVAL; // 15 минут else if (av > 0.30) return MID_INTERVAL; // 30 минут else return SLOW_INTERVAL; // 60 минут }

Когда происходит ребалансировка

Рынок меняется каждый день, и веса активов постоянно отклоняются от первоначального замысла. Если этим не управлять, со временем фактический риск портфеля будет сильно отличаться от ожидаемого. Стратегия устанавливает два условия для ребалансировки: первое — по времени, через фиксированное количество часов веса принудительно пересчитываются; второе — по превышению порога отклонения: когда фактический вес какого-либо актива отклоняется от целевого больше установленного порога, или происходит смена направления (лонг → шорт и наоборот), немедленно запускается ребалансировка, не дожидаясь очередного планового момента.

При расчёте относительного отклонения знаменателем служит абсолютное значение предыдущего веса. Когда вес актива становится очень маленьким (близким к нулю), относительное отклонение может быть сильно увеличено, что может приводить к частым ребалансировкам. Стратегия предусматривает защиту от этого: если lastWeights[i] равно нулю, проверка отклонения пропускается, чтобы избежать ложных срабатываний из-за деления на ноль.

javascript
if (!lastWeights) { needRebal = true; rebalReason = 'первое построение портфеля'; } else if ((now - lastTime) > REBALANCE_HOURS * 3600000) { needRebal = true; rebalReason = 'периодическая ребалансировка(' + REBALANCE_HOURS + 'ч)'; } else { for (var i = 0; i < weights.length; i++) { if ((weights[i] >= 0) !== (lastWeights[i] >= 0)) { needRebal = true; rebalReason = LABELS[i] + ' разворот направления (лонг ↔ шорт)'; break; } if (lastWeights[i] !== 0 && Math.abs(weights[i] - lastWeights[i]) / Math.abs(lastWeights[i]) > DRIFT_THRESHOLD) { needRebal = true; rebalReason = LABELS[i] + ' превышение порога дрейфа веса'; break; } } }

После срабатывания ребалансировки стратегия рассчитывает целевой номинальный объём по каждому активу: положительное число означает длинную позицию, отрицательное — короткую. Затем она сравнивает с текущими позициями и решает: увеличить, уменьшить или полностью сменить направление. При смене направления сначала закрывается противоположная позиция, затем открывается новая — чтобы не удерживать одновременно лонг и шорт.

javascript
if (targetSide === 'long' && shortQty > 0) { exchange.CreateOrder(sym, "closesell", -1, shortQty); } if (targetSide === 'short' && longQty > 0) { exchange.CreateOrder(sym, "closebuy", -1, longQty); } if (diffQty > 0) { exchange.CreateOrder(sym, targetSide === 'long' ? "buy" : "sell", -1, diffQty); } else if (diffQty < 0) { exchange.CreateOrder(sym, targetSide === 'long' ? "closebuy" : "closesell", -1, Math.abs(diffQty)); }

Такой подход позволяет избежать как частых сделок с большими комиссиями, так и длительного отклонения портфеля от заложенной концепции. В нормальных условиях механизма ребалансировки достаточно для большинства рыночных изменений. Но рынки иногда ведут себя ненормально, поэтому нужна дополнительная подстраховка.


Также есть экстренный стоп-лосс

Помимо обычной ребалансировки, в стратегии предусмотрен механизм срочного сокращения позиций. На каждом основном цикле проверяются все текущие позиции, сравнивается текущая цена с предыдущей записанной ценой, чтобы оценить неблагоприятное движение в каждом направлении. Если длинная позиция сильно падает или короткая сильно растёт более чем на 5%, стратегия автоматически сокращает позицию вдвое, чтобы сразу ограничить убытки, не дожидаясь следующей ребалансировки.

javascript
if (pos.side === 'long') { drop = (last - cur) / last; } else if (pos.side === 'short') { drop = (cur - last) / last; } if (drop >= EMERGENCY_DROP) { Log('🚨 Сработал экстренный риск! [' + label + '][' + pos.side + '] Неблагоприятное изменение:', _N(drop * 100, 2) + '%', 'Предыдущая:', _N(last, 4), '→ Текущая:', _N(cur, 4)); if (mode === 'live') emergencyReduceLive(sym, label, pos.side, EMERGENCY_REDUCE); else emergencyReducePaper(sym, label, cur, pos.side, EMERGENCY_REDUCE); }

В режиме реальной торговли вызывается биржевой API для закрытия позиций, в режиме бумажной торговли обновляется состояние локальной маржи и денежных средств — пропорционально доле позиции высвобождается маржа, рассчитывается текущая прибыль/убыток и записывается запись о сделке.

Здесь важная деталь дизайна: после срабатывания экстренного сокращения базисная цена не сбрасывается немедленно, и следующий цикл проверки всё ещё использует цену, зафиксированную до срабатывания. Это означает, что в условиях рынка, продолжающего двигаться в неблагоприятном направлении, механизм будет срабатывать на каждом цикле, постепенно сокращая позицию, пока она не будет полностью закрыта, или до следующей нормальной ребалансировки, которая сбросит базисную цену. Это сделано намеренно — в условиях экстремального тренда последовательное сокращение лучше контролирует убытки, чем одноразовое сокращение. Но побочный эффект: если цена ненадолго пробивает порог, а затем быстро отскакивает, можно упустить отскок из-за избыточного сокращения. В нормальном рынке этот механизм почти никогда не срабатывает, но его наличие гарантирует, что в случае «чёрного лебедя» стратегия не будет держать позиции до самого конца.


Как это выглядит в работе

После запуска стратегии на платформе приборная панель в реальном времени отображает: по каждому активу — лонг или шорт, веса, текущее кредитное плечо, оценку годовой волатильности портфеля, а также матрицу корреляций между четырьмя активами. Нереализованная прибыль/убыток по позициям обновляется раз в минуту, частота опроса автоматически меняется в зависимости от рыночной волатильности.

Обновление раз в минуту реализовано не через многопоточность, а с помощью вложенного цикла в основном цикле ожидания: каждую минуту просыпаемся, подтягиваем цены, обновляем нереализованную прибыль и кривую стоимости портфеля, а когда набирается заданный интервал стратегии, выходим из вложенного цикла и переходим к следующему раунду вычислений. Весь алгоритм полностью однопоточный, без рисков конкурентного доступа.

javascript
function sleepWithPnlRefresh(totalSleepMs, weights, leverage, covMatrix, corrMatrix) { var elapsed = 0; while (elapsed < totalSleepMs) { var step = Math.min(PNL_INTERVAL, totalSleepMs - elapsed); Sleep(step); elapsed += step; var prices = getTickers(); var equity = calcEquity(prices); var initCap = _G('pt_initCapital') || INIT_CAPITAL; _chart.add(0, [new Date().getTime(), equity]); LogProfit(equity - initCap, '&'); renderDashboard(weights, leverage, covMatrix, corrMatrix, prices, totalSleepMs, true); } }

Кроме того, стратегия поддерживает бумажный режим, позволяющий полностью протестировать логику и настроить параметры, не рискуя реальными средствами, а затем, убедившись, что поведение соответствует ожиданиям, принять решение о переходе к реальной торговле. С этой конфигурацией я некоторое время гонял стратегию на симуляции — посмотрим, что получилось.


Результаты бумажного тестирования

На момент тестирования стратегия в целом демонстрирует прибыль. Направления позиций: BTC, XAU, SPY — в лонге, CL (нефть) — в шорте. Как раз в этот период появились признаки ослабления напряжённости на Ближнем Востоке, геополитическая премия снизилась, и нефть заметно подешевела, что сделало короткую позицию по нефти основным источником прибыли в этом раунде. Рыночные условия в это время были благоприятны для стратегии, но это не гарантирует, что так будет и в будущем. На самом деле у стратегии остаётся немало неясных моментов, и было бы нечестно не сказать о них.

img


Непроработанные моменты

В процессе создания стратегии несколько вопросов так и не получили полного решения.

Во-первых, ликвидность RWA-контрактов значительно уступает BTC. SPY, XAU, CL — это ещё очень новые инструменты на блокчейне, проскальзывания и глубина стакана остаются неизвестными; на бумаге эта проблема незаметна, но в реальной торговле она проявится в полной мере.

Во-вторых, стратегия полагается на определённую степень диверсификации между активами. Однако в моменты экстремальной паники на рынке корреляция между рисковыми активами часто резко возрастает, что сильно снижает эффект диверсификации — а именно в такие моменты защита нужна больше всего.

В-третьих, у традиционных активов есть нерабочие часы, когда цена практически не движется, тогда как BTC торгуется круглосуточно. Это приводит к занижению реальной взаимосвязи в ковариационной матрице: после закрытия американского рынка BTC продолжает двигаться, но соответствующих данных по SPY нет, и к моменту открытия традиционных рынков оценка взаимосвязи в стратегии может оказаться устаревшей.

В-четвёртых, исторические данные ограничены, и стабильность ковариационной матрицы на коротких временных окнах вызывает сомнения. Такие параметры, как коэффициент затухания EWMA, целевая волатильность, порог ребалансировки, выбраны эмпирически и не прошли строгую верификацию. Для определения знака коротких позиций используется знак ковариации с эталонным портфелем равноволатильности — это инженерное приближение. Если несколько активов одновременно имеют отрицательную ковариацию с эталонным портфелем, необходимо проверять, действительно ли одновременный шорт по ним снижает риск портфеля; нельзя применять это правило бездумно. Кроме того, криптоактивы обладают толстыми хвостами распределения, фактическое распределение доходности отклоняется от нормального, и в экстремальных ситуациях ковариационная матрица будет занижать оценку риска — это предположение, которое нужно принять при использовании данной модели.

В‑пятых, при смене направления в реальной торговле после отправки команды на закрытие позиции стратегия ждёт фиксированное время, а затем продолжает открытие новой позиции, не дожидаясь подтверждения исполнения. При медленном отклике биржи или высокой задержке сети существует риск открыть новую позицию до того, как старая будет полностью закрыта. Симуляция не затрагивает реальное исполнение, поэтому эта проблема не заметна; перед переходом на реальную торговлю необходимо оценить время ожидания исходя из скорости реакции конкретной биржи.

Эти проблемы не выявить простым прогоном на симуляторе — требуется более детальное моделирование и теоретический анализ, тщательная проверка каждого допущения, чтобы понять, устоит ли такая логика на криптовалютном рынке.


В заключение

Исходная мотивация создания этой стратегии проста: на медвежьем крипторынке контракты RWA как раз закрыли пробел в классах активов, а в традиционных финансах накоплены десятилетия конфигурационных теорий. Свести это вместе стоило попробовать. Код завершён, логика прозрачна, параметры настраиваются. Но это лишь отправная точка, до стратегии распределения активов, способной пройти проверку в реальной торговле, ещё далеко. Если у вас есть идеи получше, добро пожаловать, вместе её доработаем.

Вышеизложенное — лишь запись процесса исследования стратегии и не является инвестиционной рекомендацией. Торговля контрактами сопряжена с большим риском, результаты на симуляторе не гарантируют реальных результатов. Перед использованием реальных средств убедитесь, что вы полностью осведомлены о соответствующих рисках.

Исходный код стратегии: Стратегия риск-паритета для классов активов RWA

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)