Strategi berasaskan kad


Tarikh penciptaan: 2024-02-19 15:07:33 Akhirnya diubah suai: 2024-02-19 15:07:33
Salin: 1 Bilangan klik: 593
1
fokus pada
1617
Pengikut

Strategi berasaskan kad

Gambaran keseluruhan

Ini adalah strategi perdagangan automatik berdasarkan bentuk kad. Strategi ini mengawal risiko dengan mengenal pasti pelbagai isyarat bentuk kad, masuk apabila syarat bentuk sesuai, dan menetapkan stop loss, stop stop dan tracking stop loss.

Prinsip Strategi

Strategi ini mengiktiraf bentuk kad berikut sebagai isyarat masuk: bentuk pakej, bentuk paksaan, bentuk menelan, bentuk bintang terang, bentuk awan gelap, bentuk garisan, bentuk tentera tiga, bentuk tangga, dan lain-lain. Apabila anda mengesan isyarat beli di atas, masuk lebih banyak; apabila anda mengesan isyarat menjual, masuk kosong.

Di samping itu, strategi juga menetapkan stop loss, stop stop dan tracking stop loss untuk mengawal risiko. Khususnya, titik stop loss ditetapkan sebagai peratusan tertentu di bawah harga masuk, titik stop loss ditetapkan sebagai nilai tetap di atas harga masuk, dan tracking stop loss adalah titik dinamik tertentu di atas harga masuk.

Perlu ditekankan bahawa strategi ini juga menetapkan masa perdagangan, di mana semua kedudukan akan dihapuskan pada masa perdagangan yang ditentukan oleh strategi, untuk mengelakkan risiko malam.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah menggunakan bentuk kad sebagai penunjuk teknikal yang berkesan sebagai asas untuk masuk. Banyak data sejarah menunjukkan bahawa apabila bentuk K-line tertentu muncul, ia mungkin menandakan perubahan dalam hubungan bekalan dan permintaan dan psikologi pasaran, yang memberikan masa yang baik untuk masuk kita.

Kelebihan lain ialah mekanisme kawalan risiko yang lengkap. Sama ada berhenti, berhenti atau mengesan berhenti, anda boleh menghalang maksimum kerugian di luar julat yang boleh diterima dan mengawal risiko.

Akhirnya, strategi beroperasi secara fleksibel, dengan menyesuaikan parameter bentuk dan parameter kawalan risiko untuk menyesuaikan diri dengan varieti dan keutamaan perdagangan yang berbeza.

Analisis risiko

Risiko terbesar dalam strategi ini adalah ketidakstabilan bentuk kad sebagai penunjuk teknikal itu sendiri. Walaupun bentuk kad dapat mencerminkan perubahan trend pasaran dengan jelas, tetapi juga mudah dipengaruhi oleh turun naik pasaran secara rawak, kemungkinan isyarat salah tidak rendah.

Di samping itu, tidak ada kaitan sebab-sebab antara bentuk kad dan perubahan harga yang disahkan selepas kejadian. Walaupun bentuk tipikal dikesan, kebarangkalian harga masuk ke arah yang bertentangan dengan ekspektasi bentuk wujud.

Untuk mengurangkan risiko yang disebutkan di atas, selain mematuhi peraturan berhenti, berhenti, dan berhenti, anda juga boleh mempertimbangkan untuk menggabungkannya dengan petunjuk lain yang lebih stabil, untuk mengelakkan risiko yang mungkin timbul dari satu petunjuk teknikal.

Arah pengoptimuman

Memandangkan keterbatasan kestabilan bentuk kad, ia boleh digabungkan dengan indikator yang lebih stabil. Ini boleh digunakan untuk menyaring masa masuk ke dalam permainan dan mengurangkan kemungkinan perdagangan bising.

Satu lagi arah pengoptimuman yang mungkin adalah dengan menggunakan kaedah pembelajaran mesin. Melalui rangkaian saraf, banyak data sejarah dilatih untuk membina model hubungan statistik antara bentuk dan pergerakan harga sebenar. Ini dapat meningkatkan ketepatan isyarat bentuk.

Akhirnya, strategi ini boleh digunakan sebagai kerangka asas dan dioptimumkan dengan algoritma yang lebih kompleks untuk menyesuaikan diri dengan perdagangan frekuensi tinggi. Contohnya, cara menghentikan kerugian yang lebih halus, atau pemodelan kompleks yang menggabungkan lebih banyak antara muka data melalui bahasa lanjutan.

ringkaskan

Secara keseluruhannya, strategi ini menggunakan bentuk kad sebagai petunjuk teknikal yang berkesan sebagai isyarat masuk, menetapkan risiko kawalan logik berhenti, berhenti, dan kawalan logik berhenti yang baik. Ini adalah strategi yang layak untuk diuji di lapangan.

