问题描述
我正在尝试使用以下代码在交易视图图表中绘制通道。它可以很好地作为基本需求,但是,我需要即兴创作,我无法找到编写代码的逻辑。需要你的帮助..
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PavanSada08143
//@version=4
study("Channel","CT",true)
delay_plot_til_closed = true
repaint = (not(delay_plot_til_closed) or barstate.ishistory or barstate.isconfirmed)
fleftBars = input(title="Look Back Period",type=input.integer,defval=20,minval=1,maxval=50,step=1,group="Fibo Channel Settings")
frightBars=input(title="Look Forward Period",defval=5,maxval=30,group="Fibo Channel Settings")
widt = input(defval = 1,title = "Line Width",inline ="FiboSet1",group="Fibo Channel Settings")
extendit = input(defval = true,title = "Extend Lines to Right",group="Fibo Channel Settings")
PeakPointsConfirmation = input(title="Confirm Peak on Move %",type=input.float,defval=0.15,minval=0.05,maxval=0.25,step=0.01,group="Fibo Channel Settings")
UpChannelOption = input(title="Up Channel",type=input.string,options=["solid (─)","dotted (┈)","dashed (╌)"],defval="dashed (╌)",group="Fibo Channel Settings")
UpChanlinestyle = (UpChannelOption == "dotted (┈)") ? line.style_dotted :
(UpChannelOption == "dashed (╌)") ? line.style_dashed :
line.style_solid
DownChannelOption = input(title="Down Channel",group="Fibo Channel Settings")
DownChanlinestyle = (DownChannelOption == "dotted (┈)") ? line.style_dotted :
(UpChannelOption == "dashed (╌)") ? line.style_dashed :
line.style_solid
fb1 = input(title="Fibo Channel 1",defval=0.236,group="Fibo Channel Percentage")
fb2 = input(title="Fibo Channel 2",defval=0.618,group="Fibo Channel Percentage")
fb3 = input(title="Fibo Channel 3",defval=1.618,group="Fibo Channel Percentage")
fb4 = input(title="Fibo Channel 4",defval=2.618,group="Fibo Channel Percentage")
//========================== Variables ===============================
var float TenPctOfPivotLow = 0,float TenPctOfPivotHigh = 0
var float CurrentPivotLow = 0,float CurrentPivotHigh = 0
var float TempPivotLow = 0,float TempPivotHigh = 0
var int TempCandlePivotLow = 0,int TempCandlePivotHigh = 0
var int HasclosedAboveTenPct = 0,int HasclosedBelowTenPct = 0
var float LastKNownPivotLow = 1e99,float LastKNownPivotHigh = 1e99
var int CandleOfLatestLow = 0,int CandleOfLatestHigh = 0
var int CandleOfLastKNownPivotLow = 0,int CandleOfLastKNownPivotHigh = 0
var float Slope = 0,int Trend = 0
var int distanceBwTwoZeroPoints = 0,int MidToLeftdistance = 0,int MidToRightdistance = 0
var float ExpValueOf100FromMidToLeft = 0,float ExpValueOf100FromMidToRight = 0
var fibo_ratios = array.new_float(0)
var bool AlreadyDownChannelExists = false,bool AlreadyUpChannelExists = false
var line DrawUpTrendLine = line.new(bar_index,low,bar_index,low)
var line DrawUpHighTrendLine = line.new(bar_index,low)
var Downfibolines = array.new_line(4)
var Upfibolines = array.new_line(4)
var line DrawDownTrendLine = line.new(bar_index,high,high)
var line DrawUpLowTrendLine = line.new(bar_index,high)
if barstate.isfirst
array.push(fibo_ratios,fb1)
array.push(fibo_ratios,fb2)
array.push(fibo_ratios,fb3)
array.push(fibo_ratios,fb4)
//========================== BASIC CALculaTION ===============================
PivotHigh=0.00,PivotHigh := nz(pivothigh(high,fleftBars,frightBars),0.00)
PivotLow=0.00,PivotLow := nz(pivotlow(low,0.00)
//========================== PIVOT HIGH CALculaTION ===============================
if PivotHigh != 0.00 // Candles where Pivot High is found
TempPivotHigh:= PivotHigh
TempCandlePivotHigh := valuewhen(TempPivotHigh,bar_index[frightBars],0)
TenPctOfPivotHigh := (TempPivotHigh - ((TempPivotHigh * PeakPointsConfirmation)/100))
else
TempPivotHigh:= TempPivotHigh[1]
TempCandlePivotHigh := TempCandlePivotHigh[1]
TenPctOfPivotHigh := TenPctOfPivotHigh[1]
HasclosedBelowTenPct := 0
for i = 0 to 30
if close[i] <= TenPctOfPivotHigh and bar_index[i] > TempCandlePivotHigh
HasclosedBelowTenPct:= HasclosedBelowTenPct + 1
if HasclosedBelowTenPct == 1
LastKNownPivotHigh:= CurrentPivotHigh[1]
CandleOfLastKNownPivotHigh:=CandleOfLatestHigh[1]
CurrentPivotHigh := TempPivotHigh
CandleOfLatestHigh := TempCandlePivotHigh
else
LastKNownPivotHigh:= LastKNownPivotHigh[1]
CandleOfLastKNownPivotHigh:=CandleOfLastKNownPivotHigh[1]
CurrentPivotHigh := CurrentPivotHigh[1]
CandleOfLatestHigh := CandleOfLatestHigh[1]
//========================== PIVOT LOW CALculaTION ===============================
if PivotLow != 0.00 // Candles where Pivot Low is found
TempPivotLow:= PivotLow
TempCandlePivotLow := valuewhen(TempPivotLow,0)
TenPctOfPivotLow := (TempPivotLow + ((TempPivotLow * PeakPointsConfirmation)/100))
else
TempPivotLow:= TempPivotLow[1]
TempCandlePivotLow := TempCandlePivotLow[1]
TenPctOfPivotLow := TenPctOfPivotLow[1]
HasclosedAboveTenPct := 0
for i = 0 to 30
if close[i] >= TenPctOfPivotLow and bar_index[i] > TempCandlePivotLow
HasclosedAboveTenPct:= HasclosedAboveTenPct + 1
if HasclosedAboveTenPct == 1
LastKNownPivotLow:= CurrentPivotLow[1]
CandleOfLastKNownPivotLow:=CandleOfLatestLow[1]
CurrentPivotLow := TempPivotLow
CandleOfLatestLow := TempCandlePivotLow
else
LastKNownPivotLow:= LastKNownPivotLow[1]
CandleOfLastKNownPivotLow:=CandleOfLastKNownPivotLow[1]
CurrentPivotLow := CurrentPivotLow[1]
CandleOfLatestLow := CandleOfLatestLow[1]
//===================== Determination of Trend ========================
distanceBwTwoZeroPoints:= 0
Slope:= 0
MidToLeftdistance:= 0
MidToRightdistance:= 0
ExpValueOf100FromMidToLeft := 0
ExpValueOf100FromMidToRight := 0
if CurrentPivotLow > LastKNownPivotLow and repaint and AlreadyUpChannelExists == false
AlreadyUpChannelExists := true
distanceBwTwoZeroPoints:= CandleOfLatestLow - CandleOfLastKNownPivotLow
Slope:= (CurrentPivotLow - LastKNownPivotLow) / distanceBwTwoZeroPoints
MidToRightdistance:= CandleOfLatestLow - CandleOfLatestHigh
MidToLeftdistance:= CandleOfLatestHigh - CandleOfLastKNownPivotLow
ExpValueOf100FromMidToLeft := CurrentPivotHigh - (Slope * MidToLeftdistance)
ExpValueOf100FromMidToRight := CurrentPivotHigh + (Slope * MidToRightdistance)
Trend:= 1
else if CurrentPivotHigh < LastKNownPivotHigh and repaint and AlreadyDownChannelExists == false
AlreadyDownChannelExists := true
distanceBwTwoZeroPoints:= CandleOfLatestHigh - CandleOfLastKNownPivotHigh
Slope:= (LastKNownPivotHigh - CurrentPivotHigh) / distanceBwTwoZeroPoints
MidToLeftdistance:= CandleOfLatestLow - CandleOfLastKNownPivotHigh
MidToRightdistance:= CandleOfLatestHigh - CandleOfLatestLow
ExpValueOf100FromMidToLeft := CurrentPivotLow + (Slope * MidToLeftdistance)
ExpValueOf100FromMidToRight := CurrentPivotLow - (Slope * MidToRightdistance)
Trend:= -1
if (CurrentPivotLow < LastKNownPivotLow) or (MidToRightdistance <= 0) or (CurrentPivotHigh < LastKNownPivotHigh) or dayofmonth(time[bar_index - CandleOfLatestLow]) != dayofmonth(time[bar_index - CandleOfLastKNownPivotLow])
AlreadyUpChannelExists := false
if (CurrentPivotHigh < LastKNownPivotHigh) or (MidToRightdistance <= 0) or (CurrentPivotLow < LastKNownPivotLow) or dayofmonth(time[bar_index - CandleOfLatestHigh]) != dayofmonth(time[bar_index - CandleOfLastKNownPivotHigh])
AlreadyDownChannelExists := false
if Trend== 1
line.delete(DrawDownTrendLine)
line.delete(DrawUpLowTrendLine)
for ab = 0 to 3
line.delete(array.get(Downfibolines,ab))
DrawUpTrendLine := line.new(CandleOfLastKNownPivotLow,LastKNownPivotLow,CandleOfLatestLow,CurrentPivotLow,style=UpChanlinestyle,color=color.lime,width = widt,extend = extendit ? extend.right : extend.none)
line.delete(DrawUpTrendLine[1])
DrawUpHighTrendLine := line.new(CandleOfLastKNownPivotLow,ExpValueOf100FromMidToLeft,ExpValueOf100FromMidToRight,extend = extendit ? extend.right : extend.none)
line.delete(DrawUpHighTrendLine[1])
for x = 0 to 3
line.delete(array.get(Upfibolines,x))
array.set(Upfibolines,x,line.new(x1 = CandleOfLastKNownPivotLow,y1 = LastKNownPivotLow + (( ExpValueOf100FromMidToLeft - LastKNownPivotLow ) * array.get(fibo_ratios,x)),x2 = CandleOfLatestLow,y2 = CurrentPivotLow + (( ExpValueOf100FromMidToRight - CurrentPivotLow ) * array.get(fibo_ratios,color = x == 0? color.aqua : x == 1? color.lime : color.yellow,style = UpChanlinestyle,extend = extendit ? extend.right : extend.none))
else if Trend== -1
line.delete(DrawUpTrendLine)
line.delete(DrawUpHighTrendLine)
for aa = 0 to 3
line.delete(array.get(Upfibolines,aa))
DrawDownTrendLine := line.new(CandleOfLastKNownPivotHigh,LastKNownPivotHigh,CandleOfLatestHigh,CurrentPivotHigh,style=DownChanlinestyle,color=color.red,extend = extendit ? extend.right : extend.none)
line.delete(DrawDownTrendLine[1])
DrawUpLowTrendLine := line.new(CandleOfLastKNownPivotHigh,extend = extendit ? extend.right : extend.none)
line.delete(DrawUpLowTrendLine[1])
for x = 0 to 3
line.delete(array.get(Downfibolines,x))
array.set(Downfibolines,line.new(x1 = CandleOfLastKNownPivotHigh,y1 = LastKNownPivotHigh + (( ExpValueOf100FromMidToLeft - LastKNownPivotHigh ) * array.get(fibo_ratios,x2 = CandleOfLatestHigh,y2 = CurrentPivotHigh + (( ExpValueOf100FromMidToRight - CurrentPivotHigh ) * array.get(fibo_ratios,color = x == 0? color.aqua : x == 1? color.red : color.yellow,style = DownChanlinestyle,extend = extendit ? extend.right : extend.none))
上述脚本首先确定了 3 个要点。如果要为上升趋势绘制通道,则需要第一个低点和下一个高点,最后是更高的低点。反之,下降趋势需要高点、低点和低点。
基于这些点,通道被绘制在图表上。在任何时候,我都只需要一个频道就可以显示在图表上。
目前的问题是:
-
假设它最初找到了这 3 个点以实现上升趋势。在 几根蜡烛,如果发现新高,它会重新调整蜡烛 删除旧的。你能帮我提出一个条件,要么 零线被打破或价格(高)已达到“fb4”没有新的渠道 应该绘制?
-
在通道下降且价格在范围内时发现上升趋势 零线和 fb4 线。目前,它删除下行通道 并绘制了一个新的上升通道。你能帮我提出一个条件吗 零线被打破或价格(高)已达到“fb4”没有 应该绘制新频道吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)