Strategi ini menggabungkan EMA dan indikator volume transaksi kumulatif untuk menilai tren pasar berdasarkan persilangan keduanya, menghasilkan sinyal beli dan jual. Ini adalah strategi pelacakan tren khas yang melacak arah pasar di tingkat garis yang lebih panjang.
Menghitung 50 hari EMA rata-rata, dan 100 hari akumulasi volume indikator. Ketika EMA dari bawah ke atas menembus akumulasi volume, menghasilkan sinyal beli lebih banyak; Ketika EMA dari atas ke bawah menembus akumulasi volume, menghasilkan sinyal jual kosong.
Dalam proses memegang posisi, tetapkan stop loss dan stop exiting Strategi. Stop loss ditetapkan sebagai 8% di bawah harga masuk; stop stop ditetapkan sebagai 8% di atas harga masuk, dan posisi sebagian posisi yang kosong ketika harga mencapai stop stop.
Strategi ini menggabungkan indikator tren EMA dan indikator arus kas untuk mengakumulasi volume transaksi, memanfaatkan informasi harga dan volume transaksi, dan dapat secara efektif mengidentifikasi tren garis tengah. Strategi stop loss tetap sangat efektif dan menguntungkan untuk mengunci sebagian keuntungan dan mengendalikan risiko.
Parameter siklus EMA dapat disesuaikan secara bebas, sesuai dengan varietas yang berbeda. Anda dapat melakukan lebih banyak shorting, untuk melakukan perdagangan linier. Data retrospektif menunjukkan bahwa dalam situasi tren, strategi berkinerja baik.
Strategi ini terlalu bergantung pada indikator rata-rata, mudah untuk menghasilkan sinyal salah dalam situasi yang bergoyang di dalam zona. Stop loss tetap juga dapat menyebabkan keluar terlalu cepat atau stop loss terlalu besar. Hanya mempertimbangkan informasi harga dan volume transaksi, dan tidak mempertimbangkan faktor-faktor lain.
Parameter garis rata-rata dapat diperluas dengan tepat untuk mengurangi sinyal palsu. Juga dapat diperkenalkan indikator bantuan penilaian seperti volatilitas, RSI. Mengoptimalkan mekanisme stop loss, misalnya memperkenalkan cara untuk melacak stop loss, stop loss dinamis dan sebagainya.
Tes mengoptimalkan kombinasi parameter EMA untuk mencari parameter optimal.
Memperkenalkan indikator teknis lainnya untuk membentuk strategi portofolio indikator.
Aplikasi pembelajaran mesin untuk memprediksi tren harga dan meningkatkan efek EMA.
Mengoptimalkan strategi stop loss, dengan mekanisme seperti tracking stop loss dan dynamic stop loss.
Memperkenalkan Modul Manajemen Uang, Mengatur Posisi Secara Dinamis.
Adaptasi parameter untuk karakteristik varietas, membentuk portofolio strategi.
Strategi ini mengintegrasikan EMA dan indikator volume transaksi untuk menilai tren garis tengah dan panjang. Namun, ketergantungan berlebihan pada garis rata-rata dan stop loss tetap juga bermasalah. Menambahkan lebih banyak indikator untuk menilai dan mengoptimalkan strategi stop loss dapat meningkatkan stabilitas strategi dan ruang untuk keuntungan. Secara keseluruhan, ini memberikan pemikiran untuk melacak tren menggunakan informasi harga dan volume transaksi.
/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 2h
basePeriod: 15m
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/
// © mohanee
//@version=4
strategy("EMA_cumulativeVolume_crossover[Strategy]", overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=20, initial_capital=10000)
emaLength= input(50, title="EMA Length", minval=1, maxval=200)
cumulativePeriod = input(100, title="cumulative volume Period", minval=1, maxval=200)
riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(8,title="Stop Loss",minval=1)
takePartialProfits=input(false, title="take partial profits (percentage same as stop loss)")
tradeDirection=input(title="Trade Direction", defval="LONG", options=["LONG", "SHORT"])
avgPrice = (high + low + close) / 3
avgPriceVolume = avgPrice * volume
cumulPriceVolume = sum(avgPriceVolume, cumulativePeriod)
cumulVolume = sum(volume, cumulativePeriod)
vwapValue = cumulPriceVolume / cumulVolume
emaVal=ema(close, emaLength)
plot(emaVal, title="EMA", color=color.green, transp=25)
plot(vwapValue, title="Cumulate Volumne / VWAP", color=color.orange, linewidth=2, transp=25)
bgcolor(emaVal>vwapValue?color.blue:color.purple)
//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity * riskCapital / 100 ) / (close*stopLoss/100)
//check if cash is sufficient to buy qty1 , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1
strategy.entry(id="LE",comment="LE", long=true, qty=qty1, when=crossover(emaVal, vwapValue) and (tradeDirection=="LONG") ) //emaVal>vwapValue and crossover(close , emaVal)
//stoploss
stopLossVal= strategy.position_size>=1 ? (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00
//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr, linewidth = 2, title = "stop loss")
//partial exits
takeProfit= strategy.position_size>=1 ? (strategy.position_avg_price * (1+(stopLoss*0.01) )) : ( close[1] * 2 )
if(takePartialProfits==true)
strategy.close(id="LE", comment="Partial"+tostring(close-strategy.position_avg_price, "###.##") , qty=strategy.position_size/3 , when = (tradeDirection=="LONG" ) and close>takeProfit and crossunder(close, emaVal) ) //close<close[1] and close[1]<close[2] and close[2]<close[3])
strategy.close(id="LE" , comment="LE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossunder(emaVal, vwapValue) and (tradeDirection=="LONG") )
strategy.close(id="LE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= close < stopLossVal and (tradeDirection=="LONG") )
//for short you dont have to wait crossodown of ema, falling is speed , so just check if close crossing down vwapVal
strategy.entry(id="SE",comment="SE", long=false, qty=qty1, when=(close<vwapValue and close<open and close[1] < vwapValue and close[1]<open[1] and close<close[1]) and emaVal>=vwapValue and (tradeDirection=="SHORT") ) //emaVal>vwapValue and crossover(close , emaVal)
//stoploss
stopLossValUpside= abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? (strategy.position_avg_price * (1+(stopLoss*0.01) )) : 0.00
//draw initil stop loss
plot(abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? stopLossValUpside : na, color = color.purple , style=plot.style_linebr, linewidth = 2, title = "stop loss")
//partial exits
shortTakeProfit= abs(strategy.position_size)>=1 and tradeDirection=="SHORT" ? (strategy.position_avg_price * (1-(stopLoss*0.01) )) : 0.00
if(takePartialProfits==true)
strategy.close(id="SE", comment="Partial" , qty=strategy.position_size/3 , when = (tradeDirection=="SHORT" ) and close<shortTakeProfit ) //close<takeProfit and (emaVal - close)>8 )
//strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when=crossover(emaVal, vwapValue) and (tradeDirection=="SHORT") )
strategy.close(id="SE" , comment="SE Exit Points="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and ( (emaVal<vwapValue and close>vwapValue and open>vwapValue and close>open ) or (crossover(emaVal,vwapValue)) ) and (tradeDirection=="SHORT") )
strategy.close(id="SE" , comment="SL Exit Loss="+tostring(close-strategy.position_avg_price, "###.##"), when= abs(strategy.position_size)>=1 and close > stopLossValUpside and (tradeDirection=="SHORT" ) )