RicardoSantos

[RS]Function Account Margin Call Functions V0

some simple functions to handle account margin call / trailling stop for account.
نص برمجي مفتوح المصدر

قام مؤلف هذا النص البرمجي بنشره وجعله مفتوح المصدر، بحيث يمكن للمتداولين فهمه والتحقق منه، وهو الأمر الذي يدخل ضمن قيم TradingView. تحياتنا للمؤلف! يمكنك استخدامه مجانًا، ولكن إعادة استخدام هذا الكود في منشور تحكمه قواعد الموقع. يمكنك جعله مفضلاً لاستخدامه على الرسم البياني.

إخلاء المسؤولية

لا يُقصد بالمعلومات والمنشورات أن تكون، أو تشكل، أي نصيحة مالية أو استثمارية أو تجارية أو أنواع أخرى من النصائح أو التوصيات المقدمة أو المعتمدة من TradingView. اقرأ المزيد في شروط الاستخدام.

هل تريد استخدام هذا النص البرمجي على الرسم البياني؟
//@version=2
strategy(title='[RS]Function Account Margin Call Functions V0', overlay=false, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=100000, currency=currency.USD)

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(true)
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)

f_trade_if_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=2.00, title='Scaling Multiplier for Consecutive Losses:')
src = input(close)
fast_ma = ema(src, input(5))
slow_ma = ema(src, input(55))
// Setup trading conditions based on last performed trades performance.
direction = na(direction[1]) ? 1 : crossunder(fast_ma, slow_ma) and direction[1] > 0 ? -1 : crossover(fast_ma, slow_ma) and direction[1] < 0 ? 1 : direction[1]

buy_cond = f_trade_if_margin_call and direction > 0 and strategy.opentrades < 1
sel_cond = f_trade_if_margin_call and direction < 0 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=25, title='Base trade value:')
trade_leverage = input(defval=400, 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, comment='=' + tostring(strategy.closedtrades+1) + '.', 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')
//plot(series=lowest(strategy.equity, 100), title='Base', color=red)
//hline(100000)