Kod sumber strategi
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//DanyChe
//The script allows you to test popular candlestick patterns on various instruments and timeframes. In addition, you can configure risk management (if the value is zero, it means the function is disabled), and you can also specify the time of the trading session (for example, so that the positions are not transferred to the next day). 
//The author is grateful to JayRogers and Phi35, their code examples helped a lot in writing the strategy.
strategy("Candle Patterns Strategy", shorttitle="CPS", overlay=true)

//--- Patterns Input ---

OnEngulfing = input(defval=true, title="Engulfing")
OnHarami = input(defval=true, title="Harami")
OnPiercingLine = input(defval=true, title="Piercing Line / Dark Cloud Cover")
OnMorningStar = input(defval=true, title="Morning Star / Evening Star ")
OnBeltHold = input(defval=true, title="Belt Hold")
OnThreeWhiteSoldiers = input(defval=true, title="Three White Soldiers / Three Black Crows")
OnThreeStarsInTheSouth = input(defval=true, title="Three Stars in the South")
OnStickSandwich = input(defval=true, title="Stick Sandwich")
OnMeetingLine = input(defval=true, title="Meeting Line")
OnKicking = input(defval=true, title="Kicking")
OnLadderBottom = input(defval=true, title="Ladder Bottom")

//--- Risk Management Input ---

