
Gagasan utama strategi ini adalah untuk membuat keputusan untuk melakukan lebih atau kosong berdasarkan warna N baris K terakhir. Jika N baris K terakhir adalah hijau, lakukan lebih banyak; jika N baris K terakhir adalah merah, kosong.
Strategi ini bergantung kepada beberapa parameter penting:
Logik utama adalah untuk mengelilingi hanya K-garis yang paling dekat dengan numCandlesToCheck, dan secara real-time mengkaji jumlah K-garis hijau dan K-garis merah yang muncul secara berturut-turut. Tandakan lastNCandlesRed sebagai benar jika K-garis merah berturut-turut ≥numCandlesToCheck. Tandakan lastNCandlesGreen sebagai benar jika K-garis hijau berturut-turut ≥numCandlesToCheck.
Apabila lastNCandlesGreen adalah benar, jika argumen InverseLogic adalah palsu, maka lakukan lebih; jika benar, maka lakukan kosong. Sebaliknya, apabila lastNCandlesRed adalah benar, jika argumen InverseLogic adalah palsu, maka lakukan kosong; jika benar, maka lakukan lebih.
Tidak kira berapa banyak yang dikosongkan, barsSinceEntry akan diset semula menjadi 0 selepas membuka kedudukan. Apabila barsSinceEntry lebih besar daripada sama dengan numCandlesToExit, kedudukan semasa akan dipadamkan.
Ini adalah strategi yang menarik untuk menggunakan keputusan warna K-Line, dengan menambah parameter logik kebalikan, yang dapat menyesuaikan logik yang lebih banyak. Kelebihan utama:
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Untuk mengawal dan mengoptimumkan risiko tersebut, langkah-langkah berikut boleh diambil:
Strategi ini boleh dioptimumkan dengan cara berikut:
Strategi ini secara keseluruhan jelas dan mudah difahami, menggunakan warna garis K sederhana untuk menentukan bentuk isyarat perdagangan. Penyesuaian parameter strategi dapat membentuk perubahan kombinasi yang kaya, sehingga penyesuaian optimum dilakukan untuk keadaan dan varieti pasaran yang berbeza.
/*backtest
start: 2022-12-25 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Last Number of Candles", overlay=true)
// Define the condition for a green candle
isGreenCandle(candle) =>
close[candle] > open[candle]
// Define the condition for a red candle
isRedCandle(candle) =>
close[candle] < open[candle]
// Input to specify the number of candles to check
numCandlesToCheck = input(5, title="Number of Candles to Check")
numCandlesToExit = input(2, title="Number of Candles To Exit") // Corrected the input title
// Initialize variables to count consecutive green and red candles
var int consecutiveGreenCandles = 0
var int consecutiveRedCandles = 0
// Initialize barsSinceEntry outside the loop
var int barsSinceEntry = 0
// Loop through the last "numCandlesToCheck" candles
for i = 0 to numCandlesToCheck - 1
if isGreenCandle(i)
consecutiveGreenCandles := consecutiveGreenCandles + 1
consecutiveRedCandles := 0 // Reset the count for consecutive red candles
else if isRedCandle(i)
consecutiveRedCandles := consecutiveRedCandles + 1
consecutiveGreenCandles := 0 // Reset the count for consecutive green candles
// Check if the last "numCandlesToCheck" candles are green or red
lastNCandlesGreen = consecutiveGreenCandles >= numCandlesToCheck
lastNCandlesRed = consecutiveRedCandles >= numCandlesToCheck
// Calculate the quantity based on the investment value and current asset price
investmentValue = input(10000, title="Investment Value")
var assetPrice = close
var quantity = investmentValue / assetPrice
inverseLogic = input(false, title="inverseLogic")
// Entry condition: Open a buy order if the last "numCandlesToCheck" candles are green
if lastNCandlesGreen
if inverseLogic
strategy.entry("Short", strategy.long, qty = quantity)
else
strategy.entry("Buy", strategy.long, qty = quantity)// Reset barsSinceEntry when entering a trade
barsSinceEntry := 0
// Entry condition: Open a short order if the last "numCandlesToCheck" candles are red
if lastNCandlesRed
if inverseLogic
strategy.entry("Buy", strategy.long, qty = quantity)
else
strategy.entry("Short", strategy.short, qty = quantity)
// Reset barsSinceEntry when entering a trade
barsSinceEntry := 0
// Increment barsSinceEntry
barsSinceEntry := barsSinceEntry + 1
// Exit condition: Close the position after 2 bars
if barsSinceEntry >= numCandlesToExit
strategy.close("Buy")
strategy.close("Short")