1

早上好,

我有一个小问题。

我想处理来自两个不同时间间隔的数据。例如,BTC(1 天时间间隔)和 BTC(4 小时时间间隔)图表。

主要时间间隔为 4 小时。值“HA_C”,这是“BTC 1 Day”的收盘价。“关闭 BTC 1 天时间间隔”值在 4 小时图中显示正确。但是简单算术问题的值“测试”差异很大并且是错误的。

您可以按如下方式对此进行测试:在“BTC”中加载策略,时间间隔“1 天”,从一天开始记录“BTC Close”值和“test”值。

然后切换到“BTC”4小时时间间隔。您会看到,1 小时时间间隔的“HA_C Close”是正确的值,但“test”值显示不正确。

为什么计算后的“测试”值不正确,虽然“关闭”值是正确的???

我发现问题出在“ta.ema(源,长度)”函数上。有人可以给我一个公式,计算与“ta.ema(源,长度)”函数相同的值。

**// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © flashpit

//@version=5
strategy("TEST", process_orders_on_close=true, overlay=true, calc_on_every_tick=true, pyramiding=30) 

varip test = 0.0

HA_Symbol = ticker.heikinashi("BINANCE:BTCUSDT")
HA_C      = request.security(HA_Symbol, "1D", close)


test:= ta.ema(HA_C, 7) * 1.05


plot (HA_C)
plot (test)**
4

2 回答 2

1

我找到了正确的代码。就这个:

c2_1D = request.security(ticker.heikinashi('BINANCE:BTCUSDT'), "1D", t3_D (close, T3Length_1D, T3FactorCalc_1D))
于 2022-01-08T20:20:04.320 回答
0

这是由于您调用 ema 函数的上下文。如果您的图表是 H4 并且您在全局范围内执行测试计算,则它使用 7 x H4 柱形图 HA_C。在 BTCUSDT 上,在过去的 7 个 H4 柱上,应该是 7 个柱,仅由 2 个每日值的倍数组成,因此结果不正确。

在此处输入图像描述

当您将图表更改为 D1 时,它会显示正确的结果,因为现在脚本的全局上下文现在与安全调用在同一时间范围内运行。

如果您想使用 7 x 1D 条从 ema 中获得正确的值,则必须在安全调用的上下文中完成。例如 :

test = request.security(ticker.heikinashi("BINANCE:BTCUSDT"), "D", ta.ema(close, 7))

如果您需要使用同一个代码执行多个操作,您还可以将它们包装在一个函数中,然后将一个函数传递给单个安全调用。例如,这将返回每日收盘价和每日 ema 7 :

f_ema_and_close(_src, _len) =>
    _ema = ta.ema(_src, _len)
    [_src, _ema]
    
[D1_close, D1_ema7] = request.security(ticker.heikinashi("BINANCE:BTCUSDT"), "D", f_ema_and_close(close, 7))

plot(D1_close, color = color.yellow)
plot(D1_ema7, color = color.red)
于 2022-01-08T15:51:13.960 回答