
Chiến lược hút tiền hai sao một đám mây qua mặt trăng là một chiến lược giao dịch định lượng kết hợp các chỉ số phân tích kỹ thuật thị trường một đám mây và lọc phạm vi. Chiến lược này sử dụng một đám mây chỉ số để đánh giá xu hướng thị trường và hỗ trợ quan trọng, mức kháng cự, và hình dạng đường K để tạo ra tín hiệu giao dịch. Đồng thời, kết hợp lọc phạm vi để kiểm soát tần suất giao dịch và rủi ro.
Chiến lược này chủ yếu dựa trên một chỉ số đám mây và hình dạng đường K để đánh giá xu hướng thị trường. Một chỉ số đám mây bao gồm các đường chuyển tiếp, đường chuẩn và đường đám mây, mối quan hệ chéo của chúng có thể đánh giá xu hướng thị trường; đồng thời đường đám mây có thể hoạt động như hỗ trợ và kháng cự. Chiến lược này điều chỉnh độ nhạy của một đường đám mây bằng cách thiết lập các kết hợp các tham số khác nhau. Ngoài ra, chiến lược này thông qua nhận dạng hình dạng, tạo ra tín hiệu mua khi đi qua đường cơ sở trên đường chuyển tiếp và tạo ra tín hiệu bán khi đi qua.
Ngoài ra, chiến lược cũng đặt bộ lọc phạm vi ngày, chỉ giao dịch trong phạm vi ngày được chỉ định, điều này có thể kiểm soát tần suất giao dịch của chiến lược. Đồng thời, thiết lập dừng lỗ cũng có thể làm giảm rủi ro, tùy chọn stoploss sẽ dừng lỗ khi giá chạy theo hướng bất lợi.
Có thể cải thiện và kiểm soát rủi ro bằng cách điều chỉnh các tham số chỉ số của một đám mây, tối ưu hóa phạm vi ngày, sửa điểm dừng.
Một đám mây đi qua mặt trăng hai sao hút tiền chiến lược tổng hợp sử dụng một đám mây chỉ số, nhận dạng K-đường, phạm vi lọc các phương pháp khác để đánh giá xu hướng thị trường, có thể nắm bắt rõ ràng hơn xu hướng. Bằng cách điều chỉnh tham số, kiểm soát rủi ro và các phương tiện khác, có thể có được hiệu quả chiến lược tốt hơn.
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)
xlowest_(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := min(x, v)
x
xlowest(src, len) =>
na(src[len]) ? xlowest_(src, len) : lowest(src, len)
xhighest_(src, len) =>
x = src
for i = 1 to len - 1
v = src[i]
if (na(v))
break
x := max(x, v)
x
xhighest(src, len) =>
na(src[len]) ? xhighest_(src, len) : highest(src, len)
dropn(src, n) =>
na(src[n]) ? na : src
ichiConversionPeriods(presets) =>
if presets == "Cpt 20 60 120 30"
20
else
if presets == "Cpt 10 30 60 30"
10
else
if presets == "Std 18 52 104 26"
18
else
9
ichiBasePeriods(presets) =>
if presets == "Cpt 20 60 120 30"
60
else
if presets == "Cpt 10 30 60 30"
30
else
if presets == "Std 18 52 104 26"
52
else
26
ichiLaggingSpan2Periods(presets) =>
if presets == "Cpt 20 60 120 30"
120
else
if presets == "Cpt 10 30 60 30"
60
else
if presets == "Std 18 52 104 26"
104
else
52
ichiDisplacement(presets) =>
if presets == "Cpt 20 60 120 30"
30
else
if presets == "Cpt 10 30 60 30"
30
else
if presets == "Std 18 52 104 26"
26
else
26
scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets", options=["Cpt 20 60 120 30", "Cpt 10 30 60 30", "Std 18 52 104 26", "Std 9 26 52 26"], defval="Cpt 20 60 120 30")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")
conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"
lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)
lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs
donchian(len) =>
avg(xlowest(lowsp, len), xhighest(highsp, len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay = input(defval = 3, title = "From Day", minval = 1)
FromYear = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth = input(defval = 1, title = "To Month", minval = 1)
ToDay = input(defval = 1, title = "To Day", minval = 1)
ToYear = input(defval = 9999, title = "To Year", minval = 2014)
golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)
strategy.entry("Buy", strategy.long, when=(golong and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
strategy.entry("Sell", strategy.short, when=(goshort and (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))))
conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2
plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")
p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)