我在图表上成功添加了策略,但它没有生成订单

如果在您向图表添加策略后,策略测试器的“交易列表”和“概览”标签页显示“无数据”,很可能它没有模拟任何订单,这导致没有数据填充标签页。如果您的脚本没有生成订单,可能是由于以下任一原因造成的:

该脚本未归类为策略或不使用创建订单的命令

使用策略测试器回测仅适用于Pine Script™策略,这些策略使用 `strategy()` 函数作为声明语句。 使用 `indicator()` 或 `library()` 声明的脚本无法与策略测试器模块交互。

声明为策略的脚本必须使用 `strategy.*` 订单放置命令(例如,`strategy.order()` 或 `strategy.entry()`)来模拟订单并在策略测试器中显示数据,不管脚本作者可能在代码中包含的任何其他买卖信号。

该策略没有足够的资金开仓

对于建仓策略,它必须有足够的资金购买指定数量的合约/手数/股票/单位。如果它没有足够的资金来支付成本,它就不会交易。例如,如果策略的初始资金为 1000 美元,订单大小为一份合约,则除非资产价格跌破 1000 美元,否则无法进场,因为它无法承担全部交易。策略将始终尝试购买指定数量的合约/股票/手数/单位,仅此而已。

关于回测期货的重要说明:

期货商品通常具有所谓的合约单位(在 TradingView 上表示为点值,在 Pine 中可通过“syminfo.pointvalue”变量访问)。与其他商品一样,图表上的原始价格代表一单位交易商品的价格。然而,期货合约有一个固定的数量,每个都代表,因此通常不可能购买单个单位。 要计算合约所需的资金,请将图表价格乘以点值。

为了展示点值对操作期货品种的策略的影响,让我们看一下商品 CME_MINI:ES1!,它代表流动性最好且点值为 50 的 ES 期货合约:

在下面的示例中,我们添加到图表中的策略恰好在 4000 美元时建仓并在 4500 美元时退出。以入场价实际花在合约上的金额是4000美元乘以点值50,即200,000美元。当该策略以平仓价格平仓时,收到的金额为 4500 美元 * 50 = 225,000 美元,产生 25,000 美元的利润,我们可以通过查看策略测试器中“交易列表”标签页的“利润”列来确认:

在这种情况下,如果该策略的初始资本值低于 200,000 美元,它就无法下订单,因为它无法承受入场价,该价格是图表上显示的价格的 50 倍。 要模拟仓位,我们必须增加初始资本或降低多头/空头保证金值,以使策略能够负担得起。

该策略返回运行时错误

如果策略在其计算过程中遇到问题,它将引发运行时错误,并在包含该策略的图表窗格的左上角显示一个红色感叹号。运行时错误会阻止脚本继续计算,因此它无法模拟订单。Pine 中不同的运行时错误有不同的原因和潜在的修复方法。单击感叹号将显示脚本的错误消息。

未满足下达策略订单所需的条件

 

策略未显示任何数据的一个可能原因,是在整个测试范围内没有条件触发订单。在这种情况下,图表上不会有任何条目,因为没有要填写的订单 用户可以通过更改策略源代码中的条件来解决此问题。通过在图表上绘制它们来直观地检查策略订单条件的历史通常会很有帮助。

下面的脚本使用 Pine 的 `plotshape()` 函数在多头和空头条件发生时在K线上方绘制蓝色和红色交叉,允许我们在图表上检查它们的历史:

//@version=5
strategy('My Strategy', overlay = true)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))

if longCondition
    strategy.entry('Long', strategy.long)

plotshape(longCondition, color=color.new(color.blue, 0))

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))

if shortCondition
    strategy.entry('Short', strategy.short)

plotshape(shortCondition, color=color.new(color.red, 0))
Java

有关此主题的更多信息,请参阅我们的用户手册中的调试页面

策略的属性不正确

每个策略都有几个参数来管理其开单规则。作者可以从策略的源代码中设置这些参数,用户可以使用策略设置的“属性”标签页中的输入覆盖它们。

注意:策略的源代码中有几个地方,用户可以在其中为其订单设置合约/股票/手数/单位的数量:

  • `strategy()` 函数中的参数允许用户设置默认交易数量和类型,即在“属性”标签页中设置默认值。 用户可以通过调整“订单大小”输入来覆盖这些值。
  • 产生挂单的下单命令,例如“strategy.entry()”,可以按订单设置交易数量。在这种情况下,更改“属性”标签页中的输入不会影响策略的订单大小。

用户必须确保他们正确指定了策略订单的大小。 添加到上面的“该策略没有足够的资金开仓”部分,您应该注意:

  • 如果策略的“订单类型”设置为“合约”(相当于源代码中的 `strategy.fixed` 作为 default_qty_type),对于大多数商品,订单大小必须大于 1。 一些加密货币促进了分数大小。例如,0.1 的订单大小对 BTCUSD 有效,但对 AAPL 或 EURUSD 无效。
  • 订单大小必须为正数; 负数将导致运行时错误,0 值将无效。
  • 总仓位大小(合约数量)不能超过 1e12。如果仓位大小超过这个数字,策略将不会模拟新订单。