0

我有一个策略,效果很好。我想将其转换为研究(指标),同时我面临着多次生成信号的问题。

我不确定我在这里做错了什么。

策略代码

//@version=4
strategy("Debug_Strategy", overlay=true)

// inputs:
inp_lkb = input( title='Lookback Period', defval=300)
percen_above_hh = input( title='% above HH (SL) (0-100)', defval=1)
percen_above_vwap = input( title='% From spike made (Exit) (1-100)', defval=1)
perc_price_change = input( title='% change (1-100)', defval=5)
inp_diff=input(title='min. diff. between MAs (0-5)',defval=0.25)
// Price change
// study(title="change in full %", shorttitle="%c", overlay=false, resolution="")
change = ((close - close[inp_lkb]) / close[inp_lkb]) * 100
// plot(change, color=color.green,title='Percentage Change from Start to High', linewidth=2)
// Price change

// SMAs
fastMALen = input(title="Fast SMA Length", defval=5)
slowMALen = input(title="Slow SMA Length", defval=18)
fastMA = sma(close, fastMALen)
slowMA = sma(close, slowMALen)
// 

// Stop input
hiHighs = highest(high, inp_lkb)[1]
lowLows= lowest(low,inp_lkb)[1]
pos_size = 1000
// 
spikeMadeEntry=hiHighs-lowLows
tpEntry =  hiHighs- (spikeMadeEntry*percen_above_vwap/100)
diff=abs(fastMA-slowMA)/((fastMA+slowMA)/2) *100

//(have included a calculation but using the built in vwap function for speed, as you are on 1 second)
if change >= perc_price_change and close > vwap(hlc3)  and diff>inp_diff  and crossunder(fastMA, slowMA) and close>tpEntry
    strategy.entry("sell", strategy.short, 1000, when=strategy.position_size <= 0) 
    
//take_profit = close * (1+percen_above_vwap)
sold = strategy.position_size[0] < strategy.position_size[1]
sl = valuewhen(sold, hiHighs*(1+percen_above_hh/100), 0)
//sl = valuewhen(bought, hiHighs, 0)
spikeMade=valuewhen(sold,hiHighs-lowLows,0)
tp =  valuewhen(sold,hiHighs- (spikeMade*percen_above_vwap/100),0)

if  high >= sl or low <= tp
    strategy.entry("buy", strategy.long, 0, when=strategy.position_size < 0) 
//plot(strategy.equity)

plot(sl, color=color.orange,title='StopLoss', linewidth=1)
plot(tp, color=color.blue,title='Target Price', linewidth=1)
plot(hiHighs, color=color.green,title='PastHigh', linewidth=1)
plot(lowLows, color=color.white,title='PastLow', linewidth=1)
//plot(vwap(hlc3), color=color.green,title='VWAP', linewidth=1)
plot(slowMA, color=color.yellow, title='Slow MA', linewidth=1)
plot(fastMA, color=color.red, title='Fast MA', linewidth=1)
//plot(change, color=color.white, title='debig', linewidth=1)

策略设置

策略交易

研究(指标)代码

//@version=4
study("Debug_v2", overlay=true)

var isLong = false
var isShort = false


// inputs:
inp_lkb = input( title='Lookback Period', defval=300)
percen_above_hh = input( title='% above HH (SL) (0-100)', defval=1)
percen_above_vwap = input( title='% From spike made (Exit) (1-100)', defval=1)
perc_price_change = input( title='% change (1-100)', defval=5)
inp_diff=input(title='min. diff. between MAs (0-5)',defval=0.25)
// Price change
// study(title="change in full %", shorttitle="%c", overlay=false, resolution="")
change = ((close - close[inp_lkb]) / close[inp_lkb]) * 100
// plot(change, color=color.green,title='Percentage Change from Start to High', linewidth=2)
// Price change

// SMAs
fastMALen = input(title="Fast SMA Length", defval=5)
slowMALen = input(title="Slow SMA Length", defval=18)
fastMA = sma(close, fastMALen)
slowMA = sma(close, slowMALen)
// 

