Динамическая стратегия длинной мартингейловой позиции, основанная на сетке

Автор:Чао Чжан, Дата: 2024-03-22 15:12:33
Тэги:

img

Обзор стратегии

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

Принципы стратегии

  1. Разделите цену на равномерно расположенные сетки на основе параметра Grid Size.
  2. Разместите длинные ограничительные приказы на каждой линии сетки.
  3. Когда текущая цена достигает сетевой линии:
    • Если текущее количество открытых позиций равняется 0, открыть позицию с размером start_lot.
    • Если текущее количество открытых позиций больше нуля, а текущая сетевая цена ниже предыдущей входной цены, открыть новую длинную позицию по текущей сетевой цене с размером, который равен множитель размера предыдущей позиции.
  4. Максимальное количество открытых позиций контролируется параметром Max Open Orders.
  5. После открытия позиции установить уровень получения прибыли на TakeProfit пунктов выше средней входной цены.
  6. Когда текущая цена достигнет уровня получения прибыли, закрыть все длинные позиции и сбросить параметры.

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

Преимущества стратегии

  1. Динамическое размещение позиций: динамическое регулирование размеров позиций для каждой записи на основе текущего количества открытых позиций. Это постепенно увеличивает риск во время продолжающихся нисходящих тенденций, повышая потенциал прибыли стратегии.
  2. Гибкие параметры: Grid Size, start_lot, multifactor и другие параметры позволяют гибко контролировать размер сетки, размер начальной позиции, коэффициент масштабирования позиции и т.д.
  3. Контролируемый риск: параметр Max Open Orders контролирует максимальное количество открытых позиций, чтобы предотвратить чрезмерную экспозицию.

Стратегические риски

  1. Нет стоп-лосса: стратегия не имеет стоп-лосса. Если цена продолжает падать, она может столкнуться со значительными рисками потери.
  2. Чувствительность параметров: эффективность стратегии достаточно чувствительна к таким параметрам, как "многофактор".
  3. Высокая волатильность: стратегия может часто открывать и закрывать позиции в условиях высокой волатильности рынка, потенциально приносящие дополнительные расходы на сдвиг и комиссионные.

Меры контроля риска:

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

Руководство по оптимизации

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

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

Резюме

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


/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
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/
// © lagerta13
//@version=4
strategy("Grid A.", shorttitle="Grid(A)", overlay=true, format=format.price, precision=4, pyramiding = 100)

input_tf=input("15", "Started TimeFrame", 
 options = ["1", "5", "15", "30", "1H", "4H", "1D", "1W", "1M"],
 group="TimeFrame") 

// avg_tf=input("5", "Average TimeFrame", 
//  options = ["1", "5", "15", "30", "1H", "4H", "1D", "1W", "1M"],
//  group="TimeFrame")

slip_Hilo = input(3.0, "Slippage by open order", group="Strategy Settings")
start_lot = input(0.01, "Start lot", group="Strategy Settings")
start_avg = input(2, "Started average since Order #", group="Strategy Settings")
MaxTrades_Hilo = input(10, "Max Open Orders", group="Strategy Settings")
dropdown_selection = input("Only Long", "Direction", options=["Only Long", "Only Short", "Long & Short"],
 group="Strategy Settings")
type_selection = input("By Close", "Type input", options=["By Close", "By grid line"],
 group="Strategy Settings")

multifactor = input(1.5, "Multifactor", group="Strategy Settings")
precision_lot = input(2, "Number of precision", group="Strategy Settings")
take_profit = input(1, "TakeProfit", group="Strategy Settings")

// PipStep_S1 = input(30)
// PipStepX_S1 = input(1.2)
// dinamicStep = input(false, "Dinamic Step for AVG")

get_size_lot_order(number, multi, prec, avg_from, lot_from) =>
	res = lot_from
	for i = 1 to number
		if i >= avg_from
			res := round(res * multi, precision = prec)
	res

var float[] entry_levels = array.new_float(MaxTrades_Hilo + 1)

for i = 0 to MaxTrades_Hilo
    array.push(entry_levels, 0)

gridSize = input(0.5, title="Grid Size")
gridLevels = int(close / gridSize) * gridSize

var int num_open_orders = 0
var float sum_price_orders = 0
var float entry_lot = 0

buy_condition = num_open_orders < MaxTrades_Hilo and gridLevels[0]<gridLevels[1] and dropdown_selection != "Only Short"

if (buy_condition)

    if num_open_orders == 0
        lot = get_size_lot_order(num_open_orders, multifactor, precision_lot, start_avg, start_lot)
        sum_price_orders := sum_price_orders + gridLevels[1] * lot 

        strategy.entry("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]+slip_Hilo) 
        // strategy.order("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]) 

        array.set(entry_levels, num_open_orders, gridLevels[1])

        entry_lot := entry_lot + lot
        num_open_orders := num_open_orders + 1

    else
        if gridLevels[1] < (array.get(entry_levels, num_open_orders - 1))
            lot = get_size_lot_order(num_open_orders, multifactor, precision_lot, start_avg, start_lot)
            sum_price_orders := sum_price_orders + gridLevels[1] * lot 
            entry_lot := entry_lot + lot

            strategy.entry("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]+slip_Hilo) 

            // +" S:" + tostring(sum_price_orders / (entry_lot)) + " Prev:" + tostring(array.get(entry_levels, num_open_orders - 1))
            // strategy.order("buy" + tostring(num_open_orders), true, qty=lot, limit=gridLevels[1]) 
            array.set(entry_levels, num_open_orders, gridLevels[1])

            num_open_orders := num_open_orders + 1


take = sum_price_orders > 0 and take_profit + (sum_price_orders / entry_lot) < high ? high : na
plotshape(take, location = location.belowbar, color = color.white)


strategy.exit("tp", comment = "TP " + tostring(num_open_orders), qty = entry_lot, limit = take_profit + (sum_price_orders / entry_lot))


if sum_price_orders > 0 and take_profit + (sum_price_orders / entry_lot) <= high
    num_open_orders := 0
    sum_price_orders := 0
    entry_lot := 0
    for i = 0 to MaxTrades_Hilo
        array.set(entry_levels, i, 0)

plot(gridLevels, color=color.blue, style=plot.style_circles, linewidth=2)

 

Больше