本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TFlab
//@version=6
indicator("ICT Venom Trading Model [TradingFinder] SMC NY Session 2025Setup" ,"TFlab Venom", overlay = true, max_bars_back = 5000, max_lines_count = 500 , max_labels_count = 500)
//import Libraries
//import Order Block Refiner
import TFlab/OrderBlockRefiner_TradingFinder/2 as Refiner
//import Order Block Drawing Library
import TFlab/OrderBlockDrawing_TradingFinder/4 as Drawing
//import Switching Colors Theme
import TFlab/FVGDetectorLibrary/3 as FVG
//Input
//Order Blocks Refinement
Refine= input.bool(true, 'Refine Order Block', group ='Order Blocks Logical Setting', inline = 'Refine')
RefineMe = input.string('Defensive', '', ['Defensive', 'Aggressive'] , group = 'Order Blocks Logical Setting', inline = 'Refine')
MLOB = input.string('Proximal' , 'Mitigation Level OB', ['Proximal', '50 % OB', 'Distal'],
tooltip= 'Using this entry, you can determine which level the price reacts to in a Order Block.', group = 'Order Blocks Logical Setting')
//FVG Filter
PFVGFilter = input.bool(false, 'FVG Filter ............', group = 'FVG Logical Setting' , inline = 'FVG Filter')
PFVGFilterType = input.string('Defensive', '', ['Very Aggressive' , 'Aggressive' , 'Defensive' , 'Very Defensive'], group = 'FVG Logical Setting', inline = 'FVG Filter' ,
tooltip = 'If it is "On", this filter will filter "FVGs" based on the width of the Zone.' +
'From "Very Aggressive" to "Very Defensive" the width of the "FVG" decreases.')
MLFVG = input.string('Proximal' , 'Mitigation Level FVG', ['Proximal', '50 % OB', 'Distal'],
tooltip= 'Using this entry, you can determine which level the price reacts to in a FVG.', group = 'FVG Logical Setting')
//CISD Logical Setting
BarBackCheck = input.int(5, 'Bar Back Check' , minval = 1,group = 'CISD Logical Setting')
//Display Order Block
DOBShow = input.bool(true, 'Demand Order Block', inline = 'DMOLB', group = 'Order Block Display Setting')
DOBColor = input.color(#3dec266b, '', inline = 'DMOLB', group = 'Order Block Display Setting')
SOBShow = input.bool(true, 'Supply Order Block', inline = 'SSOLB', group = 'Order Block Display Setting')
SOBColor = input.color(#ff1e1e73, '', inline = 'SSOLB', group = 'Order Block Display Setting')
//Display FVG
DFVGShow = input.bool(true, 'Demand FVG', inline = 'DFVG', group = 'FVG Display Setting')
DFVGColor = input.color(#4aa9f76c, '', inline = 'DFVG', group = 'FVG Display Setting')
SFVGShow = input.bool(true, 'Supply FVG', inline = 'SFVG', group = 'FVG Display Setting')
SFVGColor = input.color(#f8a93270, '', inline = 'SFVG', group = 'FVG Display Setting')
//CISD Display Setting
CISD_AShow = input.bool(true, 'Show All CISD' ,group = 'CISD Display Setting')
CISD_HShow = input.bool(true, 'Show High CISD' ,group = 'CISD Display Setting', inline = 'CH')
CISD_LShow = input.bool(true, 'Show Low CISD' ,group = 'CISD Display Setting', inline = 'CL')
CISD_HNColor = input.color(#870505 , 'Name' ,group = 'CISD Display Setting', inline = 'CH')
CISD_LNColor = input.color(#014f07 , 'Name' ,group = 'CISD Display Setting', inline = 'CL')
CISD_HLColor = input.color(#b90000b8 , 'Line' ,group = 'CISD Display Setting', inline = 'CH')
CISD_LLColor = input.color(#069206a7 , 'Line' ,group = 'CISD Display Setting', inline = 'CL')
//Range Time
Newyork_OR_F = input.session('0800-0930', 'Opening Range')
Newyork_T_F = input.session('0930-1700', 'Trading Permit')
Newyork_OpeningRange = Newyork_OR_F
Newyork_Trading = Newyork_T_F
Newyork_OR = math.sign(nz(time(timeframe.period, Newyork_OpeningRange , "America/New_York")))
Newyork_T = math.sign(nz(time(timeframe.period, Newyork_Trading , "America/New_York")))
var line Start_OR_Line = na
var line Start_Trade_Line = na
var line End_Trade_Line = na
var line High_Level = na
var line Low_Level = na
var label Opening_Label = na
var label Trading_label = na
one_hour = 60 * 60 * 1000
ATR = ta.atr(55)
//High & Low Session Detector
LowHighSessionDetector(On_Session) =>
var int Time = 0
var float High = 0.0
var float Low = 0.0
if (On_Session[1] == 0 and On_Session == 1)
Time := time
High := high
Low := low
else if (On_Session[1] == 1 or On_Session == 1)
High := math.max(high , High)
Low := math.min(low , Low)
[High , Low , Time]
[High_OR , Low_OR , Time_OR] = LowHighSessionDetector(Newyork_OR)
if Newyork_OR > Newyork_OR[1]
Start_OR_Line := line.new(time , low, time , low + ATR, xloc = xloc.bar_time, extend = extend.both, style = line.style_dashed, color = #767f99)
End_Trade_Line := line.new(time + int(one_hour * 1.5), low, time + int(one_hour * 1.5), low + ATR, xloc = xloc.bar_time, extend = extend.both, style = line.style_dashed, color = #767f99)
Opening_Label := label.new(time + int(one_hour * 0.75), high + 10 * ATR ,('08:00 to 09:30') + '\nNew York AM', xloc = xloc.bar_time, color = na, textcolor= #767f99)
if Newyork_T > Newyork_T[1]
High_Level := line.new(time , High_OR , time + one_hour/2 , High_OR, xloc = xloc.bar_time , style = line.style_dotted, color = #b9c4e7)
Low_Level := line.new(time , Low_OR , time + one_hour/2 , Low_OR, xloc = xloc.bar_time , style = line.style_dotted, color = #b9c4e7)
var bool Permit_Break = true
var bool High_Break = false
var bool Low_Break = false
var int High_Break_Bar = na
var int Low_Break_Bar = na
if Newyork_T == 0
High_Break := false
Low_Break := false
High_Break_Bar := na
Low_Break_Bar := na
if Newyork_T == 1
if high > High_OR
High_Break := true
if low < Low_OR
Low_Break := true
//FVG Call Function
[DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG] = FVG.FVGDetector(PFVGFilter ? 'On' : 'Off', PFVGFilterType, false, false)
//CISD Detector Function
CISDLevelDetector(CondHigh, CondLow,Newyork_OR ,Newyork_T ,DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG, BarBackCheck, Label, AShow, HShow, LShow, HNColor, LNColor , HLColor, LLColor) =>
var float CISDLvLP_L = 0.0
var float CISDLvLP_H = 0.0
var int CISDLvLI_L = 0
var int CISDLvLI_H = 0
var bool Permit_HSet = true
var bool Permit_LSet = true
var bool Permit_HReset = true
var bool Permit_LReset = true
var line CISD_LineL = na
var line CISD_LineH = na
var label CISD_NameH = na
var label CISD_NameL = na
var label CISD_ShapH = na
var label CISD_ShapL = na
var bool Bear_Trigger = false
var bool Bull_Trigger = false
var bool FVG_Bear_Trigger = false
var bool FVG_Bull_Trigger = false
var int Bear_FVG = 0
var float Bear_FVG_D = 0.0
var float Bear_FVG_P = 0.0
var int Bull_FVG = 0
var float Bull_FVG_D = 0.0
var float Bull_FVG_P = 0.0
var FVG_Bear_D = array.new_float()
var FVG_Bear_P = array.new_float()
var FVG_Bear_I = array.new_int()
var FVG_Bull_D = array.new_float()
var FVG_Bull_P = array.new_float()
var FVG_Bull_I = array.new_int()
var float High_OB = na
var float Low_OB = na
var float Bear_D = na
var float Bear_P = na
var int Bear_I = na
var float Bull_D = na
var float Bull_P = na
var int Bull_I = na
Body = close - open
if (Newyork_T[1] == 0 and Newyork_T == 1)
High_OB := high
Bear_I := bar_index
Low_OB := low
Bull_I := bar_index
if Newyork_T[1] == 1
if high > High_OB
High_OB := high
Bear_I := bar_index
if low < Low_OB
Low_OB := low
Bull_I := bar_index
if CondHigh
Permit_HSet := true
for i = 1 to BarBackCheck by 1
if Body[i] < 0 and Permit_HSet
Permit_HReset := true
CISDLvLP_H := (BarBackCheck > 1 and i > 1) ? math.min(open[i - 1], open[i - 2]) : open[i - 1]
CISDLvLI_H := (BarBackCheck > 1 and i > 1) ? (math.min(open[i - 1], open[i - 2]) == open[i - 2]) ? bar_index[i - 2] : bar_index[i - 1] : bar_index[i - 1]
if AShow and HShow
CISD_LineH := line.new(CISDLvLI_H, CISDLvLP_H, bar_index , CISDLvLP_H , color = #ed1212, style = line.style_dotted)
CISD_NameH := label.new(CISDLvLI_H + 1 , low[bar_index - CISDLvLI_H] - (ATR * 0.3) , Label, color = na, style = label.style_label_upper_left , textcolor = #ed1212, size = size.tiny)
Permit_HSet := false
if Permit_HReset and Newyork_T == 1
if SConditionFVG
FVG_Bear_I.push(BarSFVG)
FVG_Bear_D.push(SDFVG)
FVG_Bear_P.push(SPFVG)
if FVG_Bear_I.size() > 0
if high > FVG_Bear_P.get(FVG_Bear_I.size() - 1)
FVG_Bear_I.remove(FVG_Bear_I.size() - 1)
FVG_Bear_D.remove(FVG_Bear_D.size() - 1)
FVG_Bear_P.remove(FVG_Bear_P.size() - 1)
if close >= CISDLvLP_H and (bar_index - CISDLvLI_H) <= 270
CISD_LineH.set_x2(bar_index + 1)
if close <= CISDLvLP_H and (bar_index - CISDLvLI_H) <= 270
Permit_HReset := false
if AShow and HShow
CISD_ShapH := label.new(bar_index , high + (ATR * 0.6), "", color = #890505, style = label.style_triangledown , size = size.tiny)
// if Newyork_T == 1
if CondLow
Permit_LSet := true
for i = 1 to BarBackCheck by 1
if Body[i] > 0 and Permit_LSet
Permit_LReset := true
CISDLvLP_L := (BarBackCheck > 1 and i > 1) ? math.max(open[i - 1], open[i - 2]) : open[i - 1]
CISDLvLI_L := (BarBackCheck > 1 and i > 1) ? (math.max(open[i - 1], open[i - 2]) == open[i - 2]) ? bar_index[i - 2] : bar_index[i - 1] : bar_index[i - 1]
if AShow and LShow
CISD_LineL := line.new(CISDLvLI_L, CISDLvLP_L, bar_index , CISDLvLP_L, color = #16e61d, style = line.style_dotted)
CISD_NameL := label.new(CISDLvLI_L + 1 , high[bar_index - CISDLvLI_L] + (ATR * 0.6) , Label, color = na, style = label.style_label_lower_right , textcolor = #16e61d , size = size.tiny)
Permit_LSet := false
if Permit_LReset and Newyork_T == 1
if DConditionFVG
FVG_Bull_I.push(BarDFVG)
FVG_Bull_D.push(DDFVG)
FVG_Bull_P.push(DPFVG)
if FVG_Bull_I.size() > 0
if low < FVG_Bull_P.get(FVG_Bull_I.size() - 1)
FVG_Bull_I.remove(FVG_Bull_I.size() - 1)
FVG_Bull_D.remove(FVG_Bull_D.size() - 1)
FVG_Bull_P.remove(FVG_Bull_P.size() - 1)
if close <= CISDLvLP_L and (bar_index - CISDLvLI_L) <= 270
CISD_LineL.set_x2(bar_index + 1)
if close >= CISDLvLP_L and (bar_index - CISDLvLI_L) <= 270
Permit_LReset := false
if AShow and LShow
CISD_ShapL := label.new(bar_index , low - (ATR * 0.6), "", color = #016004, style = label.style_triangleup , size = size.tiny)
if Newyork_T == 1
if FVG_Bull_I.size() > 0 or (ta.change(FVG_Bull_I.size() > 0) and FVG_Bull_I.size() > 0)
Bull_FVG := FVG_Bull_I.get(FVG_Bull_I.size() - 1)
Bull_FVG_D := FVG_Bull_D.get(FVG_Bull_D.size() - 1)
Bull_FVG_P:= FVG_Bull_P.get(FVG_Bull_P.size() - 1)
if FVG_Bear_I.size() > 0 or (ta.change(FVG_Bear_I.size() > 0) and FVG_Bear_I.size() > 0)
Bear_FVG := FVG_Bear_I.get(FVG_Bear_I.size() - 1)
Bear_FVG_D := FVG_Bear_D.get(FVG_Bear_D.size() - 1)
Bear_FVG_P := FVG_Bear_P.get(FVG_Bear_P.size() - 1)
if Permit_HReset[1] and not Permit_HReset
Bear_Trigger := true
if FVG_Bear_I.size() > 0 and Bear_FVG != 0
FVG_Bear_Trigger := true
else
FVG_Bear_Trigger := false
else
Bear_Trigger := false
FVG_Bear_Trigger := false
if Permit_LReset[1] and not Permit_LReset
Bull_Trigger := true
if FVG_Bull_I.size() > 0 and Bull_FVG != 0
FVG_Bull_Trigger := true
else
FVG_Bull_Trigger := false
else
Bull_Trigger := false
FVG_Bull_Trigger := false
if Newyork_T[1] == 0 and Newyork_T[2] == 1
Bear_FVG := 0
Bear_FVG_D := 0.0
Bear_FVG_P := 0.0
Bull_FVG := 0
Bull_FVG_D := 0.0
Bull_FVG_P := 0.0
High_OB := na
Low_OB := na
Bear_D := na
Bear_P := na
Bear_I := na
Bull_D := na
Bull_P := na
Bull_I := na
FVG_Bear_D.clear()
FVG_Bear_P.clear()
FVG_Bear_I.clear()
FVG_Bull_D.clear()
FVG_Bull_P.clear()
FVG_Bull_I.clear()
[Bull_Trigger, Bear_Trigger,FVG_Bull_Trigger, FVG_Bear_Trigger, Bull_FVG, Bear_FVG, Bull_FVG_D, Bear_FVG_D,Bull_FVG_P, Bear_FVG_P,Bull_I, Bear_I, Bull_D, Bear_D, Bull_P, Bear_P ]
Cond_High = (Newyork_T == 1 ) and (High_Break and not High_Break[1]) and not Low_Break
Cond_Low = (Newyork_T == 1 ) and (Low_Break and not Low_Break[1]) and not High_Break
//Call CISD Function
[Bull_Trigger, Bear_Trigger,FVG_Bull_Trigger, FVG_Bear_Trigger, Bull_FVG, Bear_FVG, Bull_FVG_D, Bear_FVG_D,Bull_FVG_P, Bear_FVG_P,Bull_I, Bear_I, Bull_D, Bear_D, Bull_P, Bear_P ] =
CISDLevelDetector(Cond_High,Cond_Low ,Newyork_OR ,Newyork_T ,DConditionFVG, DDFVG, DPFVG, BarDFVG, SConditionFVG, SDFVG, SPFVG, BarSFVG, 120, 'CISD level',
CISD_AShow, CISD_HShow, CISD_LShow, CISD_HNColor, CISD_LNColor , CISD_HLColor, CISD_LLColor)
[Bu_Xd1, Bu_Xd2, Bu_Yd12, Bu_Xp1, Bu_Xp2, Bu_Yp12] =
Refiner.OBRefiner('Demand', Refine ? 'On' : 'Off', RefineMe,Bull_Trigger , Bull_I) //and not Bull_FVG
[Be_Xd1, Be_Xd2, Be_Yd12, Be_Xp1, Be_Xp2, Be_Yp12] =
Refiner.OBRefiner('Supply', Refine ? 'On' : 'Off', RefineMe ,Bear_Trigger , Bear_I) // and not Bear_FVG
[Alert_DAMM, Alert_SAMMbb, PASBB, DASBB, IASBB] = Drawing.OBDrawing('Demand', Bull_Trigger , Bu_Yd12, Bu_Yp12, Bu_Xd1, Newyork_T == 1, 240 ,MLOB ,MLOB , true, false, DOBShow, false, DOBColor, #ffffff00) // and not Bull_FVG 11
[Alert_SMMM, Alert_DMMMbb, PMDBB, DMDBB, IMDBB] = Drawing.OBDrawing('Supply', Bear_Trigger , Be_Yd12, Be_Yp12, Be_Xd1, Newyork_T == 1, 240 ,MLOB ,MLOB , true, false, SOBShow, false, SOBColor, #ffffff00) // and not Bear_FVG
Drawing.OBDrawing('Demand', FVG_Bull_Trigger , Bull_FVG_D , Bull_FVG_P , Bull_FVG ,Newyork_T == 1 , 240 ,MLFVG ,MLFVG , true ,false ,DFVGShow, false,DFVGColor, #ffffff00) //Bull_FVG
Drawing.OBDrawing('Supply', FVG_Bear_Trigger , Bear_FVG_D , Bear_FVG_P , Bear_FVG, Newyork_T == 1 , 240 ,MLFVG ,MLFVG , true ,false ,SFVGShow, false,SFVGColor, #ffffff00) // Bear_FVG