
Ini adalah strategi perdagangan yang menggunakan saluran tangki pada skala waktu yang lebih banyak untuk menilai titik masuk dan keluar. Gagasan utama strategi ini adalah: menilai arah tren pada skala waktu yang lebih lama untuk menemukan waktu masuk; menilai pembalikan tren pada skala waktu yang lebih pendek untuk menemukan waktu keluar.
Strategi ini terutama menggunakan konsep saluran Tongji. Saluran Tongji terdiri dari saluran atas, saluran bawah, dan saluran tengah. Lebar saluran bervariasi sesuai dengan skala waktu. Di sini kita membangun saluran Tongji dengan skala waktu yang berbeda, yaitu:
Logika masuk: Ketika harga menembus garis atas dari saluran skala waktu yang lebih lama, waktu masuk dinilai sebagai waktu masuk multihead. Untuk menghindari terjadinya terobosan palsu, kami meminta setidaknya 1 dari 3 garis K yang terakhir dengan harga penutupan K lebih tinggi dari garis atas dari saluran K tersebut, sehingga dapat menghindari terobosan palsu yang disebabkan oleh ekspansi jangka pendek yang berlebihan.
Logika Keluar: Ketika harga turun di bawah saluran skala waktu yang lebih pendek, pertimbangkan waktu untuk keluar dari posisi kosong. Kami juga meminta setidaknya satu dari 3 garis K terakhir untuk ditutup dengan harga di bawah saluran garis K tersebut, sehingga validitas terobosan dapat dikonfirmasi dan tidak terikat.
Strategi ini menggabungkan keuntungan dari trend tracking dan reversal trading. Skala waktu yang lebih lama menentukan arah trend, dan skala waktu yang lebih pendek menentukan reversal lokal, yang keduanya dapat menangkap fluktuasi lokal dalam tren.
Dengan menggunakan analisis skala waktu yang lebih banyak, Anda dapat menangani masalah false breakout dengan lebih baik, sehingga masuk dan keluar lebih jelas dan efektif.
Dengan parameter yang dioptimalkan, dapat beradaptasi dengan berbagai varietas dan lingkungan pasar.
Strategi ini sangat sensitif terhadap parameter, dan dapat menghasilkan hasil yang sangat berbeda dengan parameter yang berbeda. Perlu pengujian dan pengoptimalan yang cukup untuk menemukan kombinasi parameter yang optimal.
Dalam situasi yang bergejolak, strategi dapat menghasilkan banyak sinyal perdagangan, yang menyebabkan overtrading. Anda dapat mengontrol kerugian tunggal dengan mengkonfigurasi stop loss.
Strategi ini tidak mempertimbangkan logika penilaian tren skala besar, dan mungkin gagal pada titik konversi bullish dan bearish. Strategi ini dapat dikombinasikan dengan indikator lain untuk menilai tren skala besar.
Optimalkan parameter untuk menemukan kombinasi optimal. Parameter seperti panjang siklus optimasi, jenis saluran.
Tambahkan Stop Loss Logic. Konfigurasi Stop Loss Mobile yang masuk akal, kendalikan Single Loss.
Tergabung dengan indikator lain untuk menilai tren tingkat besar. Misalnya, EMA, K-line channel, indikator MAC, dll.
Strategi ini secara keseluruhan merupakan strategi pemecahan saluran multi-skala waktu yang khas. Strategi ini menggabungkan dengan baik keuntungan dari pelacakan tren dan perdagangan reversal, dengan penilaian saluran dari skala waktu yang berbeda untuk mencapai efek menangkap fluktuasi lokal dalam tren. Jika parameter dioptimalkan, efeknya bagus di pasar yang jelas tren.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 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/
// © venkyrocker7777
//@version=5
strategy('Donchain channel based investment strategy', shorttitle='Donchain channel strategy', overlay=true)
Length = input.int(21, minval=1)
xPrice = close
xvnoise = math.abs(xPrice - xPrice[1])
nAMA = 0.0
nfastend = 0.666
nslowend = 0.0645
nsignal = math.abs(xPrice - xPrice[Length])
nnoise = math.sum(xvnoise, Length)
nefratio = nnoise != 0 ? nsignal / nnoise : 0
nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2)
nAMA := nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))
plot(nAMA, color=color.new(color.blue, 0), title='KAMA')
// Function to get Lower Channel, Upper Channel, Middle Channel for a period length
getLCUCMC(PeriodLength) =>
lowestValueInThePeriod = ta.lowest(PeriodLength) // LC
highestValueInThePeriod = ta.highest(PeriodLength) // UC
middleChannelInTheperiod = math.avg(highestValueInThePeriod, lowestValueInThePeriod) // MC
// Returns Lower Channel, Upper Channel, Middle Channel for a period length
[lowestValueInThePeriod, highestValueInThePeriod, middleChannelInTheperiod]
// Longer time frame for entry
longerPeriod = 52
// Shorter time frame for exit
shorterPeriod = 12
if timeframe.period == 'D'
// Longer time frame for entry
longerPeriod := 52 * 5
// Shorter time frame for exit
shorterPeriod := 12 * 5
shorterPeriod
if timeframe.period == 'M'
// Longer time frame for entry
longerPeriod := 12
// Shorter time frame for exit
shorterPeriod := 3
shorterPeriod
// Get Lower Channel, Upper Channel, Middle Channel for longerPeriod, shorterPeriod
[lowestValueInTheLongerPeriodLength, highestValueInTheLongerPeriodLength, middleChannelInLongerperiod] = getLCUCMC(longerPeriod)
[lowestValueInTheShorterPeriodLength, highestValueInTheShorterPeriodLength, middleChannelInShorterperiod] = getLCUCMC(shorterPeriod)
// Plot Upper Channel of longerPeriod in dark green
plot(highestValueInTheLongerPeriodLength, 'highestValueInTheLongerPeriodLength', color=color.new(color.green, 0))
// Plot Lower Channel of shorterPeriod in dark red
plot(lowestValueInTheShorterPeriodLength, 'lowestValueInTheShorterPeriodLength', color=color.new(color.red, 0))
// Entry Plan
// Will start to see if we can enter when high crosses up longer period high (high >= highestValueInTheLongerPeriodLength)
// Check if any of the three past candles and enter when any of the 3 past candles satisfy
// 1) high of that candle >= highestValueInTheLongerPeriodLength of that candle (high[i] >= highestValueInTheLongerPeriodLength[i])
// 2) close of entry point consideration candle is above close of that candle (close > close[i])
isThisPointAnEntry() =>
// Check last 3 bars
isThisPointAnEntry = false
offset = 0
for i = 1 to 3 by 1
isCurrentCandleALongerPeriodHigh = high >= highestValueInTheLongerPeriodLength
isCurrentCandleCloseGreaterThanPreiousIthOne = close > close[i]
isPreviousIthCandleAlsoALongerPeriodHigh = high[i] >= highestValueInTheLongerPeriodLength[i]
isThisPointAnEntry := isCurrentCandleALongerPeriodHigh and isCurrentCandleCloseGreaterThanPreiousIthOne and isPreviousIthCandleAlsoALongerPeriodHigh
if isThisPointAnEntry
offset := -i
break
[isThisPointAnEntry, offset]
// Exit Plan - same as entry plan, with things reversed and also on a shorter time frame
// Will start to see if we should exit when low crosses down longer period low (low <= lowestValueInTheShorterPeriodLength)
// Check if any of the three past candles and exit when any of the 3 past candles satisfy
// 1) low of that candle <= highestValueInTheLongerPeriodLength of that candle (low[i] <= lowestValueInTheShorterPeriodLength[i])
// 2) close of exit point consideration candle is below close of that candle (close < close[i])
isThisPointAnExit() =>
// Check last 3 bars
isThisPointAnExit = false
for i = 1 to 3 by 1
isCurrentCandleAShorterPeriodLow = low <= lowestValueInTheShorterPeriodLength
isCurrentCandleCloseLesserThanPreiousIthOne = close < close[i]
isPreviousIthCandleAlsoAShorterPeriodLow = low[i] <= lowestValueInTheShorterPeriodLength[i]
isThisPointAnExit := isCurrentCandleAShorterPeriodLow and isCurrentCandleCloseLesserThanPreiousIthOne and isPreviousIthCandleAlsoAShorterPeriodLow
break
isThisPointAnExit
[isEntry, offset] = isThisPointAnEntry()
if isEntry
strategy.entry('Buy', strategy.long)
strategy.close_all(when=isThisPointAnExit() == true)
if year(timenow) == year(time) and month(timenow) == month(time) and dayofmonth(timenow) - 2 == dayofmonth(time)
strategy.close_all()