На основе индикаторной стратегии Chaikin Money Flow (CMF)


Дата создания: 2024-06-07 17:05:04 Последнее изменение: 2024-06-07 17:05:04
Копировать: 0 Количество просмотров: 303
1
Подписаться
1166
Подписчики

На основе индикаторной стратегии Chaikin Money Flow (CMF) CASHISKING | CASHISKING CMF, EMA, SMA

Обзор

Стратегия генерирует торговые сигналы на основе показателей Chaikin Cash Flow (CMF) и Index Moving Average (EMA). Сначала рассчитывается значение CMF в течение заданного периода, а затем используются два различных периода EMA для сглаживания данных CMF. Когда быстрая EMA создает сигнал покупки, когда она пересекается сверх медленной EMA, она, наоборот, создает сигнал продажи.

Стратегический принцип

  1. Для расчета стоимости Chaikin Cash Flow (CMF) в течение заданного периода, показатель CMF используется в сочетании с данными о ценах и объемах сделок, чтобы измерить интенсивность притока и оттока денег.
  2. Для упрощенной обработки данных CMF используются индексные скользящие средние ((EMA) двух различных периодов, быстрое ЭМА используется для захвата краткосрочных тенденций, а медленное ЭМА - для определения долгосрочных тенденций.
  3. Когда быстрая ЭМА пересекается над медленной ЭМА, создается сигнал покупать; когда быстрая ЭМА пересекается ниже медленной ЭМА, создается сигнал продавать.
  4. После создания торгового сигнала стратегия ждет подтверждения двух K-линий, чтобы избежать ложного сигнала.
  5. Установка условий стоп-лосса и стоп-стопа, стоп-стоп - определенный процент от цены открытия позиции, стоп-стоп - определенный процент от цены открытия позиции.

Анализ преимуществ

  1. Объединение данных о ценах и объемах сделок: Индекс CMF учитывает данные о ценах и объемах сделок, что позволяет более полно отражать рыночные денежные потоки и обеспечивает более надежные торговые сигналы.
  2. Следить за тенденциями: используя различные циклы ЭМА, стратегия может одновременно улавливать краткосрочные и долгосрочные тенденции и адаптироваться к различным рыночным условиям.
  3. Подтверждение сигнала: после создания сигнала сделки, стратегия ждет подтверждения двух K-линий, эффективно отфильтровывая некоторые ложные сигналы и повышая вероятность успешной сделки.
  4. Контроль риска: установлены условия стоп-лосса и стоп-стопа, позволяющие эффективно контролировать риск отдельной сделки, при этом блокируя полученную прибыль.

Анализ рисков

  1. Параметровая оптимизация: эффективность стратегии зависит от циклического выбора CMF и EMA. Различные рыночные условия могут требовать различных параметров, поэтому необходимо регулярно проводить оптимизацию параметров.
  2. Определение трендов: в рыночных волатильностях или в точках перелома тренда, стратегия может создавать больше ложных сигналов, что приводит к частым сделкам и потерем капитала.
  3. Скольжение и стоимость сделки: частое совершение сделки может увеличить скольжение и стоимость сделки, что влияет на общую прибыль стратегии.

Направление оптимизации

  1. Динамическая корректировка параметров: в зависимости от изменения рыночной среды, динамическая корректировка циклических параметров CMF и EMA для адаптации к различным состояниям рынка.
  2. Введение других индикаторов: в сочетании с другими техническими показателями, такими как индекс относительной силы (RSI), средняя реальная волна (ATR) и т. д., для повышения точности идентификации тенденций и надежности сигналов.
  3. Оптимизация стопов и остановок: в зависимости от рыночной волатильности и предпочтений риска, динамически корректируйте процент стопов и остановок, чтобы лучше контролировать риск и блокировать прибыль.
  4. Присоединяйтесь к управлению позициями: в зависимости от рыночных тенденций и силы сигналов, динамически корректируйте размер позиции, увеличивая позиции при четких тенденциях и уменьшая позиции при неопределенности.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-06-01 00:00:00
end: 2024-06-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("CASHISKING", overlay=false)

// Kullanıcı girişleri ile parametreler
cmfPeriod = input.int(200, "CMF Periyodu", minval=1)
emaFastPeriod = input.int(80, "Hızlı EMA Periyodu", minval=1)
emaSlowPeriod = input.int(160, "Yavaş EMA Periyodu", minval=1)
stopLossPercent = input.float(3, "Stop Loss Yüzdesi", minval=0.1) / 100
stopGainPercent = input.float(5, "Stop Gain Yüzdesi", minval=0.1) / 100

// CMF hesaplama fonksiyonu
cmfFunc(close, high, low, volume, length) =>
    clv = ((close - low) - (high - close)) / (high - low)
    valid = not na(clv) and not na(volume) and (high != low)
    clv_volume = valid ? clv * volume : na
    sum_clv_volume = ta.sma(clv_volume, length)
    sum_volume = ta.sma(volume, length)
    cmf = sum_volume != 0 ? sum_clv_volume / sum_volume : na
    cmf

// CMF değerlerini hesaplama
cmf = cmfFunc(close, high, low, volume, cmfPeriod)

// EMA hesaplamaları
emaFast = ta.ema(cmf, emaFastPeriod)
emaSlow = ta.ema(cmf, emaSlowPeriod)

// Göstergeleri çiz
plot(emaFast, color=color.blue, title="EMA 23")
plot(emaSlow, color=color.orange, title="EMA 50")

// Alım ve Satım Sinyalleri
crossOverHappened = ta.crossover(emaFast, emaSlow)
crossUnderHappened = ta.crossunder(emaFast, emaSlow)

// Kesişme sonrası bekleme sayacı
var int crossOverCount = na
var int crossUnderCount = na

if (crossOverHappened)
    crossOverCount := 0

if (crossUnderHappened)
    crossUnderCount := 0

if (not na(crossOverCount))
    crossOverCount += 1

if (not na(crossUnderCount))
    crossUnderCount += 1

// Alım ve Satım işlemleri
if (crossOverCount == 2)
    strategy.entry("Buy", strategy.long)
    crossOverCount := na  // Sayaç sıfırlanır

if (crossUnderCount == 2)
    strategy.entry("Sell", strategy.short)
    crossUnderCount := na  // Sayaç sıfırlanır

// Stop Loss ve Stop Gain hesaplama
longStopPrice = strategy.position_avg_price * (1 - stopLossPercent)
shortStopPrice = strategy.position_avg_price * (1 + stopLossPercent)
longTakeProfitPrice = strategy.position_avg_price * (1 + stopGainPercent)
shortTakeProfitPrice = strategy.position_avg_price * (1 - stopGainPercent)

// Stop Loss ve Stop Gain'i uygula
if (strategy.position_size > 0 and strategy.position_avg_price > 0)
    strategy.exit("Stop", "Buy", stop=longStopPrice, limit=longTakeProfitPrice)
else if (strategy.position_size < 0 and strategy.position_avg_price > 0)
    strategy.exit("Stop", "Sell", stop=shortStopPrice, limit=shortTakeProfitPrice)