Управление рисками — фундамент любой торговой стратегии. Без него даже точный ML-прогноз не поможет сохранить капитал.
-Stop Loss — уровень, при достижении которого позиция закрывается автоматически. Это не признание ошибки, а часть стратегии. На графиках Flamy AI уровень SL рассчитывается моделью на основе исторической волатильности инструмента.
-Take Profit — целевой уровень закрытия позиции с прибылью. TP рассчитывается пропорционально прогнозному движению с учётом Risk:Reward ratio.
-Оптимальное соотношение риска к доходности — не менее 1:2. Это означает, что потенциальная прибыль должна минимум вдвое превышать риск.
-ML-модель не даёт гарантий. Уверенность 80% означает, что 20% прогнозов будут неточными. Управление рисками — страховка на эти 20%.
- ` + content: [ + { + type: 'paragraph', + text: 'Управление рисками — фундамент любой торговой стратегии. Без него даже точный ML-прогноз не поможет сохранить капитал.' + }, + { type: 'heading', text: 'Stop Loss: где ваша позиция неправа' }, + { + type: 'paragraph', + text: 'Stop Loss — уровень, при достижении которого позиция закрывается автоматически. Это не признание ошибки, а часть стратегии. На графиках Flamy AI уровень SL рассчитывается моделью на основе исторической волатильности инструмента.' + }, + { type: 'heading', text: 'Take Profit: когда забирать прибыль' }, + { + type: 'paragraph', + text: 'Take Profit — целевой уровень закрытия позиции с прибылью. TP рассчитывается пропорционально прогнозному движению с учётом Risk:Reward ratio.' + }, + { type: 'heading', text: 'Risk:Reward Ratio' }, + { + type: 'paragraph', + text: 'Оптимальное соотношение риска к доходности — не менее 1:2. Это означает, что потенциальная прибыль должна минимум вдвое превышать риск.' + }, + { + type: 'list', + items: [ + 'SL: не более 1% от капитала на сделку', + 'TP: 2% и выше от точки входа', + 'Одна сделка: не более 2% депозита' + ] + }, + { type: 'heading', text: 'Почему это важно при работе с ML-прогнозами' }, + { + type: 'paragraph', + text: 'ML-модель не даёт гарантий. Уверенность 80% означает, что 20% прогнозов будут неточными. Управление рисками — страховка на эти 20%.' + } + ] }, { id: 2, slug: 'kak-chitat-grafiki-flamy-ai', date: '2026-05-17', title: 'Как читать графики Flamy AI', - description: - 'Краткое объяснение свечей, прогнозной зоны, TP и SL на графиках Flamy AI.', + description: 'Краткое объяснение свечей, прогнозной зоны, TP и SL на графиках Flamy AI.', tags: ['ML', 'FORECAST', 'CHARTS'], - content: ` -Графики Flamy AI содержат три слоя: исторические свечи, прогнозную зону и уровни торгового плана. Разберём каждый из них.
-Левая часть графика — реальные OHLC-свечи. Зелёные — бычьи (close > open), красные — медвежьи. Это основа для анализа модели.
-Правая часть — прогнозные свечи на горизонт 19 периодов вперёд. Это не точные значения, а вероятностный коридор движения цены на ближайшие 95 минут.
-Если модель публикует режим TRADE_PLAN, на графике появляются три горизонтальные линии:
-Все графики работают на таймфрейме 5 минут. Горизонт прогноза — 19 свечей = 95 минут вперёд. Прогнозы обновляются каждый час автоматически.
- ` + content: [ + { + type: 'paragraph', + text: 'Графики Flamy AI содержат три слоя: исторические свечи, прогнозную зону и уровни торгового плана. Разберём каждый из них.' + }, + { type: 'heading', text: 'Исторические свечи' }, + { + type: 'paragraph', + text: 'Левая часть графика — реальные OHLC-свечи. Зелёные — бычьи, красные — медвежьи. Это основа для анализа модели.' + }, + { type: 'heading', text: 'Прогнозная зона' }, + { + type: 'paragraph', + text: 'Правая часть — прогнозные свечи на горизонт 19 периодов вперёд. Это не точные значения, а вероятностный коридор движения цены на ближайшие 95 минут.' + }, + { type: 'heading', text: 'Уровни Entry, TP и SL' }, + { + type: 'paragraph', + text: 'Если модель публикует режим TRADE_PLAN, на графике появляются три горизонтальные линии.' + }, + { + type: 'list', + items: [ + 'Entry — рекомендуемый уровень входа в позицию', + 'TP — цель Take Profit', + 'SL — Stop Loss для ограничения убытков' + ] + }, + { type: 'heading', text: 'Таймфрейм и горизонт' }, + { + type: 'paragraph', + text: 'Все графики работают на таймфрейме 5 минут. Горизонт прогноза — 19 свечей = 95 минут вперёд. Прогнозы обновляются каждый час автоматически.' + } + ] } ]; export function getPostBySlug(slug: string): Post | undefined { return posts.find((p) => p.slug === slug); -} \ No newline at end of file +} diff --git a/src/lib/components/Chart.svelte b/src/lib/components/Chart.svelte index 7ff514e..27fd733 100644 --- a/src/lib/components/Chart.svelte +++ b/src/lib/components/Chart.svelte @@ -9,7 +9,7 @@ type IChartApi, type ISeriesApi, type MouseEventParams, - type UTCTimestamp, + type UTCTimestamp } from 'lightweight-charts'; import type { ChartData, CandleBar } from '$lib/stores/chartStore'; @@ -50,7 +50,7 @@ high: 0, low: 0, close: 0, - isUp: true, + isUp: true }); function fmt(n: number): string { @@ -75,7 +75,7 @@ lineWidth: 1, lineStyle: LineStyle.Solid, axisLabelVisible: true, - title: 'Entry', + title: 'Entry' }), candleSeries.createPriceLine({ price: d.signal.tp, @@ -83,7 +83,7 @@ lineWidth: 1, lineStyle: LineStyle.Dashed, axisLabelVisible: true, - title: 'TP', + title: 'TP' }), candleSeries.createPriceLine({ price: d.signal.sl, @@ -91,8 +91,8 @@ lineWidth: 1, lineStyle: LineStyle.Dashed, axisLabelVisible: true, - title: 'SL', - }), + title: 'SL' + }) ]; chart.timeScale().fitContent(); @@ -107,11 +107,11 @@ textColor: '#8a887f', fontFamily: "'JetBrains Mono', monospace", fontSize: 11, - attributionLogo: false, + attributionLogo: false }, grid: { vertLines: { color: '#1a191e' }, - horzLines: { color: '#1a191e' }, + horzLines: { color: '#1a191e' } }, crosshair: { mode: CrosshairMode.Normal, @@ -119,25 +119,25 @@ color: '#3d3b42', labelBackgroundColor: '#1a191e', style: LineStyle.Dashed, - width: 1, + width: 1 }, horzLine: { color: '#3d3b42', labelBackgroundColor: '#1a191e', style: LineStyle.Dashed, - width: 1, - }, + width: 1 + } }, rightPriceScale: { borderColor: '#1a191e', - scaleMargins: { top: 0.06, bottom: 0.04 }, + scaleMargins: { top: 0.06, bottom: 0.04 } }, timeScale: { borderColor: '#1a191e', timeVisible: true, secondsVisible: false, - rightOffset: 24, - }, + rightOffset: 24 + } }); candleSeries = chart.addSeries(CandlestickSeries, { @@ -146,7 +146,7 @@ borderUpColor: '#26a69a', borderDownColor: '#ef5350', wickUpColor: '#26a69a', - wickDownColor: '#ef5350', + wickDownColor: '#ef5350' }); predSeries = chart.addSeries(LineSeries, { @@ -158,7 +158,7 @@ crosshairMarkerBorderColor: '#fe4b07', crosshairMarkerBackgroundColor: '#09080a', priceLineVisible: false, - lastValueVisible: true, + lastValueVisible: true }); applyData(data); @@ -169,17 +169,22 @@ return; } const c = param.seriesData.get(candleSeries) as CandleBar; - if (!c) { tip = { ...tip, visible: false }; return; } + if (!c) { + tip = { ...tip, visible: false }; + return; + } - const pred = predSeries && param.seriesData.has(predSeries) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ? (param.seriesData.get(predSeries) as any)?.value - : undefined; + const pred = + predSeries && param.seriesData.has(predSeries) + ? (param.seriesData.get(predSeries) as { value?: number })?.value + : undefined; const ts = param.time as number; const d = new Date(ts * 1000); - const timeStr = d.toLocaleDateString('ru-RU', { day: '2-digit', month: 'short' }) - + ' ' + d.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); + const timeStr = + d.toLocaleDateString('ru-RU', { day: '2-digit', month: 'short' }) + + ' ' + + d.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); tip = { visible: true, @@ -191,14 +196,14 @@ low: c.low, close: c.close, isUp: c.close >= c.open, - pred, + pred }; }); const ro = new ResizeObserver(() => { chart?.applyOptions({ width: container.clientWidth, - height: container.clientHeight, + height: container.clientHeight }); }); ro.observe(container); @@ -229,7 +234,7 @@ style="left: {left}px; top: {top}px" >{tip.time}
- {#each [['O', tip.open], ['H', tip.high], ['L', tip.low], ['C', tip.close]] as [lbl, val]} + {#each [['O', tip.open], ['H', tip.high], ['L', tip.low], ['C', tip.close]] as [lbl, val] (lbl)}