将Pine Script转换为研究?

时间:2019-10-05 22:47:46

标签: pine-script

我正在尝试将TradingView策略转换为带有警报的研究。我对这个想法比较陌生。我创建了图,以便在图表上显示多头和空头条目,然后创建与这些条目相对应的警报。但是我的问题出在这里,因为我找不到在哪里创建相应的退出警报。

//@version=3
study("Generalized SSL Backtest w/ TSSL", shorttitle="Judgement", overlay=true)

lb = input(10, title="Lb", minval=1)
maType = input(type=string, defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"])

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

ma(t,sig,len) =>
    sss=na
    if t =="SMA"
        sss := sma(sig,len)
    if t == "EMA"
        sss := ema(sig,len)
    if t == "HMA"
        sss := hma(sig,len)
    if t == "McG" // Mc Ginley
        sss := mcg(sig,len)
    if t == "Tenkan"
        sss := tenkan(sig,len)
    if t == "WMA"
        sss := wma(sig,len)
    sss

base(mah, mal) =>
    bbb = na
    inChannel = close<mah and close>mal
    belowChannel = close<mah and close<mal
    bbb := inChannel? bbb[1]: belowChannel? -1: 1
    uuu = bbb==1? mal: mah
    ddd = bbb==1? mah: mal
    [uuu, ddd]

maH = ma(maType, high, lb)
maL = ma(maType, low, lb)

[up, dn] = base(maH,maL)

plot(up, title="High MA", color=lime, linewidth=3)
plot(dn, title="Low MA", color=orange, linewidth=3)

long = crossover(dn,up)
short = crossover(up,dn)

// === STRATEGY - LONG POSITION EXECUTION ===
//strategy.entry("Long", strategy.long, when= long and startTimeOk())
//strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
//strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
//strategy.entry("Short", strategy.short, when= short and startTimeOk())
//strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
//strategy.exit("Exit", when= long) 


plotchar(long, char = "Long", color = green)
plotchar(short, char = "Short", color = red)

alertcondition(long, "ENTRY LONG", "ENTRY LONG")
alertcondition(short, "ENTRY SHORT", "ENTRY SHORT")

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您遇到问题的原因是,在Pine中,您无法自动将策略的经纪人仿真逻辑转移到研究中,而当您使用strategy.*()参数,例如loss=,{{1 }}等

您有两种选择:

  1. 如果您的最终目标是生成警报以将订单提供给第三方订单执行应用,并且如果您的策略碰巧使用固定的交易管理参数(似乎是您的情况),那么您可以能够通过脚本生成的警报消息将这些参数转换为第三方的订单语法,从而将贸易管理的这一部分委派给第三方应用。

  2. 在Pine中手动手动编码所有交易管理,以使其在研究和策略模式下均有效,并且仅依靠trail_offset=调用即可使您的策略执行简单的通用市场不使用您当前正在使用的任何贸易管理strategy.*()参数的订单。一旦实现这一点,就可以在学习模式和策略模式之间进行转换,只需注释/取消注释几行在学习模式和策略脚本模式之间不兼容的代码即可。

    一个很好的例子是 PineCoders回测和交易引擎,这里是:https://www.tradingview.com/script/dYqL95JB-Backtesting-Trading-Engine-PineCoders/

    一个更简单的混合代码示例,可以轻松地在策略和研究模式之间转换,但仅包含基本贸易管理逻辑是:https://www.tradingview.com/script/pjZKWnHl-Volatility-System-by-Wilder-LucF/

注:即将发布的警报动态消息功能将使您能够生成具有系列值(可变信息)的警报。尽管这仍然不允许将代理仿真器逻辑自动转换为算例,但它应该使转换更容易。