Конвертировать стратегию Pine скрипт из v2 в v4, сделал это, но получил разные и неправильные результаты - PullRequest
0 голосов
/ 20 апреля 2020

Мой оригинальный сценарий основан на стратегии HeikinAshi с определенными условиями.

//@version=2
//Heikin Ashi Strategy  V2 by breizh29

strategy("Heikin Ashi Strategy  V2",shorttitle="HAS V2",overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=100,currency=currency.GBP)
res = input(title="Heikin Ashi Candle Time Frame", type=resolution, defval="60")
hshift = input(1,title="Heikin Ashi Candle Time Frame Shift")
res1 = input(title="Heikin Ashi EMA Time Frame", type=resolution, defval="180")
mhshift = input(0,title="Heikin Ashi EMA Time Frame Shift")
fama = input(1,"Heikin Ashi EMA Period")
test = input(1,"Heikin Ashi EMA Shift")
sloma = input(30,"Slow EMA Period")
slomas = input(1,"Slow EMA Shift")
macdf = input(false,title="With MACD filter")
res2 = input(title="MACD Time Frame", type=resolution, defval="15")
macds = input(1,title="MACD Shift")




//Heikin Ashi Open/Close Price
ha_t = heikinashi(tickerid)
ha_open = security(ha_t, res, open[hshift])
ha_close = security(ha_t, res, close[hshift])
mha_close = security(ha_t, res1, close[mhshift])

//macd
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdl = security(ha_t,res2,macdLine[macds])
macdsl= security(ha_t,res2,signalLine[macds])

//Moving Average
fma = ema(mha_close[test],fama)
sma = ema(ha_close[slomas],sloma)
plot(fma,title="MA",color=lime,linewidth=2,style=line)
plot(sma,title="SMA",color=red,linewidth=2,style=line)


//Strategy
golong =  crossover(fma,sma) and (macdl > macdsl or macdf == false )
goshort =   crossunder(fma,sma) and (macdl < macdsl or macdf == false )

strategy.entry("Buy",strategy.long,when = golong)
if (goshort)
    strategy.close("Buy")



, и мой скомпилированный сценарий для v4 равен

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Stopperbg

//@version=4

strategy("HAS V3",shorttitle="HAS V3",overlay=true,default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=1000,currency=currency.USD)
res = input(title="Heikin Ashi Candle Time Frame", type=input.resolution, defval="60")
hshift = input(1,title="Heikin Ashi Candle Time Frame Shift")
res1 = input(title="Heikin Ashi EMA Time Frame", type=input.resolution, defval="180")
mhshift = input(0,title="Heikin Ashi EMA Time Frame Shift")
fama = input(1,"Heikin Ashi EMA Period")
test = input(1,"Heikin Ashi EMA Shift")
sloma = input(30,"Slow EMA Period")
slomas = input(1,"Slow EMA Shift")
macdf = input(false,title="With MACD filter")
res2 = input(title="MACD Time Frame", type=input.resolution, defval="15")
macds = input(1,title="MACD Shift")




//Heikin Ashi Open/Close Price
t = tickerid(syminfo.prefix, syminfo.ticker, session.regular)
ha_t = heikinashi(t)
ha_open = security(ha_t, res, open[hshift])
ha_close = security(ha_t, res, close[hshift])
mha_close = security(ha_t, res1, close[mhshift])

//macd
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdl = security(ha_t,res2,macdLine[macds])
macdsl= security(ha_t,res2,signalLine[macds])

//Moving Average
fma = ema(mha_close[test],fama)
sma = ema(ha_close[slomas],sloma)
plot(fma,title="MA",color=color.lime,linewidth=2,style=plot.style_line)
plot(sma,title="SMA",color=color.red,linewidth=2,style=plot.style_line)


//Strategy
golong =  crossover(fma,sma) and (macdl > macdsl or macdf == false )
goshort =   crossunder(fma,sma) and (macdl < macdsl or macdf == false )

strategy.entry("Buy",strategy.long,when = golong)
if (goshort)
    strategy.close("Buy")



Я следовал инструкциям, и мой сценарий без ошибок. Я делаю это преобразование, потому что я хочу добавить alertcondition, чтобы получить сигнал тревоги при выполнении условия.

На v2 нет предупреждения с добавленным сигналом покупки или продажи, обратите внимание, что в Pine v4 и alertcondition Вызов генерирует дополнительный сюжет. Все такие вызовы учитываются при расчете количества выходных рядов для сценария. Но я получил разные результаты. что с ним не так?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Этот скрипт вводит в заблуждение и приводит к нереалистичным c результатам.

При использовании настроек по умолчанию код обманывает, используя будущие данные для вычисления переменной fma, используемой для запуска Заказы на покупку / продажу. Если hshift == 0 или mhshift == 0 (по умолчанию), тогда ваш сценарий будет использовать будущие данные, что вводит в заблуждение трейдеров или вас.

Чтобы избежать этого, вам следует изменить следующие строки:

hshift = input(1,title="Heikin Ashi Candle Time Frame Shift")
mhshift = input(0,title="Heikin Ashi EMA Time Frame Shift")

в:

hshift = input(1,title="Heikin Ashi Candle Time Frame Shift", minval = 1)
mhshift = input(1,title="Heikin Ashi EMA Time Frame Shift", minval = 1)

См. Как избежать перекраски при использовании security () - для получения более подробной информации PineCoders FAQ .

Обратите внимание, что Сценарии, использующие исходный код, который вы использовали повторно, были модерированы некоторое время назад по той причине, что они вводили в заблуждение.

0 голосов
/ 20 апреля 2020

так что мне удается это исправить. добавлен lookahead = barmerge.lookahead_on

ha_open = security(ha_t, res, open[hshift], lookahead=barmerge.lookahead_on)
ha_close = security(ha_t, res, close[hshift], lookahead=barmerge.lookahead_on)
mha_close = security(ha_t, res1, close[mhshift], lookahead=barmerge.lookahead_on)

по умолчанию они выключили lookahead

...