이 전략은 그리드 기반의 긴 마틴게일 동적 포지션 그리드 거래 전략이다. 주요 아이디어는 가격이 그리드 라인을 타면 기존 포지션의 수에 따라 포지션 크기를 동적으로 조정하는 동시에 최대 총 오픈 포지션을 설정하는 것입니다. 가격이 상승하고 수익 수준을 달성하면 모든 긴 포지션은 종료됩니다.
이렇게하면, 하락 추세에 따라 포지션 크기가 점차 증가하고, 가격이 회복되어 수익을 취하는 수준에 도달하면 이윤이 취합니다.
위험 관리 조치:
이러한 최적화는 시장의 움직임을 더 잘 파악하기 위해 전략의 적응력을 향상시키고 수익 잠재력과 안정성을 향상시킬 수 있습니다. 동시에 더 정확한 위치 및 위험 관리는 마감량을 줄이고 위험/이익 비율을 향상시킬 수 있습니다.
이 그리드 기반의 긴 마틴게일 동적 포지션 그리드 거래 전략은 하락 추세 동안 평균 보유 가격을 낮추기 위해 점수를 점차 추가하고 가격이 상승할 때 이익을 취합니다. 전략은 매개 변수 설정을 통해 강력한 유연성을 제공합니다. 그러나 신중한 평가와 통제를 필요로하는 상당한 잠재적 위험을 가지고 있습니다. 트렌드 탐지, 동적 영리, 포지션 최적화 및 기타 기능을 추가 할 수 있다면 전략의 성능이 더욱 향상 될 수 있습니다. 전략은 가격이 그리드 라인을 때 자동으로 포지션을 열고 추가하고, 가격이 영리 수준에 도달하면 모든 포지션을 자동으로 닫는 기능을 실현합니다. 전반적인 논리는 비교적 명확하지만 최적화 할 여지가 있습니다. 전략은 시장 조건과 매개 변수를 철저하게 평가 한 후 신중하게 사용할 수 있습니다.
/*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)