
この戦略は,RSI,MACD,OBV,CCI,CMF,MFI,VWMACDなどの複数の技術指標を統合して,価格と取引量との間の偏差を検出し,潜在的な入場機会を識別します. この戦略は,高い変動率と深度またはVFI条件を満たしたときに取引信号を発信するユーザーディップ検出指標と組み合わせています. 戦略は,止損を追跡し,徐々にポジションを確立します.
RSI,MACD,OBV,CCI,CMF,MFI,VWMACDなどの指標を計算し,自己適応的線形回帰法で各指標と歴史価格の間の偏差を検出する.指標の革新が低いのに,価格が革新に追従しないとき,買い信号を発する.
ユーザ入力による波動率の値と深さのパーセントの値に基づいて,VFI指標のフィルターと組み合わせて,高波動と深さのテストに適合するK線で信号を発信する.
初回の多額の取引の後,価格が最後の多額の取引の一定比率を下回った場合 (設定可能) は,再び多額の取引をします.
トラッキング・ストップを用い,配置のストップ・プロフィールに達すると平仓する.
複数の要素の組み合わせで,価格と取引量指標の総合的な利用により,信号の信頼性が向上する.
自動適応線形回帰法による偏差検知で,人為的な判断を避けること.
波動率と深度/VFI検出指標を組み合わせると,逆転の機会を検出するのに役立ちます.
複数回の加仓により,価格の逆調を充分活用し,利潤をロックする有利なストップを追跡することができる.
多因子組合せ判断は複雑で,パラメータ最適化と識別効果からの逸脱が実績に影響を与える可能性がある.
単独のポジションのリスクは高く,判断の誤りが大きな損失を引き起こす可能性があります.
ポジションを慎重にコントロールする必要がある.
取引手数料が実際の利益に与える影響に注目してください.
異なるパラメータの組み合わせと指標の効果をテストし,好ましい配置。
ストップ・ロスの策略を追加し,単発と最大損失を制御します.
リスク分散のために,二方向取引の機会を考慮してください.
機械学習と組み合わせたパラメータの自動最適化.
この戦略は,複数の技術指標を統合して,入場時刻を識別し,同時に,ユーザ定義条件とVFI指標を活用して,偽信号をフィルタリングする.この戦略は,価格の逆転を利用して,トレンドの機会を掴むために,常にポジションを足す.しかし,判断ミスや一方的なポジションのリスクにも直面し,リスクを軽減し,利益の余地を増やすために,適切な指標パラメータやストップ・ストープ戦略を最適化する必要があります.
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mkose81
//@version=5
strategy("RSI ve MACD Uyumsuzluğu Stratejisi (Sadece Long)", overlay=true, max_bars_back=4000,use_bar_magnifier= true,pyramiding=40)
// RSI Hesaplama
rsi = ta.rsi(close, 14)
float botRSI = na
botRSI := ta.pivotlow(5, 5)
botcRSI = 0
botcRSI := botRSI ? 5 : nz(botcRSI[1]) + 1
newbotRSI = ta.pivotlow(5, 0)
emptylRSI = true
if not na(newbotRSI) and newbotRSI < low[botcRSI]
diffRSI = (newbotRSI - low[botcRSI]) / botcRSI
llineRSI = newbotRSI - diffRSI
for x = 1 to botcRSI - 1 by 1
if close[x] < llineRSI
emptylRSI := false
break
llineRSI -= diffRSI
emptylRSI
// Pozitif Uyumsuzluk Alım Sinyali - RSI
alRSI = 0
if emptylRSI and not na(newbotRSI)
if rsi[botcRSI] < rsi
alRSI := 1
// MACD Hesaplama
[macd, signal, _] = ta.macd(close, 21, 55, 8)
float botMACD = na
botMACD := ta.pivotlow(5, 5)
botcMACD = 0
botcMACD := botMACD ? 5 : nz(botcMACD[1]) + 1
newbotMACD = ta.pivotlow(5, 0)
emptylMACD = true
if not na(newbotMACD) and newbotMACD < low[botcMACD]
diffMACD = (newbotMACD - low[botcMACD]) / botcMACD
llineMACD = newbotMACD - diffMACD
for x = 1 to botcMACD - 1 by 1
if close[x] < llineMACD
emptylMACD := false
break
llineMACD -= diffMACD
emptylMACD
// Pozitif Uyumsuzluk Alım Sinyali - MACD
alMACD = 0
if emptylMACD and not na(newbotMACD)
if macd[botcMACD] < macd
alMACD := 1
// OBV Hesaplama ve Uyumsuzluk Tespiti
obv = ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0)
float botOBV = na
botOBV := ta.pivotlow(5, 5)
botcOBV = 0
botcOBV := botOBV ? 5 : nz(botcOBV[1]) + 1
newbotOBV = ta.pivotlow(5, 0)
emptylOBV = true
if not na(newbotOBV) and newbotOBV < obv[botcOBV]
diffOBV = (newbotOBV - obv[botcOBV]) / botcOBV
llineOBV = newbotOBV - diffOBV
for x = 1 to botcOBV - 1 by 1
if obv[x] < llineOBV
emptylOBV := false
break
llineOBV -= diffOBV
emptylOBV
// Pozitif Uyumsuzluk Alım Sinyali - OBV
alOBV = 0
if emptylOBV and not na(newbotOBV)
if obv[botcOBV] < obv
alOBV := 1
// CCI Hesaplama ve Uyumsuzluk Tespiti
cci = ta.cci(close, 20)
float botCCI = na
botCCI := ta.pivotlow(5, 5)
botcCCI = 0
botcCCI := botCCI ? 5 : nz(botcCCI[1]) + 1
newbotCCI = ta.pivotlow(5, 0)
emptylCCI = true
if not na(newbotCCI) and newbotCCI < cci[botcCCI]
diffCCI = (newbotCCI - cci[botcCCI]) / botcCCI
llineCCI = newbotCCI - diffCCI
for x = 1 to botcCCI - 1 by 1
if cci[x] < llineCCI
emptylCCI := false
break
llineCCI -= diffCCI
emptylCCI
// Pozitif Uyumsuzluk Alım Sinyali - CCI
alCCI = 0
if emptylCCI and not na(newbotCCI)
if cci[botcCCI] < cci
alCCI := 1
// CMF Hesaplama
length = 20
mfm = ((close - low) - (high - close)) / (high - low)
mfv = mfm * volume
cmf = ta.sma(mfv, length) / ta.sma(volume, length)
float botCMF = na
botCMF := ta.pivotlow(5, 5)
botcCMF = 0
botcCMF := botCMF ? 5 : nz(botcCMF[1]) + 1
newbotCMF = ta.pivotlow(5, 0)
emptylCMF = true
if not na(newbotCMF) and newbotCMF < cmf[botcCMF]
diffCMF = (newbotCMF - cmf[botcCMF]) / botcCMF
llineCMF = newbotCMF - diffCMF
for x = 1 to botcCMF - 1 by 1
if cmf[x] < llineCMF
emptylCMF := false
break
llineCMF -= diffCMF
emptylCMF
// Pozitif Uyumsuzluk Alım Sinyali - CMF
alCMF = 0
if emptylCMF and not na(newbotCMF)
if cmf[botcCMF] < cmf
alCMF := 1
// MFI Hesaplama
lengthMFI = 14
mfi = ta.mfi(close, lengthMFI)
float botMFI = na
botMFI := ta.pivotlow(mfi, 5, 5)
botcMFI = 0
botcMFI := botMFI ? 5 : nz(botcMFI[1]) + 1
newbotMFI = ta.pivotlow(mfi, 5, 0)
emptylMFI = true
if not na(newbotMFI) and newbotMFI < mfi[botcMFI]
diffMFI = (newbotMFI - mfi[botcMFI]) / botcMFI
llineMFI = newbotMFI - diffMFI
for x = 1 to botcMFI - 1 by 1
if mfi[x] < llineMFI
emptylMFI := false
break
llineMFI -= diffMFI
emptylMFI
// Pozitif Uyumsuzluk Alım Sinyali - MFI
alMFI = 0
if emptylMFI and not na(newbotMFI)
if mfi[botcMFI] < mfi
alMFI := 1
// VWMACD Hesaplama
fastLength = 12
slowLength = 26
signalSmoothing = 9
vwmacd = ta.ema(close, fastLength) - ta.ema(close, slowLength)
signalLine = ta.ema(vwmacd, signalSmoothing)
histogram = vwmacd - signalLine
// VWMACD Uyumsuzluk Tespiti
float botVWMACD = na
botVWMACD := ta.pivotlow(histogram, 5, 5)
botcVWMACD = 0
botcVWMACD := botVWMACD ? 5 : nz(botcVWMACD[1]) + 1
newbotVWMACD = ta.pivotlow(histogram, 5, 0)
emptylVWMACD = true
if not na(newbotVWMACD) and newbotVWMACD < histogram[botcVWMACD]
diffVWMACD = (newbotVWMACD - histogram[botcVWMACD]) / botcVWMACD
llineVWMACD = newbotVWMACD - diffVWMACD
for x = 1 to botcVWMACD - 1 by 1
if histogram[x] < llineVWMACD
emptylVWMACD := false
break
llineVWMACD -= diffVWMACD
emptylVWMACD
// Pozitif Uyumsuzluk Alım Sinyali - VWMACD
alVWMACD = 0
if emptylVWMACD and not na(newbotVWMACD)
if histogram[botcVWMACD] < histogram
alVWMACD := 1
//Dipci indikator
lengthd= 130
coef = 0.2
vcoef = 2.5
signalLength = 5
smoothVFI = false
ma(x, y) =>
smoothVFI ? ta.sma(x, y) : x
typical = hlc3
inter = math.log(typical) - math.log(typical[1])
vinter = ta.stdev(inter, 30)
cutoff = coef * vinter * close
vave = ta.sma(volume, lengthd)[1]
vmax = vave * vcoef
vc = volume < vmax ? volume : vmax //min( volume, vmax )
mf = typical - typical[1]
iff_4 = mf < -cutoff ? -vc : 0
vcp = mf > cutoff ? vc : iff_4
vfi = ma(math.sum(vcp, lengthd) / vave, 3)
vfima = ta.ema(vfi, signalLength)
d = vfi - vfima
// Kullanıcı girdileri
volatilityThreshold = input.float(1.005, title="Volume Percentage Threshold")
pinThreshold = input.float(1.005, title="Deep Percentage Threshold")
// Hesaplamalar
volatilityPercentage = (high - low) / open
pinPercentage = close > open ? (high - close) / open : (close - low) / open
// Volatilite koşulu ve VFI ile filtreleme
voldip = volatilityPercentage >= volatilityThreshold or pinPercentage >= pinThreshold
volCondition = voldip and vfi< 0 // VFI değeri 0'dan küçükse volCondition aktif olacak
threeCommasEntryComment = input.string(title="3Commas Entry Comment", defval="")
threeCommasExitComment = input.string(title="3Commas Exit Comment", defval="")
takeProfitPerc = input.float(1, title="Take Profit Percentage (%)") / 100
fallPerc = input.float(5, title="Percentage for Additional Buy (%)") / 100
// Değişkenlerin tanımlanması
var float lastBuyPrice = na
var float tpPrice = na
var int lastTpBar = na
// Alım koşulları
longCondition = alRSI or alMACD or alOBV or alCCI or alCMF or alMFI or alVWMACD or volCondition
// Son alım fiyatını saklamak için değişken
// İlk alım stratejisi
if (longCondition and strategy.position_size == 0)
strategy.entry("Long", strategy.long,comment=threeCommasEntryComment)
lastBuyPrice := open
// İkinci ve sonraki alım koşulları (son alım fiyatının belirlenen yüzde altında)
if (open < lastBuyPrice * (1 - fallPerc) and strategy.position_size > 0)
strategy.entry("Long Add", strategy.long,comment=threeCommasEntryComment)
lastBuyPrice := open
// Kar alma fiyatını hesaplama ve strateji çıkışı
tp_price = strategy.position_avg_price * (1 + takeProfitPerc)
if strategy.position_size > 0
strategy.exit("Exit Long", "Long", limit=tp_price,comment=threeCommasExitComment)
strategy.exit("Exit Long Add", "Long Add", limit=tp_price,comment=threeCommasExitComment)
tpPrice := na // Pozisyon kapandığında TP çizgisini sıfırla
// Kar alma seviyesi çizgisi çizme
plot(strategy.position_size > 0 ? tp_price : na, color=color.green, title="Take Profit Line")