RicardoSantos

[STRATEGY][RS][JR] Triple Timeframe Bollinger excess V0

Request for:JR
preliminary version
สคริปต์โอเพนซอร์ซ

ด้วยจิตวิญญาณของ TradingView อย่างแท้จริง ผู้เขียนสคริปต์นี้ได้เผยแพร่เป็นโอเพนซอร์ส เพื่อให้ผู้ค้าสามารถเข้าใจและตรวจสอบได้ ไชโยให้กับผู้เขียน! คุณสามารถใช้ได้ฟรี แต่การใช้รหัสนี้ซ้ำในสิ่งพิมพ์อยู่ภายใต้กฎระเบียบการใช้งาน คุณสามารถตั้งเป็นรายการโปรดเพื่อใช้บนชาร์ตได้

คำจำกัดสิทธิ์ความรับผิดชอบ

ข้อมูลและบทความไม่ได้มีวัตถุประสงค์เพื่อก่อให้เกิดกิจกรรมทางการเงิน, การลงทุน, การซื้อขาย, ข้อเสนอแนะ หรือคำแนะนำประเภทอื่น ๆ ที่ให้หรือรับรองโดย TradingView อ่านเพิ่มเติมที่ เงื่อนไขการใช้บริการ

ต้องการที่จะใช้สคริปต์นี้บนชาร์ตใช่ไหม?
//@version=2
//strategy("My Script", overlay=true)
strategy(title='[STRATEGY][RS][JR] Triple Timeframe Bollinger excess V0', overlay=true, pyramiding=0, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=100000, currency=currency.USD)
//  ||------------------------------||
//  ||  Timeframe 0 code block      ||
use_tf00 = input(true)
tf00_src = input(close)
tf00_length = input(5)
tf00_deviations = input(0.6)
tf00_basis = sma(tf00_src, tf00_length)
tf00_dev = tf00_deviations * stdev(tf00_src, tf00_length)
tf00_upper = tf00_basis + tf00_dev
tf00_lower = tf00_basis - tf00_dev
tf00_buy_signal = use_tf00 ? change(close > tf00_upper) > 0 : true
tf00_sel_signal = use_tf00 ? change(close < tf00_lower) > 0 : true
plot(series=tf00_basis, title='00 Basis', color=color(blue, 0), style=linebr)
plot(series=tf00_upper, title='00 Upper', color=color(red, 0), style=linebr)
plot(series=tf00_lower, title='00 Lower', color=color(red, 0), style=linebr)
//  ||------------------------------||
//  ||  Timeframe 1 code block      ||
use_tf01 = input(true)
tf01_timeframe = input('30')
tf01_src = input(defval=open, title='TF01 Source(WARNING:change at your own risk!!)')
tf01_length = input(5)
tf01_deviations = input(0.6)
tf01_basis = security(tickerid, tf01_timeframe, sma(tf01_src, tf01_length))
tf01_dev = security(tickerid, tf01_timeframe, tf01_deviations * stdev(tf01_src, tf01_length))
tf01_upper = security(tickerid, tf01_timeframe, tf01_basis + tf01_dev)
tf01_lower = security(tickerid, tf01_timeframe, tf01_basis - tf01_dev)
tf01_buy_signal = use_tf01 ? change(close > tf01_upper) > 0 : true
tf01_sel_signal = use_tf01 ? change(close < tf01_lower) > 0 : true
plot(series=tf01_basis, title='01 Basis', color=color(blue, 0), style=linebr)
plot(series=tf01_upper, title='01 Upper', color=color(red, 0), style=linebr)
plot(series=tf01_lower, title='01 Lower', color=color(red, 0), style=linebr)
//  ||------------------------------||
//  ||  Timeframe 2 code block      ||
use_tf02 = input(true)
tf02_timeframe = input('90')
tf02_src = input(defval=open, title='TF01 Source(WARNING:change at your own risk!!)')
tf02_length = input(5)
tf02_deviations = input(0.6)
tf02_basis = security(tickerid, tf02_timeframe, sma(tf02_src, tf02_length))
tf02_dev = security(tickerid, tf02_timeframe, tf02_deviations * stdev(tf02_src, tf02_length))
tf02_upper = security(tickerid, tf02_timeframe, tf02_basis + tf02_dev)
tf02_lower = security(tickerid, tf02_timeframe, tf02_basis - tf02_dev)
tf02_buy_signal = use_tf02 ? change(close > tf02_upper) > 0 : true
tf02_sel_signal = use_tf02 ? change(close < tf02_lower) > 0 : true
plot(series=tf02_basis, title='02 Basis', color=color(blue, 0), style=linebr)
plot(series=tf02_upper, title='02 Upper', color=color(red, 0), style=linebr)
plot(series=tf02_lower, title='02 Lower', color=color(red, 0), style=linebr)

buy_trigger = tf00_buy_signal and tf01_buy_signal and tf02_buy_signal
sel_trigger = tf00_sel_signal and tf01_sel_signal and tf02_sel_signal

//  ||  -->
//  ||  Effective Trading Session:
use_trade_session = input(false)
trade_session = input(title='Trade Session(xxxx-xxxx or xxxx-xxxx,xxxx-xxxx to define a interval):', type=string, defval='0400-0700,0900-1300', confirm=false)
isinsession = use_trade_session ? not na(time('1', trade_session)) : true
bgcolor(color=use_trade_session and isinsession ? purple : na, transp=95, title='In Session BG')
//  ||  -->

