Эта стратегия использует уровни ретракциона Фибоначчи, чтобы автоматически устанавливать стоп-лосс и принимать цены на прибыль для управления позициями.
Основой этой стратегии является индикатор ретрасценции Фибоначчи для определения ключевых уровней поддержки и сопротивления. Он отслеживает последние максимумы и минимумы, чтобы составить график 10 ценовых зон Фибоначчи. В зависимости от конфигурации, один из уровней Фибоначчи выбирается в качестве триггера входа. Когда цена превышает этот уровень, будет размещен длинный ордер на основе настроенного рычага. В то же время цена получения прибыли устанавливается на определенном проценте выше цены входа.
После входа стратегия продолжает отслеживать обновленные уровни Фибоначчи. Если появляется более низкий уровень Fib, указывающий на потенциальное изменение, стратегия отменяет существующие ордера и повторно размещает ордера по более низкой цене в качестве механизма остановки потери. Когда цена в конечном итоге превышает цену прибыли, позиция будет закрыта для получения прибыли.
Наибольшее преимущество этой стратегии заключается в способности динамически регулировать стоп-лосс и принимать цены прибыли для трендовых рынков.
Получить большую прибыль в условиях тренда, отслеживая остановки, основанные на цене входа.
Уменьшить убытки в консолидации, остановившись на появляющихся более низких уровнях Fib.
Допустить пирамидацию путем добавления к позиции, когда цена падает определенный процент от последней входной цены.
Простая в эксплуатации с автоматическим размещением заказов после правильной настройки.
Необходимо знать о некоторых рисках:
Склонность к повторным остановкам на боковых рынках, повышение сборов.
Нет фиксированного механизма стоп-лосса, рискуют большие выводы.
Неограниченная пирамида может усугубить потери.
Соответствующие решения:
Приостановить торговлю, когда цена колеблется в диапазоне.
Ручно контролируйте рынки и закрывайте позиции, если это необходимо.
Установите ограничения на пирамидальные приказы.
Остается много возможностей для оптимизации:
Добавьте дополнительные индикаторы, такие как EMA, MACD для дополнительного подтверждения входа, чтобы избежать ложных прорывов.
Включить механизмы фиксированного/следующего остановки потерь для ограничения потерь в экстремальных условиях.
Усовершенствовать логику пирамиды, основанную на рыночных режимах, чтобы предотвратить чрезмерное использование кредитных средств.
Используйте модели машинного обучения, такие как LSTM, для прогнозирования цены и определения лучшего входа/выхода.
В целом, эта стратегия подходит для сценариев, когда тенденция исчезает. Постоянное регулирование остановок позволяет эффективно управлять тенденциями. Необходимы правильные оптимизации и защитные рельсы для управления более сложными рыночными условиями.
/*backtest start: 2024-01-06 00:00:00 end: 2024-02-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © CryptoRox //@version=4 //Paste the line below in your alerts to run the built-in commands. //{{strategy.order.alert_message}} strategy(title="Fibs limit only", shorttitle="Strategy", overlay=true, precision=8, pyramiding=1000, commission_type=strategy.commission.percent, commission_value=0.04) //Settings testing = input(false, "Live") //Use epochconverter or something similar to get the current timestamp. starttime = input(1600976975, "Start Timestamp") * 1000 //Wait XX seconds from that timestamp before the strategy starts looking for an entry. seconds = input(60, "Start Delay") * 1000 testPeriod = true leverage = input(1, "Leverage") tp = input(1.0, "Take Profit %") / leverage dca = input(-1.0, "DCA when < %") / leverage *-1 fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]) //Strategy Calls equity = strategy.equity avg = strategy.position_avg_price symbol = syminfo.tickerid openTrades = strategy.opentrades closedTrades = strategy.closedtrades size = strategy.position_size //Fibs lentt = input(60, "Pivot Length") h = highest(lentt) h1 = dev(h, lentt) ? na : h hpivot = fixnan(h1) l = lowest(lentt) l1 = dev(l, lentt) ? na : l lpivot = fixnan(l1) z = 400 p_offset= 2 transp = 60 a=(lowest(z)+highest(z))/2 b=lowest(z) c=highest(z) fib0 = (((hpivot - lpivot)) + lpivot) fib1 = (((hpivot - lpivot)*.21) + lpivot) fib2 = (((hpivot - lpivot)*.3) + lpivot) fib3 = (((hpivot - lpivot)*.5) + lpivot) fib4 = (((hpivot - lpivot)*.62) + lpivot) fib5 = (((hpivot - lpivot)*.7) + lpivot) fib6 = (((hpivot - lpivot)* 1.00) + lpivot) fib7 = (((hpivot - lpivot)* 1.27) + lpivot) fib8 = (((hpivot - lpivot)* 2) + lpivot) fib9 = (((hpivot - lpivot)* -.27) + lpivot) fib10 = (((hpivot - lpivot)* -1) + lpivot) notna = nz(fib10[60]) entry = 0.0 if fibEntry == "1" entry := fib10 if fibEntry == "2" entry := fib9 if fibEntry == "3" entry := fib0 if fibEntry == "4" entry := fib1 if fibEntry == "5" entry := fib2 if fibEntry == "6" entry := fib3 if fibEntry == "7" entry := fib4 if fibEntry == "8" entry := fib5 if fibEntry == "9" entry := fib6 if fibEntry == "10" entry := fib7 profit = avg+avg*(tp/100) pause = 0 pause := nz(pause[1]) paused = time < pause fill = 0.0 fill := nz(fill[1]) count = 0.0 count := nz(fill[1]) filled = count > 0 ? entry > fill-fill/100*dca : 0 signal = testPeriod and notna and not paused and not filled ? 1 : 0 neworder = crossover(signal, signal[1]) moveorder = entry != entry[1] and signal and not neworder ? true : false cancelorder = crossunder(signal, signal[1]) and not paused filledorder = crossunder(low[1], entry[1]) and signal[1] last_profit = 0.0 last_profit := nz(last_profit[1]) if neworder and signal strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) if moveorder strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) if filledorder and size < 1 fill := entry count := count+1 pause := time + 60000 p = close+close*(tp/100) strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(p)) if filledorder and size >= 1 fill := entry count := count+1 pause := time + 60000 strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(profit)) if cancelorder and not filledorder pause := time + 60000 strategy.order("Cancel", 1, 0.0001, alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order') if filledorder last_profit := profit closeit = crossover(high, profit) and size >= 1 if closeit strategy.entry("Close ALL", 0, 0, alert_message='Profit') count := 0 fill := 0.0 last_profit := 0.0 //Plots bottom = signal ? color.green : filled ? color.red : color.white plot(entry, "Entry", bottom)