TradingView Pine Script Множественная перекрестная стратегия

Я отчаянно ищу помощи в написании стратегии в торговом представлении, где я пытаюсь создать перекрестные сигналы покупки и продажи на 3 разных MA, в частности на 9 EMA, 21 EMA и 33 простых скользящих средних. То, что я пытаюсь сделать, состоит в том, чтобы возникло условие длинной позиции, когда EMA 9 пересекает EMA 21, а также такое же состояние длинной позиции возникает, когда EMA 21 пересекает простую скользящую среднюю 33. Я хочу, чтобы это работало как для лонгов, так и для шортов - используя 9 и 21 как «малый сигнал», а 21 и 33 как «большой сигнал», и я не могу понять это ... это самое близкое, что я ниже, и это не будет работать правильно :/ Пожалуйста, помогите, я выложу venmo / cash для ваших следующих 6 упаковок на меня !!!!

//@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)

Сигналы не появятся, но если вы удалите последнюю часть «и пересечение» обоих условий, это будет работать только для EMA 9 и EMA 21, но я хочу включить EMA 21 и простое пересечение 33.


person EMAguru    schedule 28.09.2019    source источник


Ответы (2)


Пожалуйста, в следующий раз скопируйте свой код с пробелами/табуляциями, чтобы его не нужно было переформатировать. Кроме того, не используйте тег [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)

введите здесь описание изображения

person PineCoders-LucF    schedule 29.09.2019
comment
Спасибо, что познакомили меня с этим сайтом, я новичок, как вы, очевидно, можете сказать, хахаха, но я действительно ценю вашу помощь! У меня есть еще пара вопросов, если бы вы могли помочь мне с этим сценарием еще немного... Он все еще не работает, как я ожидал. Он подает сигналы на продажу, как только происходят некоторые пересечения. Можно ли каким-либо образом сделать каждое условие независимым, например, сделать небольшой вход для пересечения 9 и 21 вверх, а затем сделать большой вход для пересечения 21 и 33 вверх? а потом и наоборот... - person EMAguru; 29.09.2019
comment
Я разместил изображение того, что я ищу и пытаюсь воспроизвести в поле ответа выше, если вы его видите. - person EMAguru; 29.09.2019
comment
Вы можете сделать каждое условие независимым, создав два оператора условий для длинной позиции, по одной для каждого пересечения, а затем два оператора if для длинной позиции вместо одной, затем сделайте то же самое для короткой позиции, так что в итоге вы получите четыре условия. Это должно быть довольно простой задачей, так как теперь у вас есть работающий код. Это не служба написания кода, поэтому я позволю вам поработать над вашим кодом. Если вы попробуете что-то, и это не сработает, вернитесь со своим кодом, и мы посмотрим. Поскольку у вас есть скрипт, который показывает маркеры, где вам нужны входы/выходы, может быть полезно посмотреть, как он этого достигает. - person PineCoders-LucF; 29.09.2019