0

Thinkscript には、Adaptive EMA を計算する一見単純な関数があります。ただし、Pine Script では使用できない thinkscript のビルトイン CompoundValue 関数を使用します。

Pine Script で CompoundValue 関数を再作成できません。おそらく再帰的ですが、別の回答で、実際にはネストされたifステートメントのようなものであることがわかります。

AdaptiveEMA の thinkscript コード:

input price = close;
input length = 10;
input highLowLength = 10;

def multiplier1 = 2 / (length + 1);
def multiplier2 = AbsValue((close - Lowest(low, highLowLength)) - (Highest(high, highLowLength) - close)) / (Highest(high, highLowLength) - Lowest(low, highLowLength));
def alpha = multiplier1 * (1 + multiplier2);
def ma = CompoundValue(1, ma[1] + alpha * (price - ma[1]), Average(price, length));

plot AEMA = ma;
AEMA.SetDefaultColor(GetColor(1));

これを関数にしようとしているので、1 つのチャートに 2 つの AdaptiveEMA を配置して、次のように呼び出すことができます。

plot AEMAshort = adaptiveEMA(close, 25, 25);
plot AEMAlong = adaptiveEMA(close, 50, 50);

CompoundValue で私を悩ませていることの 1 つは、最初のパラメーターが最初のパラメーターであることです。thinkscriptの参照から:

次のルールに従って複合値を計算します: バー番号が長さより大きい場合は可視データ値が返され、それ以外の場合は履歴データ値が返されます。この関数は、再帰を使用してスタディを初期化するために使用されます。

AdapativeEMA スクリプトの CompoundValue の最初のパラメータが 1 の場合、barindex は、1 日の最初の 1 分を除いて、ほぼ常に 1 より大きいのではないでしょうか?

Pine Script の CompoundValue 関数を分解してここで使用するにはどうすればよいですか? どんな助けでも大歓迎です。

4

1 に答える 1