Pine Script:三个指标都得确认趋势
Pine Script: All three indicators have to confirm trend
我的策略基于 3 个不同的指标。作为一个条件,在主要指标变为真之前,所有这些都必须至少在一根蜡烛上为假。在我的示例中,蜡烛 4 没有触发,因为指标 2 在蜡烛 3 上不是错误的。蜡烛 10 对于主要指标是正确的,因为所有指标在蜡烛 8 或 9 上都是错误的。
bar
1
2
3
4
5
6
7
8
9
10
11
12
indicator 1
true
true
false
true
true
false
true
true
false
true
...
...
indicator 2
false
true
true
true
false
false
true
true
false
true
...
...
indicator 3
false
true
false
true
false
false
true
false
true
true
...
...
melting indicators
false
true
false
false (not all were false on #3)
false
false
true
false
true
true
...
...
你会帮我很多!
如果我理解正确,当指标 1-2-3 为 true
时,您需要熔化指标为 true
,但前提是指标 1-2-3 为 [=15] =] 在前 2 个柱中的任何时间点。
这个伪代码可以做到这一点。
//@version=5
indicator("My Script", overlay=true)
var bool a = na // indicator 1
var bool b = na // indicator 2
var bool c = na // indicator 3
var bool m = na // melting indicator
m := a and b and c and (not a[1] or not a[2]) and (not b[1] or not b[2]) and (not c[1] or not c[2])
plot(na)
或者你可以用一个函数来完成,这样可以提高代码的可读性。
//@version=5
indicator("My Script", overlay=true)
var bool a = na // indicator 1
var bool b = na // indicator 2
var bool c = na // indicator 3
var bool m = na // melting indicator
f_check(bool _x) => _x and (not _x[1] or not _x[2])
m := f_check(a) and f_check(b) and f_check(c)
plot(na)
编辑 1 以响应 :
蜡烛数未定义的示例
//@version=5
indicator("My Script", overlay=true)
var bool a = na // indicator 1
var bool b = na // indicator 2
var bool c = na // indicator 3
var bool m = na // melting indicator
var bool a_triggered = false
var bool b_triggered = false
var bool c_triggered = false
// once triggered, keep triggered until reset
a_triggered := not a or a_triggered
b_triggered := not b or b_triggered
c_triggered := not c or c_triggered
// melting indicator will ony be able to be true when conditions are met for a, b, c AND if all triggers have fired since last reset
m := a and b and c and a_triggered and b_triggered and c_triggered
// melting indicator is true?
if m
// reset triggers
a_triggered := false
b_triggered := false
c_triggered := false
plot(na)
我的策略基于 3 个不同的指标。作为一个条件,在主要指标变为真之前,所有这些都必须至少在一根蜡烛上为假。在我的示例中,蜡烛 4 没有触发,因为指标 2 在蜡烛 3 上不是错误的。蜡烛 10 对于主要指标是正确的,因为所有指标在蜡烛 8 或 9 上都是错误的。
bar | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
indicator 1 | true | true | false | true | true | false | true | true | false | true | ... | ... |
indicator 2 | false | true | true | true | false | false | true | true | false | true | ... | ... |
indicator 3 | false | true | false | true | false | false | true | false | true | true | ... | ... |
melting indicators | false | true | false | false (not all were false on #3) | false | false | true | false | true | true | ... | ... |
你会帮我很多!
如果我理解正确,当指标 1-2-3 为 true
时,您需要熔化指标为 true
,但前提是指标 1-2-3 为 [=15] =] 在前 2 个柱中的任何时间点。
这个伪代码可以做到这一点。
//@version=5
indicator("My Script", overlay=true)
var bool a = na // indicator 1
var bool b = na // indicator 2
var bool c = na // indicator 3
var bool m = na // melting indicator
m := a and b and c and (not a[1] or not a[2]) and (not b[1] or not b[2]) and (not c[1] or not c[2])
plot(na)
或者你可以用一个函数来完成,这样可以提高代码的可读性。
//@version=5
indicator("My Script", overlay=true)
var bool a = na // indicator 1
var bool b = na // indicator 2
var bool c = na // indicator 3
var bool m = na // melting indicator
f_check(bool _x) => _x and (not _x[1] or not _x[2])
m := f_check(a) and f_check(b) and f_check(c)
plot(na)
编辑 1 以响应
蜡烛数未定义的示例
//@version=5
indicator("My Script", overlay=true)
var bool a = na // indicator 1
var bool b = na // indicator 2
var bool c = na // indicator 3
var bool m = na // melting indicator
var bool a_triggered = false
var bool b_triggered = false
var bool c_triggered = false
// once triggered, keep triggered until reset
a_triggered := not a or a_triggered
b_triggered := not b or b_triggered
c_triggered := not c or c_triggered
// melting indicator will ony be able to be true when conditions are met for a, b, c AND if all triggers have fired since last reset
m := a and b and c and a_triggered and b_triggered and c_triggered
// melting indicator is true?
if m
// reset triggers
a_triggered := false
b_triggered := false
c_triggered := false
plot(na)