Strategi Perdagangan Orion adalah strategi perdagangan kuantitatif yang mengintegrasikan pelbagai petunjuk teknikal. Strategi ini bertujuan untuk mengenal pasti ketinggian dan ketinggian pasaran lebih awal, supaya peniaga dapat membuat keputusan pembelian dan penjualan tepat pada masanya. Strategi ini menggunakan mekanisme kurva ramalan yang unik, untuk mencuba isyarat perdagangan sebelum harga benar-benar bertukar.
Pusat strategi ini adalah kurva isyarat Orion yang unik. Kurva ini menggabungkan beberapa petunjuk teknikal, termasuk MACD, WPR, Stoch, RSI, dan lain-lain, untuk mengira isyarat komposit.
Yang penting adalah bahawa kurva ini juga dilengkapi dengan model ramalan yang menganalisis perubahan kemiringan kurva dan cuba meramalkan perubahan yang berpotensi selepas 1-2 garis K. Apabila kurva yang diramalkan bercanggah dengan kurva sebenar, isyarat perdagangan boleh dikeluarkan lebih awal.
Selain itu, strategi juga menggunakan indikator gelombang dinamik untuk menentukan arah trend pada tahap yang lebih besar. Apabila gelombang dinamik berubah arah, isyarat mungkin berlaku pembalikan tahap yang lebih besar.
Akhirnya, strategi memberi cadangan pembelian dan penjualan yang sesuai apabila isyarat dihasilkan. Pengguna boleh membuat keputusan sendiri sama ada masuk atau tidak.
Menggabungkan pelbagai petunjuk dapat membantu mengenal pasti trend dan mencari titik perubahan, mengelakkan risiko salah penilaian satu petunjuk.
Kurva ramalan dapat membalikkan isyarat sebenar lebih awal, memberikan keutamaan untuk keputusan perdagangan.
Gabungan penunjuk gelombang dinamik dengan jangka masa yang lebih tinggi dapat mengelakkan operasi berlawanan arah.
Pengguna boleh menyesuaikan parameter penunjuk untuk menyesuaikan ciri-ciri varieti yang berbeza.
Model ramalan mudah menghantar isyarat palsu, yang boleh menyebabkan perdagangan berlebihan jika diikuti secara buta.
Terdapat banyak parameter yang memerlukan banyak set data dan ujian yang panjang untuk mencari kombinasi yang optimum.
Ia perlu dinilai dengan berhati-hati dan mengelakkan penggunaan indikator yang berlebihan.
Lebih kerap berdagang akan membawa lebih banyak kos, yang perlu dipertimbangkan untuk diuji semula dalam keadaan sebenar.
Menilai ketepatan model ramalan, optimumkan penyesuaian parameter ramalan untuk meningkatkan ketepatan.
Menggunakan penilaian prestasi indikator dan kaedah penyederhanaan model untuk mengurangkan kerumitan yang tidak perlu.
Ujian semula di lebih banyak pasaran untuk mengesahkan hasil dan kestabilan optimasi parameter.
Mengikut pengkajian semula, faktor kos dalaman diperkenalkan dan parameter strategi diselaraskan untuk mengurangkan frekuensi transaksi.
Strategi Orion menggunakan pelbagai indikator dan kurva ramalan yang unik untuk cuba mencari titik perubahan pasaran lebih awal. Strategi ini mempunyai kelebihan, tetapi skalabiliti juga mempunyai batasan. Perlu menjaga sikap berhati-hati, terus mengoptimumkan penyesuaian dari segi kesan isyarat perdagangan dan keberkesanan kos, berusaha untuk mendapatkan keuntungan yang stabil dalam jangka panjang dalam automasi perdagangan.
/*backtest
start: 2023-09-17 00:00:00
end: 2023-09-21 22:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © OrionAlgo
// () /? | () |\| /\ |_ (_, () //
//@version=4
version = '2.0'
strategy("Orion Algo Strategy v"+version, shorttitle="Orion Algo Strategy v"+version, overlay=false, pyramiding=100)
// Getting inputs --------------------------------------------------------------
userAgreement = input(true, title='I understand that Orion Algo cannot be 100% accurate and overall performance will shift with market conditions. While Orion Algo increases my chances of entering better positions, I must use smart trade management. ', type=input.bool,group='User Agreement ─────────────',
tooltip='In order to use Orion Algo, you must click the checkbox to acknowledge the user agreement')
src = close
//smoothing inputs -------------------------------------------------------------
//superSmooth = input(true, title='Super Smooth', inline='Super Smooth', group='Smoothing ─────────────────')
superSmooth = true
smoothType = 1
superSmoothStrength = input(10, title='Super Smooth',minval = 3, inline='Super Smooth', group='Signal ────────────────────',
tooltip='Smooths the signal. Lower values move pivots to the left while increasing noise, higher values move pivots to the right and reduce noise. 8 is a good mix of both') // set to timeframe for decent results?
//trendSmoothing = input(30, title='Trend Smooth',minval = 3, group='Smoothing ─────────────────') // set to timeframe for decent results?
trendSmoothing = 30 // set to timeframe for decent results?
showPrediction = input(false, title='Prediction', group='Signal ────────────────────',inline='prediction')
predictionBias = input(0.45, minval = 0.,maxval=1., step=0.05, title='Bias', group='Signal ────────────────────',inline='prediction')
showPredictionCurve = input(true, title='Curve', group='Signal ────────────────────',inline='prediction', tooltip='Prediction model that attempts to predict short range reversals (0-2 bars). Adjust Bias to change the prediction curve.')
//momentum wave inputs ---------------------------------------------------------
showMomentumWave = input(true, 'Momentum Wave', group='Momentum Wave ─────────────', inline='mom')
momentumWaveLength = input(3, '', group='Momentum Wave ─────────────', inline='mom', tooltip='Secondary signal that shows medium to large movements based on the input variable. The wave will change depending on the current timeframe.')
momentumOutside = input(true, 'Position Outside', group='Momentum Wave ─────────────', inline='mom2', tooltip='Positions the wave outside of the main signal area.')
//visuals input-----------------------------------------------------------------
useDarkMode = input(true, 'Dark Mode', group='Visuals ───────────────────',inline='Colors')
// 0:backgroundlines, 1:signal, 2:bullish, 3:bearish, 4:hiddenbull, 5:hiddenbear, 6:deltav, 7:prediction, 8:predictionbull, 9:predictionbear, 10:dash, 11:mom2
visualMode = input('Pro', 'Mode',options=['Beginner', 'Pro'] ,group='Visuals ───────────────────')
dashOn = input(true, "Dashboard", group='Dashboard ─────────────────', inline='dash', tooltip='A dashboard with some usefual stats')
dashColor = color.new(#171a27, 100)
showPivots = input(true, title='Signal Pivots', group='Pivots ────────────────────',inline='pivots')
showPredictionPivots = input(false, title='Prediction Pivots', group='Pivots ────────────────────',inline='pivots')
// Functions -------------------------------------------------------------------
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src,barmerge.gaps_on, lookahead = barmerge.lookahead_on)
f_slope(x) =>
slopePeriod = 1
(x - x[slopePeriod]) / slopePeriod
f_superSmooth(inputVal,smoothType) =>
smoothType==1? (hma(inputVal,superSmoothStrength)) :
smoothType==2? (ema((ema((ema(inputVal,3)),3)),superSmoothStrength)):
smoothType==3? linreg(inputVal,superSmoothStrength,0) :
smoothType==4? (hma(inputVal,superSmoothStrength * momentumWaveLength)) : na
f_bias(bias, min, max) =>
(bias * (max - min) ) + min
f_resInMinutes() =>
_resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1. / 60. :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 1440. :
timeframe.isweekly ? 10080. :
timeframe.ismonthly ? 43800. : na)
f_resFromMinutes(_minutes) =>
_minutes <= 0.0167 ? "1S" :
_minutes <= 0.0834 ? "5S" :
_minutes <= 0.2500 ? "15S" :
_minutes <= 0.5000 ? "30S" :
_minutes <= 1 ? "1":
_minutes <= 1440 ? tostring(round(_minutes)) :
_minutes <= 43800 ? tostring(round(min(_minutes / 1440, 365))) + "D" :
tostring(round(min(_minutes / 43800, 12))) + "M"
f_output_signal()=>
a = ((ema(close, 12) - ema(close, 26)) - ema((ema(close, 12) - ema(close, 26)), 8))/10
b = wpr(8)
c = (100 * ( close + 2*stdev( close, 21) - sma( close, 21 ) ) / ( 4 * stdev( close, 21 ) ))
d = (rsi(close - sma(close, 21)[11],8)*2)-100
e = (rsi(fixnan(100 * rma(change(high) > change(low) and change(high) > 0 ? change(high) : 0, 1) / rma(tr, 1)) - fixnan(100 * rma(change(low) > change(high) and change(low) > 0 ? change(low) : 0, 1) / rma(tr, 1)),8)*2)-100 //causes slow down
f = rsi((((close-( (sum(volume, 20) - volume)/sum(volume, 20)) + (volume*close/sum(volume, 20)))/((close+( (sum(volume, 20) - volume)/sum(volume, 20)) + (volume*close/sum(volume, 20)))/2)) * 100),8)-100
g = (rsi(sma(highest(high,14)-lowest(low,14)==0.0?0.0:(close-lowest(low,14))/highest(high,14)-lowest(low,14)-0.5,max(1,int(2))),8)*2)-100 //causes slow down
avg(a,b,c,d,e,f,g)*2
output_signal = f_output_signal()
output_signal := f_superSmooth(output_signal,1)
// output_signal2 = plot(f_superSmoothSlow(f_output_signal()), color=color.blue, linewidth=2)
//Orion Signal Higher Timeframe / Momentum Wave --------------------------------
f_momentumWave(wavelength,smooth) =>
currentMinutes = f_resInMinutes()
m = currentMinutes * wavelength //multiply current resolution by momentumWaveLength to get higher resolution
momentumWaveRes = f_resFromMinutes(m)
f_secureSecurity(syminfo.tickerid, momentumWaveRes,f_superSmooth(f_output_signal(),1))
// Plot ------------------------------------------------------------------------
f_color(x) =>
if userAgreement
white = useDarkMode ? #e5e4f4 : #505050ff
lightgray = useDarkMode ? #808080 : #909090ff
gray = useDarkMode ? #808080 : #505050ff
//blue = useDarkMode ? #007EA7 : #007EA7ff
blue = useDarkMode ? #2862FFFF : #2862FFFF
// 0:backgroundlines, 1:signal, 2:bullish, 3:bearish, 4:hiddenbull, 5:hiddenbear, 6:deltav, 7:prediction, 8:predictionbull, 9:predictionbear, 10:trendbull, 11:trendbear, 12:dash, 13:mom1, 14:mom2
x==0? lightgray : x==1? gray : x==2? white : x==3? blue : x==4? white : x==5? blue : x==6? blue : x==7? blue : x==8? white : x==9? blue : x==10? blue : x==11? blue : na
// Lines -----------------------------------------------------------------------
h1 = plot(0, "Mid Band", color=f_color(0),editable=0, transp=80)
// Signal ----------------------------------------------------------------------
orionSignal = plot(output_signal, title="Orion Signal Curve", style=plot.style_line,linewidth=1, transp=0, color= f_color(1), offset=0,editable=0)
// Momentum Wave ---------------------------------------------------------------
momWave = f_momentumWave(momentumWaveLength,1)
p_momWave = plot(showMomentumWave? momentumOutside? (momWave/2) -150 : momWave : na, color=f_color(11), linewidth=showMomentumWave and momentumOutside ? 1 : 2, editable =0, transp=50, style=momentumOutside? plot.style_area : plot.style_line, histbase=-200) //two tone color doesnt want to work with this for some reason.
// Divergence ------------------------------------------------------------------
osc = output_signal
plFound = osc > osc [1] and osc[1] < osc[2]
phFound = osc < osc [1] and osc[1] > osc[2]
// bullish
plot(
plFound and visualMode=='Pro'? osc[1] - 10 : na,
offset=0,
title="Regular Bullish",
linewidth=3,
color=showPivots ? f_color(2) :na,
transp=0,
style=plot.style_circles,
editable=0
)
plotshape(
plFound and visualMode=='Beginner'? osc[1] - 10 : na,
offset=0,
title="Regular Bullish",
size=size.tiny,
color=showPivots ? f_color(2) :na,
transp=0,
style=shape.labelup,
text = 'Buy',
textcolor= color.black,
location=location.absolute,
editable=0
)
// bearish
plot(
phFound and visualMode=='Pro'? osc[1] + 10: na,
offset=0,
title="Regular Bearish",
linewidth=3,
color=showPivots ? f_color(3):na,
transp=0,
style=plot.style_circles,
editable=0
)
plotshape(
phFound and visualMode=='Beginner'? osc[1] + 10: na,
offset=0,
title="Regular Bearish",
size=size.tiny,
color=showPivots ? f_color(3):na,
transp=0,
style=shape.labeldown,
text = 'Sell',
textcolor= color.white,
location=location.absolute,
editable=0
)
// Delta v ---------------------------------------------------------------------
slope = f_slope(output_signal)*1.5
// Prediction from Delta v -----------------------------------------------------
output_prediction = f_bias(predictionBias, slope, output_signal)
prediction_bullish = output_prediction>output_prediction[1] and output_prediction[1]<output_prediction[2] ?true:false
prediction_bearish = output_prediction<output_prediction[1] and output_prediction[1]>output_prediction[2] ?true:false
plot(showPrediction and showPredictionCurve?output_prediction:na,title='Prediction Curve', color=f_color(7), editable=0)
//prediction bull
plot(showPrediction?showPredictionPivots?output_prediction>output_prediction[1] and output_prediction[1]<output_prediction[2]?showPredictionCurve?output_prediction:output_signal:na:na:na,
title='Prediction Bullish',color=f_color(8), style=plot.style_circles, linewidth=2, editable=0)
//prediction bear
plot(showPrediction?showPredictionPivots?output_prediction<output_prediction[1] and output_prediction[1]>output_prediction[2]?showPredictionCurve?output_prediction:output_signal:na:na:na,
title='Prediction Bearish', color=f_color(9), style=plot.style_circles, linewidth=2, editable=0)
// User Aggreement -------------------------------------------------------------
plotshape(userAgreement==false?0:na,title='Welcome', text='Welcome to Orion Algo! Please double click me to enable signals',textcolor=color.black,color=color.white,offset=0,size=size.huge,style=shape.labeldown,location=location.absolute, transp=0, show_last=1, editable=0)
plotshape(userAgreement==false?0:na,title='Welcome', text='Welcome to Orion Algo! Please double click me to enable signals',textcolor=color.black,color=color.white,offset=-100,size=size.huge,style=shape.labeldown,location=location.absolute, transp=0, show_last=1, editable=0)
// Alerts ----------------------------------------------------------------------
alertcondition(plFound,title='1. Bullish (Big Dot)', message='Bullish Signal (Big Dot)')
alertcondition(phFound,title='2. Bearish (Big Dot)', message='Bearish Signal (Big Dot)')
alertcondition(prediction_bullish,title='3. Prediction Bullish (Small Dot)', message='Prediction Bullish Signal (Small Dot)')
alertcondition(prediction_bearish,title='4. Prediction Bearish (Small Dot)', message='Prediction Bearish Signal (Small Dot)')
// Strategy --------------------------------------------------------------------
i_strategy = input(defval='dca long', title='strategy', options=['simple','dca long'])
i_pyramid = input(10, 'pyramid orders')
// Simple Strat
if (i_strategy == 'simple')
longCondition = crossover(output_signal, output_signal[1])
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
shortCondition = crossunder(output_signal, output_signal[1])
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
// DCA Strat
i_percent_exit = input(2.0,'percent exit in profit')/100
i_percent_drop = input(2.0,'percent drop before each entry')/100
var entryPrice = 0.0
var exitPrice = 0.0
var inTrade = false
var tradeCount = 0
var moneyInTrade = 0.0
if(output_signal > output_signal[1] and output_signal[1]<=output_signal[2] and i_strategy=='dca long')
//if (true)
if (inTrade==false)
strategy.entry('Long',long=true)
entryPrice:=close
moneyInTrade:=close
exitPrice:=entryPrice + (entryPrice*(i_percent_exit))
inTrade:=true
tradeCount := 1
if (inTrade==true and close <= (entryPrice-(entryPrice*(i_percent_drop) )))
//calculate DCA //math is incorrect!!!
if (tradeCount <= i_pyramid)
tradeCount := tradeCount+1
entryPrice:=close
moneyInTrade := moneyInTrade+close
exitPrice2 = moneyInTrade / tradeCount
exitPrice := exitPrice2 + (exitPrice2 *(i_percent_exit))
strategy.entry('Long',long=true)
if(close >= exitPrice and inTrade==true and output_signal <= output_signal[1] and output_signal[1]>=output_signal[2] and i_strategy=='dca long')
inTrade:=false
strategy.close('Long')
// Dashboard -------------------------------------------------------------------
//deltav
deltav = slope