// Stop input
hiHighs = highest(high, inp_lkb)[1]
lowLows= lowest(low,inp_lkb)[1]
pos_size = 1000
// 
spikeMadeEntry=hiHighs-lowLows
tpEntry =  hiHighs- (spikeMadeEntry*percen_above_vwap/100)
diff=abs(fastMA-slowMA)/((fastMA+slowMA)/2) *100

sellSignal = not isShort and change >= perc_price_change and close > vwap(hlc3)  and diff>inp_diff  and crossunder(fastMA, slowMA) and close>tpEntry

//(have included a calculation but using the built in vwap function for speed, as you are on 1 second)
if sellSignal
    isLong := false
    isShort := true
//else
//    isLong := false
//    isShort := false
    
//take_profit = close * (1+percen_above_vwap)
sold = isShort
sl = hiHighs*(1+percen_above_hh/100)
//sl = valuewhen(bought, hiHighs, 0)
spikeMade=hiHighs-lowLows
tp =  hiHighs- (spikeMade*percen_above_vwap/100)


buySignal = not isLong  and high >= sl or low <= tp

if  buySignal
    isLong := true
    isShort := false
//else
//    isLong := false
//    isShort := false

plot(sl, color=color.orange,title='StopLoss', linewidth=1)
plot(tp, color=color.blue,title='Target Price', linewidth=1)
plot(hiHighs, color=color.green,title='PastHigh', linewidth=1)
plot(lowLows, color=color.white,title='PastLow', linewidth=1)
//plot(vwap(hlc3), color=color.green,title='VWAP', linewidth=1)
plot(slowMA, color=color.yellow, title='Slow MA', linewidth=1)
plot(fastMA, color=color.red, title='Fast MA', linewidth=1)
//plot(change, color=color.white, title='debig', linewidth=1)

plotshape(series=buySignal, title="BUY", text="BUY", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(series=sellSignal, title="SELL", text="SELL", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

用于指标的相同设置。使用的符号。“WIMI”,使用的时间范围。1分钟。

指标结果

4

1 回答 1

1

你的low <= tp情况几乎总是true。由于您使用运算符buySignal具有该条件,因此被评估为. 这就是为什么你总是有“买入”信号的原因。orbuySignaltrue

将此添加到您的图表中。这就是您可以调试的方式。我基本上绘制了所有条件buySignal,然后查看其中哪些是trueand false

//@version=4
study("Debug_v3", overlay=false)

var isLong = false
var isShort = false


// inputs:
inp_lkb = input( title='Lookback Period', defval=300)
percen_above_hh = input( title='% above HH (SL) (0-100)', defval=1)
percen_above_vwap = input( title='% From spike made (Exit) (1-100)', defval=1)
perc_price_change = input( title='% change (1-100)', defval=5)
inp_diff=input(title='min. diff. between MAs (0-5)',defval=0.25)
change = ((close - close[inp_lkb]) / close[inp_lkb]) * 100

// SMAs
fastMALen = input(title="Fast SMA Length", defval=5)
slowMALen = input(title="Slow SMA Length", defval=18)
fastMA = sma(close, fastMALen)
slowMA = sma(close, slowMALen)

// Stop input
hiHighs = highest(high, inp_lkb)[1]
lowLows= lowest(low,inp_lkb)[1]
pos_size = 1000

spikeMadeEntry=hiHighs-lowLows
tpEntry =  hiHighs- (spikeMadeEntry*percen_above_vwap/100)
diff=abs(fastMA-slowMA)/((fastMA+slowMA)/2) *100

sellSignal = not isShort and change >= perc_price_change and close > vwap(hlc3)  and diff>inp_diff  and crossunder(fastMA, slowMA) and close>tpEntry

//(have included a calculation but using the built in vwap function for speed, as you are on 1 second)
if sellSignal
    isLong := false
    isShort := true

sold = isShort
sl = hiHighs*(1+percen_above_hh/100)
spikeMade=hiHighs-lowLows
tp =  hiHighs- (spikeMade*percen_above_vwap/100)


buySignal = not isLong  and high >= sl or low <= tp

if  buySignal
    isLong := true
    isShort := false

plot(not isLong ? 1 : 0)
plot(high >= sl ? 3: 2)
plot(low <= tp ? 5 : 4)

在此处输入图像描述

于 2022-01-20T13:16:04.097 回答