inpsl = input(defval = 100, title="Stop Loss", minval = 0)
inptp = input(defval = 1000, title="Take Profit", minval = 0)
inptrail = input(defval = 40, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
sl = inpsl >= 1 ? inpsl : na
tp = inptp >= 1 ? inptp : na
trail = inptrail >= 1 ? inptrail : na

//--- Session Input ---

sess = input(defval = "0000-0000", title="Trading session")
t = time('240', sess)
session_open = na(t) ? false : true

// --- Candlestick Patterns ---

//Engulfing 
bullish_engulfing = high[0]>high[1] and low[0]<low[1] and open[0]<open[1] and close[0]>close[1] and close[0]>open[0] and close[1]<close[2] and close[0]>open[1] ? OnEngulfing : na
bearish_engulfing = high[0]>high[1] and low[0]<low[1] and open[0]>open[1] and close[0]<close[1] and close[0]<open[0] and close[1]>close[2] and close[0]<open[1] ? OnEngulfing : na

//Harami
bullish_harami =  open[1]>close[1] and close[1]<close[2] and open[0]>close[1] and open[0]<open[1] and close[0]>close[1] and close[0]<open[1] and high[0]<high[1] and low[0]>low[1] and close[0]>=open[0] ? OnHarami : na
bearish_harami =   open[1]<close[1] and close[1]>close[2] and open[0]<close[1] and open[0]>open[1] and close[0]<close[1] and close[0]>open[1] and high[0]<high[1] and low[0]>low[1] and close[0]<=open[0] ? OnHarami : na

//Piercing Line/Dark Cloud Cover 
piercing_line = close[2]>close[1] and open[0]<low[1] and close[0]>avg(open[1],close[1]) and close[0]<open[1] ? OnPiercingLine : na
dark_cloud_cover = close[2]<close[1] and open[0]>high[1] and close[0]<avg(open[1],close[1]) and close[0]>open[1] ? OnPiercingLine : na

//Morning Star/Evening Star
morning_star = close[3]>close[2] and close[2]<open[2] and open[1]<close[2] and close[1]<close[2] and open[0]>open[1] and open[0]>close[1] and close[0]>close[2] and open[2]-close[2]>close[0]-open[0] ? OnMorningStar : na
evening_star = close[3]<close[2] and close[2]>open[2] and open[1]>close[2] and close[1]>close[2] and open[0]<open[1] and open[0]<close[1] and close[0]<close[2] and close[2]-open[2]>open[0]-close[0] ? OnMorningStar : na

//Belt Hold
bullish_belt_hold = close[1]<open[1] and low[1]>open[0] and close[1]>open[0] and open[0]==low[0] and close[0]>avg(close[0],open[0]) ? OnBeltHold :na
bearish_belt_hold =  close[1]>open[1] and high[1]<open[0] and close[1]<open[0] and open[0]==high[0] and close[0]<avg(close[0],open[0]) ? OnBeltHold :na

//Three White Soldiers/Three Black Crows 
three_white_soldiers = close[3]<open[3] and open[2]<close[3] and close[2]>avg(close[2],open[2]) and open[1]>open[2] and open[1]<close[2] and close[1]>avg(close[1],open[1]) and open[0]>open[1] and open[0]<close[1] and close[0]>avg(close[0],open[0]) and high[1]>high[2] and high[0]>high[1] ? OnThreeWhiteSoldiers : na
three_black_crows =  close[3]>open[3] and open[2]>close[3] and close[2]<avg(close[2],open[2]) and open[1]<open[2] and open[1]>close[2] and close[1]<avg(close[1],open[1]) and open[0]<open[1] and open[0]>close[1] and close[0]<avg(close[0],open[0]) and low[1]<low[2] and low[0]<low[1] ? OnThreeWhiteSoldiers : na

//Three Stars in the South
three_stars_in_the_south = open[3]>close[3] and open[2]>close[2] and open[2]==high[2] and open[1]>close[1] and open[1]<open[2] and open[1]>close[2] and low[1]>low[2] and open[1]==high[1] and open[0]>close[0] and open[0]<open[1] and open[0]>close[1] and open[0]==high[0] and close[0]==low[0] and close[0]>=low[1] ? OnThreeStarsInTheSouth : na

//Stick Sandwich
stick_sandwich = open[2]>close[2] and open[1]>close[2] and open[1]<close[1] and open[0]>close[1] and open[0]>close[0] and close[0]==close[2] ? OnStickSandwich : na

//Meeting Line 
bullish_ml = open[2]>close[2] and open[1]>close[1] and close[1]==close[0] and open[0]<close[0] and open[1]>=high[0] ? OnMeetingLine : na
bearish_ml = open[2]<close[2] and open[1]<close[1] and close[1]==close[0] and open[0]>close[0] and open[1]<=low[0] ? OnMeetingLine : na

//Kicking 
bullish_kicking =  open[1]>close[1] and open[1]==high[1] and close[1]==low[1] and open[0]>open[1] and open[0]==low[0] and close[0]==high[0] and close[0]-open[0]>open[1]-close[1] ? OnKicking : na
bearish_kicking = open[1]<close[1] and open[1]==low[1] and close[1]==high[1] and open[0]<open[1] and open[0]==high[0] and close[0]==low[0] and open[0]-close[0]>close[1]-open[1] ? OnKicking : na

//Ladder Bottom
ladder_bottom = open[4]>close[4] and open[3]>close[3] and open[3]<open[4] and open[2]>close[2] and open[2]<open[3] and open[1]>close[1] and open[1]<open[2] and open[0]<close[0] and open[0]>open[1] and low[4]>low[3] and low[3]>low[2] and low[2]>low[1] ? OnLadderBottom : na

// ---Plotting ---

plotshape(bullish_engulfing, text='Engulfing', style=shape.triangleup, color=#1FADA2, editable=true, title="Bullish Engulfing Text")
plotshape(bearish_engulfing,text='Engulfing', style=shape.triangledown, color=#F35A54, editable=true, title="Bearish Engulfing Text")
plotshape(bullish_harami,text='Harami', style=shape.triangleup, color=#1FADA2, editable=true, title="Bullish Harami Text")
plotshape(bearish_harami,text='Harami', style=shape.triangledown, color=#F35A54, editable=true, title="BEarish Harami Text")
plotshape(piercing_line,text='Piercing Line', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(dark_cloud_cover,text='Dark Cloud Cover', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(morning_star,text='Morning Star', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(evening_star,text='Evening Star', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(bullish_belt_hold,text='Belt Hold', style=shape.triangleup, color=#1FADA2, editable=false)    
plotshape(bearish_belt_hold,text='Belt Hold', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(three_white_soldiers,text='Three White Soldiers', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(three_black_crows,text='Three Black Crows', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(three_stars_in_the_south,text='3 Stars South', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(stick_sandwich,text='Stick Sandwich', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bullish_ml,text='Meeting Line', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bearish_ml,text='Meeting Line', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(bullish_kicking,text='Kicking', style=shape.triangleup, color=#1FADA2, editable=false)
plotshape(bearish_kicking,text='Kicking', style=shape.triangledown, color=#F35A54, editable=false)
plotshape(ladder_bottom,text='Ladder Bottom', style=shape.triangleup, color=#1FADA2, editable=false)

// --- STRATEGY ---

SignalUp = bullish_engulfing or bullish_harami or piercing_line or morning_star or bullish_belt_hold or three_white_soldiers or three_stars_in_the_south or stick_sandwich or bullish_ml or bullish_kicking or ladder_bottom
SignalDown = bearish_engulfing or bearish_harami or dark_cloud_cover or evening_star or bearish_belt_hold or three_black_crows or bearish_ml or bearish_kicking

strategy.entry("long", true, when = SignalUp and session_open)
strategy.entry("short", false, when = SignalDown and session_open)
strategy.close("long", when = not session_open)
strategy.close("short", when = not session_open)
strategy.exit("Risk Exit long", from_entry = "long", profit = tp, trail_points = trail, loss = sl)
strategy.exit("Risk Exit short", from_entry = "short", profit = tp, trail_points = trail, loss = sl )