//  ||  -->
//  ||  Account Margin Management:
f_account_margin_call(_ammount)=>_return = na(_return[1]) ? false : strategy.equity <= _ammount ? true : _return[1]
//  ||  -->
//  ||  -->
f_account_fixed_trail_call(_ammount)=>
    _maximum_equity = na(_maximum_equity[1]) ? strategy.equity : max(_maximum_equity[1], strategy.equity)
    _return = na(_return[1]) ? false : strategy.equity <= _maximum_equity - _ammount ? true : _return[1]
//  ||  -->
//  ||  -->
f_account_percent_trail_call(_percent)=>
    _maximum_equity = na(_maximum_equity[1]) ? strategy.equity : max(_maximum_equity[1], strategy.equity)
    _return = na(_return[1]) ? false : strategy.equity <= _maximum_equity * (_percent/100) ? true : _return[1]
//  ||  -->
//  ||  -->
use_margin_call = input(false)
margin_call_mode = input(defval=1, title='1:fixed value, 2:fixed value trail, 3:percent equity trail', type=integer, minval=1, maxval=3)
margin_value = input(95000)

trade_if_not_margin_call = use_margin_call ? (margin_call_mode == 1 ? not f_account_margin_call(margin_value) : margin_call_mode == 2 ? not f_account_fixed_trail_call(margin_value) : margin_call_mode == 3 ? not f_account_percent_trail_call(margin_value) : false) : true
    

wins_multiplier = input(defval=1.00, title='Scaling Multiplier for Consecutive Wins:')
losses_multiplier = input(defval=1.00, title='Scaling Multiplier for Consecutive Losses:')


buy_cond = isinsession and trade_if_not_margin_call and buy_trigger and strategy.opentrades < 1
sel_cond = isinsession and trade_if_not_margin_call and sel_trigger and strategy.opentrades < 1

f_martingale_wins_multiplier(_multiplier) => _return = na(_return[1]) ? 1 : change(strategy.losstrades) > 0 ? 1 : change(strategy.wintrades) > 0 or change(strategy.eventrades) > 0 ? _return[1] * _multiplier : _return[1]
f_martingale_loss_multiplier(_multiplier) => _return = na(_return[1]) ? 1 : change(strategy.wintrades) > 0 ? 1 : change(strategy.losstrades) > 0 or change(strategy.eventrades) > 0 ? _return[1] * _multiplier : _return[1]

mode = change(strategy.wintrades) > 0 ? 1 : change(strategy.losstrades) > 0 ? -1 : nz(mode[1], 1)
trade_multiplier = mode > 0 ? f_martingale_wins_multiplier(wins_multiplier) : f_martingale_loss_multiplier(losses_multiplier)

trade_size = input(defval=1000, title='Base trade value:')
trade_leverage = input(defval=1, title='Base Leverage value:')
trade_size_multiplied = (trade_size * trade_leverage) * trade_multiplier

//plot(strategy.closedtrades)
strategy.entry('B', long=true, qty=trade_size_multiplied, when=buy_cond)
strategy.entry('S', long=false, qty=trade_size_multiplied, when=sel_cond)

take_profit = input(defval=250, title='TP in ticks(1/10 of a pip):')
stop_loss = input(defval=100, title='SL in ticks(1/10 of a pip):')
strategy.exit('B', from_entry='B', profit=take_profit, loss=stop_loss)
strategy.exit('S', from_entry='S', profit=take_profit, loss=stop_loss)

//p_eq = plot(series=strategy.equity, title='Equity', color=black, linewidth=2)

//drawdown = change(strategy.closedtrades) > 0 ? strategy.equity : drawdown[1]
//p_dd = plot(series=drawdown, title='Drawdown', style=linebr, color=red, linewidth=1)

//fill(plot1=p_eq, plot2=p_dd, color=red, transp=70, title='DD')

trade_open_price = strategy.opentrades == 0 ? na : change(strategy.opentrades) > 0 ? open : trade_open_price[1]
trade_loss_price = strategy.opentrades == 0 ? na : change(strategy.opentrades) > 0 ? (buy_trigger[1] ? trade_open_price - (stop_loss * (round(open)*0.00001)) : trade_open_price + (stop_loss * (round(open)*0.00001))) : trade_loss_price[1]
trade_profit_price = strategy.opentrades == 0 ? na : change(strategy.opentrades) > 0 ? (buy_trigger[1] ? trade_open_price + (take_profit * (round(open)*0.00001)) : trade_open_price - (take_profit * (round(open)*0.00001))) : trade_profit_price[1]
t_o = plot(series=trade_open_price, title='Trade Open Price Line', color=color(black, 0), style=linebr)
t_l = plot(series=trade_loss_price, title='Trade Loss Price Line', color=color(black, 0), style=linebr)
t_p = plot(series=trade_profit_price, title='Trade Profit Price Line', color=color(black, 0), style=linebr)
fill(plot1=t_o, plot2=t_l, color=red, transp=80, title='Trade Loss Fill')
fill(plot1=t_o, plot2=t_p, color=lime, transp=80, title='Trade Profit Fill')