问题描述
我制定了一种策略,如果价格越过5分形(顶部和底部)中间平均线,则进入多头;如果价格越过5分形平均线,则结束多头。
当价格越过中间平均线以下时,该策略将做空;当价格越过5个底部分形平均线时,该策略将结束。
strategy(title="Fractal Breakout Strategy",shorttitle="Fractal Breakout Long",overlay=true)
LookBack = input(title="Periods",defval=5,minval=1,maxval=10,type=input.integer)
th = high[2]>high[1] and high[2]>high and high[2]>high[3] and high[2]>high[4] ? -1 : 0
bl = low[2]<low[1] and low[2]<low and low[2]<low[3] and low[2]<low[4] ? 1 : 0
tot = th + bl
pl = abs(tot)>=1 ? 1 : 0
// plotarrow(pl==1 ? tot : na,colorup=green,colordown=red,offset=-2,maxheight=10)
lowline = (valuewhen(tot==1,low[2],0) + (LookBack>1 ? valuewhen(tot==1,1) : 0) + (LookBack>2 ? valuewhen(tot==1,2) : 0) + (LookBack>3 ? valuewhen(tot==1,3) : 0) + (LookBack>4 ? valuewhen(tot==1,4) : 0) + (LookBack>5 ? valuewhen(tot==1,5) : 0) + (LookBack>6 ? valuewhen(tot==1,6) : 0) + (LookBack>7 ? valuewhen(tot==1,7) : 0) + (LookBack>8 ? valuewhen(tot==1,8) : 0) + (LookBack>9 ? valuewhen(tot==1,9) : 0) /LookBack)
highline = (valuewhen(tot==-1,high[2],0) + (LookBack>1 ? valuewhen(tot==-1,1) : 0) + (LookBack>2 ? valuewhen(tot==-1,2) : 0) + (LookBack>3 ? valuewhen(tot==-1,3) : 0) + (LookBack>4 ? valuewhen(tot==-1,4) : 0) + (LookBack>5 ? valuewhen(tot==-1,5) : 0) + (LookBack>6 ? valuewhen(tot==-1,6) : 0) + (LookBack>7 ? valuewhen(tot==-1,7) : 0) + (LookBack>8 ? valuewhen(tot==-1,8) : 0) + (LookBack>9 ? valuewhen(tot==-1,9) : 0))/LookBack
MidLine = (highline+lowline)/2
// Risk management
inpTakeProfit = input(defval = 1000,title = "Take Profit",minval = 0)
inpStopLoss = input(defval = 200,title = "Stop Loss",minval = 0)
inpTrailStop = input(defval = 200,title = "Trailing Stop Loss",minval = 0)
inpTrailOffset = input(defval = 0,title = "Trailing Stop Loss Offset",minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1,assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
Long = crossover(close,MidLine)
LongClose = crossunder(close,highline)
if (Long)
strategy.entry(id="Long Entry",long=true,when=Long)
strategy.close(id="Long Entry",when=LongClose)
short = crossunder(close,MidLine)
shortclose = crossover(close,lowline)
if (short)
strategy.entry(id="Short Entry",long=false,when=short)
strategy.close(id="short Entry",when=shortclose)
// === STRATEGY RISK MANAGEMENT EXECUTION ===
strategy.exit("LongClose",from_entry = "Long",profit = useTakeProfit,loss = useStopLoss,trail_points = useTrailStop,trail_offset = useTrailOffset)
strategy.exit("shortclose",from_entry = "short",trail_offset = useTrailOffset)
解决方法
尝试创建另一个仅用于退出的“ if”参数。
之前:
if (short)
strategy.entry(id="Short Entry",long=false,when=short) ///Pay attention,you typed two times "short" condition,one into if and the other into strategy.entry.
strategy.close(id="short Entry",when=shortclose)
之后:
if (short)
strategy.entry("Short Entry",strategy.short)
if shortclose
strategy.close("short Entry")
您没有得到任何数据,因为您说了“如果是空头平仓”。