Kedudukan dinamik Martingale panjang berasaskan grid menambah strategi perdagangan grid


Tarikh penciptaan: 2024-03-22 15:12:33 Akhirnya diubah suai: 2024-03-22 15:12:33
Salin: 0 Bilangan klik: 672
1
fokus pada
1224
Pengikut

Kedudukan dinamik Martingale panjang berasaskan grid menambah strategi perdagangan grid

Gambaran Keseluruhan Strategi

Strategi ini adalah strategi perdagangan grid Martingale berganda yang berasaskan grid. Idea utamanya adalah untuk menyesuaikan jumlah kenaikan setiap kali apabila harga menyentuh garisan grid, mengikut jumlah kedudukan yang telah ada, sambil menetapkan jumlah maksimum yang dibuka. Apabila harga naik menyentuh harga tutup, semua kedudukan berganda dipadamkan.

Prinsip Strategi

  1. Berdasarkan parameter “Grid Size”, harga dibahagikan kepada grid yang sejajar.
  2. Di setiap garisan grid, anda boleh memasang harga terhad berganda.
  3. Harga semasa menyentuh garisan grid:
    • Jika jumlah dagangan yang dibuka pada masa ini adalah 0, anda akan membuka dagangan dengan kedudukan permulaan “start_lot”.
    • Jika jumlah kedudukan yang dibuka pada masa ini lebih besar daripada 0, dan harga grid semasa lebih rendah daripada harga pembukaan kedudukan sebelumnya, maka kedudukan multi-kepala baru dibuka pada harga grid semasa, dan saiz kedudukan adalah “multifactor” dua kali ganda daripada kedudukan sebelumnya.
  4. Jumlah maksimum yang boleh dibuka adalah dikawal oleh parameter “Max Open Orders”.
  5. Selepas membuka kedudukan, letakkan barisan stop di tempat yang lebih tinggi daripada harga purata pembukaan kedudukan di titik “TakeProfit”.
  6. Apabila harga semasa menyentuh garis hentian, sebarkan semua kedudukan berlebih dan atur semula parameter.

Dengan cara ini, kedudukan meningkat secara beransur-ansur semasa kejatuhan harga, dan keuntungan berakhir apabila harga naik lagi dan menyentuh garis henti.

Kelebihan Strategik

  1. Peningkatan kedudukan secara dinamik: Mengubah kedudukan secara dinamik mengikut jumlah kedudukan yang dibuka pada masa ini, meningkatkan kedudukan secara beransur-ansur apabila pasaran terus menurun, meningkatkan potensi keuntungan strategi.
  2. Fleksibiliti parameter: dengan parameter seperti “Grid Size”, “start_lot”, “multifactor” ukuran grid, kedudukan awal, ganda kenaikan kedudukan dan sebagainya dapat dikendalikan secara fleksibel.
  3. Risiko boleh dikawal: Mengendalikan jumlah maksimum untuk membuka kedudukan melalui parameter “Max Open Orders” untuk mengelakkan terlalu banyak kedudukan. Pada masa yang sama, tetapkan garis berhenti, tutup tepat pada masanya apabila keuntungan diperoleh, mengawal penarikan balik.

Risiko Strategik

  1. Tidak terhad: Strategi ini tidak menetapkan terhad, dan mungkin menghadapi risiko kerugian yang lebih besar jika pasaran terus menurun.
  2. Sensitiviti parameter: prestasi strategi lebih sensitif terhadap parameter seperti “multifactor”, dan parameter yang tidak sesuai boleh membawa risiko.
  3. Ketidaktentuan tinggi: Strategi ini sering membuka dan menutup kedudukan apabila terdapat ketidaktentuan yang besar dalam pasaran, yang boleh membawa kepada slippage tambahan dan kos bayaran.

Tindakan pencegahan risiko:

  1. Menggabungkan toleransi risiko, parameter seperti “multifactor” ditetapkan dengan berhati-hati. Logik stop-loss boleh ditambahkan ke dalam kod jika perlu.
  2. Memantau dan mensimulasikan transaksi dengan teliti, pilih parameter yang sesuai.
  3. Strategi penilaian prestasi dalam keadaan yang bergelombang tinggi. Jika perlu, risiko boleh dielakkan dengan cara seperti menyesuaikan parameter atau mengehadkan senario penggunaan.

Arah pengoptimuman

  1. Menambah penilaian trend: Pada masa pembukaan kedudukan berdasarkan pergerakan harga menilai trend, jika trend menurun, tidak membuka kedudukan multihead baru, untuk mengurangkan risiko.
  2. Dinamika penyesuaian berhenti: mengikut pergerakan harga, kadar turun naik dan lain-lain petunjuk, penyesuaian posisi berhenti secara dinamik, meningkatkan titik berhenti dengan sewajarnya ketika trend kuat, meningkatkan kemampuan keuntungan.
  3. Pengurusan kedudukan yang dioptimumkan: Apabila menambah kedudukan, selain mempertimbangkan kelipatan kenaikan kedudukan, anda juga boleh menggabungkan dana akaun, jumlah kedudukan semasa, dan lain-lain, untuk mengawal jumlah kenaikan kedudukan dengan lebih baik.
  4. Gabungan dengan isyarat lain: Gabungan perdagangan grid dengan isyarat indikator lain seperti penilaian trend, penilaian goyah, penilaian komprehensif, panduan perdagangan.

Pengoptimuman ini dapat meningkatkan fleksibiliti strategi, lebih memahami keadaan pasaran, meningkatkan potensi keuntungan dan kestabilan. Pada masa yang sama, dengan kawalan kedudukan dan pengurusan risiko yang lebih halus, mengurangkan pulangan dan meningkatkan nisbah risiko-keuntungan.

ringkaskan

Strategi perdagangan grid Martingale yang berpusat pada grid, berusaha untuk menurunkan nilai rata-rata kedudukan semasa penurunan harga dengan cara meningkatkan kedudukan secara beransur-ansur, dan mendapat keuntungan ketika kenaikan. Strategi ini mempunyai fleksibiliti yang kuat melalui tetapan parameter. Tetapi juga berpotensi berisiko tinggi, risiko perlu dinilai dan dikawal dengan teliti.

Kod sumber strategi
/*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)