本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ChartPrime
//@version=5
indicator("Smart Money Breakouts [ChartPrime]", overlay=true, max_labels_count=500, max_lines_count=500)
color GREEN = color.rgb(2, 133, 69)
color TAIL = color.rgb(20, 141, 154)
color RED = color.rgb(246, 7, 7)
color _Green = color.rgb(2, 106, 89)
color OFF = color.new(color.red,100)
string CORE = "➞ Core Settings 🔸"
var array<int> score = array.new_int(2,0)
//
var float UpdatedHigh = na
var float UpdatedLow = na
var bool ShortTrade = false
var bool TradeisON = false
var bool LongTrade = false
var int HighIndex = na
var bool phActive = false
var bool plActive = false
var int LowIndex = na
var bool HBreak = false
var line tpLine = na
var label LAB = na
var float TP = 0.0
var float SL = 0.0
int Sync = bar_index
bool BUY = false
bool SELL = false
type Vol
array<float> Total
array<float> Green
array<float> Red
array<float> SCR
Volume = Vol.new(
array.new_float(),
array.new_float(),
array.new_float(),
array.new_float()
)
int period = input.int(20, 'Length',group = CORE,tooltip = "Swing Length")
bool CandleType = input.string(title = "Type ➞",
defval='Wicks',
options=['Wicks', 'Body'],
group = CORE,
tooltip = "Calculation Price : Wicks or Body of the candle")
== 'Wicks'
float Tar = input.float(2,"Target ",step = 0.1 , tooltip = "Target Multiplyer ",group = CORE) * 10
string Linestyle = input.string('Dashed',
'Line Style', ['Solid', 'Dashed', 'Dotted'], group=CORE,inline= "Line")
color Bull = input.color(GREEN,"",group=CORE,inline= "Line")
color Bear = input.color(RED,"",group=CORE,inline= "Line")
StyleSwitch = switch Linestyle
'Dashed' => line.style_dashed ,
'Dotted' => line.style_dotted ,
=> line.style_solid
method volAdj(int len)=>
math.min(ta.atr(len) * 0.3, close * (0.3/100)) [20] /2
Adj = volAdj(30)
VolCal(Index,Sync) =>
Bars = math.abs(Index - Sync)
for i = 0 to Bars -1
Volume.SCR.push(close[i])
for i = 0 to Volume.SCR.size() -1
if Volume.SCR.get(i) > open[i]
Volume.Green.push(volume[i])
if Volume.SCR.get(i) < open[i]
Volume.Red.push(volume[i])
Volume.Total.push(volume[i])
GreenRatio = math.round(Volume.Green.sum() / Volume.Total.sum()* 100,2)
RedRatio = math.round(Volume.Red.sum() / Volume.Total.sum()* 100,2)
Out = GreenRatio > 55 ? "🟢" : RedRatio > 55 ? "🔴" : "🟡"
Out
PH = ta.pivothigh(high, period, period)
PL = ta.pivotlow(low, period, period)
ScrHigh = CandleType ? high : close
ScrLow = CandleType ? low : close
if ta.change(fixnan(PH)) != 0
UpdatedHigh := PH
phActive := true
HighIndex := Sync - period
if ta.change(fixnan(PL)) != 0
UpdatedLow := PL
plActive := true
LowIndex := Sync - period
// LONG
if ScrHigh > UpdatedHigh and phActive
BUY := true
phActive := false
//Sell
if ScrLow < UpdatedLow and plActive
SELL := true
plActive := false
// lets Draw
if BUY and not TradeisON
sign = VolCal(HighIndex,Sync)
line.new(HighIndex,
UpdatedHigh,
Sync,
UpdatedHigh,
color=Bull,
style=StyleSwitch,
width=2)
label.new(math.floor(Sync - (Sync - HighIndex) / 2),
UpdatedHigh,
not HBreak ? 'CHoCH\n' + sign : 'BOS\n' + sign,
color=OFF,
textcolor=color.white,
size=size.tiny)
label.new(Sync,
low,
"",
yloc = yloc.belowbar,
color = color.lime,
size = size.small,
style = label.style_label_up)
HBreak := true
if SELL and not TradeisON
sign = VolCal(LowIndex,Sync)
line.new(LowIndex,
UpdatedLow,
Sync,
UpdatedLow,
color=Bear,
style=StyleSwitch,
width=2)
label.new(math.floor(Sync - (Sync - LowIndex) / 2),
UpdatedLow,
HBreak ? 'CHoCH\n' + sign : 'BOS\n' + sign,
color=OFF,
textcolor=color.white,
style=label.style_label_up,
size=size.tiny)
label.new(Sync,
low,
"",
yloc = yloc.abovebar,
color =RED,
size = size.small,
style = label.style_label_down)
HBreak := false
Long = BUY and not TradeisON
Short = SELL and not TradeisON
TradeFire = Long or Short
if Long and not TradeisON
LongTrade:= true
ShortTrade:= false
if Short and not TradeisON
LongTrade:= false
ShortTrade:= true
if true
if TradeFire and not TradeisON
TP := switch
Long => high + (Adj * Tar)
Short => low - (Adj * Tar)
SL := switch
Long => low - (Adj * Tar)
Short => high + (Adj * Tar)
TradeisON:= true
if true
line.new(bar_index,
Long ? high : low,
bar_index,
TP,
width=2,
color = TAIL,
style= line.style_dashed)
tpLine:= line.new(bar_index,
TP,
bar_index+2,
TP,
style= line.style_dashed,
color = TAIL
)
LAB:=label.new(bar_index,
TP,
"Target",
color = TAIL,
style= label.style_label_left,
size=size.small,
textcolor = color.white
)
if TradeisON
line.set_x2(tpLine,bar_index)
label.set_x(LAB,bar_index+1)
if LongTrade and TradeisON
if high >= TP
label.set_color(LAB,GREEN)
score.set(0,score.get(0)+1)
TradeisON:=false
if close <= SL
score.set(1,score.get(1)+1)
label.set_color(LAB,color.new(RED,70))
label.set_tooltip(LAB,"Stoploss Hit : "+ str.tostring(math.round_to_mintick(SL)))
TradeisON:=false
else if ShortTrade and TradeisON
if low <= TP
label.set_color(LAB,GREEN)
score.set(0,score.get(0)+1)
TradeisON:=false
if close >= SL
score.set(1,score.get(1)+1)
label.set_color(LAB,color.new(RED,70))
label.set_tooltip(LAB,"Stoploss Hit : "+ str.tostring(math.round_to_mintick(SL)))
TradeisON:=false
BearCon = TradeisON and ShortTrade
BullCon = TradeisON and LongTrade
barcolor(BearCon ? RED : BullCon ? _Green : color.rgb(52, 52, 54) )
plotcandle(open, high, low, close, color = BearCon ? RED : BullCon ? _Green : color.rgb(52, 52, 54),
wickcolor = color.rgb(103, 99, 99),bordercolor = BearCon ? RED : BullCon ? _Green : color.rgb(52, 52, 54))
bgcolor(BearCon ? color.rgb(136, 4, 15, 90) : BullCon ? color.rgb(8, 191, 158,90) : na )
// where is my table ?!
var tb = table.new(position.top_right, 3, 3,
bgcolor= color.new(color.gray,80))
if barstate.islast
table.cell(tb, 0, 0, "Winning Trades"
, text_color = #a3a3b1)
table.cell(tb, 1, 0, str.tostring(score.get(0))
, text_color = #08c09b)
table.cell(tb, 0, 1, "Losing Trades"
, text_color = #a3a3b1)
table.cell(tb, 1, 1, str.tostring(score.get(1))
, text_color = #cd0202)
//-- END --