【问题标题】:TradingView Pine Script Multiple crossover strategyTradingView Pine Script 多重交叉策略
【发布时间】:2020-01-28 12:18:49
【问题描述】:

我急切地寻求帮助,在交易视图中编写策略,我试图在 3 个不同的 MA 上创建交叉买入和卖出信号,特别是 9 EMA、21 EMA 和 33 简单移动平均线。我正在尝试做的是当 9 EMA 超过 21 EMA 时出现一个多头条件,并且当 21 EMA 超过 33 个简单移动平均线时也会出现相同的多头条件。我希望这适用于多头和空头 - 使用 9 和 21 作为“小信号”,而使用 21 和 33 作为“大信号”,我无法弄清楚......这是我最接近的有下面,它不会正常工作

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("EMA Crossover Strategy", overlay=true)
src = input(close, title="Source")

price = security(tickerid, period, src)
ema1 = input(9, title="1st EMA Length")
type1 = input("EMA", "1st EMA Type", options=["SMA", "EMA"])

ema2 = input(21, title="2nd EMA Length")
type2 = input("EMA", "2nd EMA Type", options=["SMA", "EMA"])

sma3 = input(33, title="1st MA Length")
type3 = input("SMA", "2nd SMA type", options=["SMA", "EMA"])

price1 = if (type1 == "EMA")
ema(price, ema1)
else
sma(price, ema1)

price2 = if (type2 == "EMA")
sma(price, ema2)
else
ema(price, ema2)

price3 = if (type3 == "SMA")
sma(price, sma3)
else
ema(price, sma3)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st EMA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd EMA", color=yellow, linewidth=2, transp=0)
plot(series=price3, style=line, title="1st MA", color=orange, linewidth=2, transp=0)

longCondition = crossover(price1, price2) and crossover(price2, price3)
if (longCondition)
strategy.entry("Long", strategy.long)

shortCondition = crossunder(price1, price2) and crossover(price2, price3)
if (shortCondition)
strategy.entry("Short", strategy.short)

信号不会显示,但如果您删除两个条件的最后一个“和交叉”部分,它将仅适用于 9 EMA 和 21 EMA,但我想合并 21 EMA 和 33 简单交叉。

这些是我试图为策略复制的信号,代码用于创建指标,但我很难将其转换为策略。您会看到当 9ema 穿过 21ema 时给出初始信号,而当 21ema 穿过 33 简单 ma 时给出更大的信号......

【问题讨论】:

    标签: algorithmic-trading trading pine-script crossover


    【解决方案1】:

    请下次复制带有空格/制表符的代码,因此不需要重新格式化。此外,不要使用[tradingiew-api] 标签来解决与 Pine 相关的问题,如标签说明中所述。

    您在条件中使用了and,这意味着两个交叉需要出现在同一个柱上才能使条件为真。还将您的 ema/sma 计算倒转为第二个 MA。

    始终最好在您的条件上打印一个标记,以确保它们也会在您期望的时候发生。

    //@version=3
    //study(title="MA Crossover Strategy", overlay = true)
    strategy("EMA Crossover Strategy", overlay=true)
    src = input(close, title="Source")
    
    price = security(tickerid, period, src)
    ema1 = input(9, title="1st EMA Length")
    type1 = input("EMA", "1st EMA Type", options=["SMA", "EMA"])
    
    ema2 = input(21, title="2nd EMA Length")
    type2 = input("EMA", "2nd EMA Type", options=["SMA", "EMA"])
    
    sma3 = input(33, title="3rd MA Length")
    type3 = input("SMA", "3rd SMA type", options=["SMA", "EMA"])
    
    price1 = if (type1 == "EMA")
        ema(price, ema1)
    else
        sma(price, ema1)
    
    price2 = if (type2 == "EMA")
        ema(price, ema2)
    else
        sma(price, ema2)
    
    price3 = if (type3 == "SMA")
        sma(price, sma3)
    else
        ema(price, sma3)
    
    //plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
    plot(series=price1, style=line,  title="1st EMA", color=blue, linewidth=2, transp=0)
    plot(series=price2, style=line, title="2nd EMA", color=yellow, linewidth=2, transp=0)
    plot(series=price3, style=line, title="1st MA", color=orange, linewidth=2, transp=0)
    
    longCondition = crossover(price1, price2) or crossover(price2, price3)
    if (longCondition)
        strategy.entry("Long", strategy.long)
    
    shortCondition = crossunder(price1, price2) or crossover(price2, price3)
    if (shortCondition)
        strategy.entry("Short", strategy.short)
    
    plotchar(shortCondition, "shortCondition", "▼", location.abovebar, maroon, size = size.tiny)
    plotchar(longCondition, "longCondition", "▲", location.belowbar, lime, size = size.tiny)
    

    【讨论】:

    • 感谢您向我介绍本网站的方式,我是新手,您显然可以告诉我哈哈哈,但我真的很感谢您的帮助!我还有几个问题,如果你能帮助我更多关于这个脚本的问题......它仍然没有像我期望的那样工作。一旦出现一些交叉,它就会发出卖出信号。有没有办法让每个条件独立,例如为 9 和 21 交叉向上做一个“小入口”,然后为 21 和 33 交叉向上做一个“大入口”?然后反之亦然,不利的一面……
    • 我在上面的答案框中发布了一张我正在寻找并尝试复制的图片,如果你能看到的话
    • 您可以通过将两个条件语句用于 long 来使每个条件独立,一个在每个交叉处,然后两个 if 语句用于 long 而不是一个,然后对 short 执行相同的操作,所以你最终会得到四个条件。这应该是一个相当简单的任务,因为您现在有工作代码。这不是一个代码编写服务,所以我会让你处理你的代码。如果您尝试了某些东西但它不起作用,那么请返回您的代码,我们会看到。由于您有一个脚本可以在您需要进入/退出的位置显示标记,因此了解它如何实现这一点可能很有用。
    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2023-02-06
    相关资源
    最近更新 更多