TradeView中的策略测试器:数量和退货问题

时间:2019-03-13 17:16:11

标签: pine-script

我是Pine-Script的新手 目前,我正在使用一些现有的脚本。

我想知道策略测试器是否被窃听。

我已经对问题进行了编辑,极大地简化了脚本,只是根据评论者的建议专注于我的问题。

1)我在数量上有问题。我编写了这个脚本,该脚本接收一个简单的信号(2 MA的交叉点),并尝试翻转大小相同的多头/空头头寸[100,000 USD]

这就是为什么我定义了

strategy("Debug Qty and Returns ", default_qty_type=strategy.cash, default_qty_value=100000,overlay=true, precision=5)

我已经在代码BITMEX上尝试以下脚本:每天XBTUSD间隔

//@version=3
strategy("Debug Qty and Returns ", default_qty_type=strategy.cash, default_qty_value=100000,overlay=true, precision=5)

// Upon execution, why are some short trades with a notional of 200,000 USD equivalent ?

tradeType   = input("BOTH", title="Trade Type ", options=["LONG", "SHORT", "BOTH"])

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014) 

testPeriod() =>
    (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59))


//////////////////////////////

isLongOpen = false
isShortOpen = false

//Order open on previous ticker?
isLongOpen := nz(isLongOpen[1])
isShortOpen := nz(isShortOpen[1])

////////////
//Somes EMAs to trigger trades
ema7Avg = ema(ohlc4, 7)
ema30Avg = ema(ohlc4, 30)

plot(ema7Avg)
plot(ema30Avg)


//Entry Conditions
shortEntry= (tradeType=="SHORT" or tradeType=="BOTH") and crossunder(ema7Avg,ema30Avg )
longEntry = (tradeType=="LONG" or tradeType=="BOTH") and crossover(ema7Avg,ema30Avg )



///////////////////

shortExit = isShortOpen[1] and longEntry
longExit = isLongOpen[1] and shortEntry


if(testPeriod() and (tradeType == "LONG" or tradeType == "BOTH" ))
    strategy.entry("long", strategy.long, when=longEntry)
    strategy.close("long", when = longExit)

if(testPeriod() and (tradeType == "SHORT" or tradeType == "BOTH" ))
    strategy.entry("short", strategy.short, when=shortEntry)
    strategy.close("short", when = shortExit)


//If the value changed to invoke a buy, lets set it before we leave
isLongOpen := longEntry  ? true : (longExit == true ? false : isLongOpen)
isShortOpen := shortEntry ? true : (shortExit == true ? false : isShortOpen)

plotshape(isShortOpen,  title= "Short Open", color=red, style=shape.circle, location=location.bottom)
plotshape(isLongOpen,  title= "Long Open", color=green, style=shape.circle, location=location.bottom)

在选择了图表和时间间隔后,只有3个信号。

它在1月8日以4,005张价格为24.96的价格开24.96张合约(BTC),因此总花费为4,005 * 24.96 = 100,000美元

然后,策略测试器表明,当策略在1月12日翻转时,它确实以亏损(关闭)多头头寸3,631.5并以相同的价格做空,但空头头寸的数量为52.5055合约(BTC ),对应的总价值为(3,631.5 * 52.5055)= 200,000美元

这不是我期望的行为。

2)我注意到strategy.entry命令以等于下一笔蜡烛的开盘价的价格开立交易,之后满足了进入条件。这是正常行为吗?

3 个答案:

答案 0 :(得分:1)

以下都描述了您的问题/问题:https://www.tradingview.com/wiki/Strategies#Broker_emulator broker emulator主题涉及您的第二期,而Order placement commands涉及第一期。

简而言之(对双关语很抱歉),您要以相同的条件下达两个订单,其中一个填充为两个。因此,这是在模拟实际经纪人有时会发生的情况。首先,买入多头头寸,所以您获得100k美元的BTC,然后第二个订单说:“我想在100k中出现BTC的亏损”,因为该策略测试仪以100k的价格出售您的BTC,然后以100k的价格出售还有更多空头仓位。

答案 1 :(得分:0)

感谢Michel_T

如果我将strategy.close更改为strategy.exit

问题消失了

答案 2 :(得分:0)

这是TradingView backtester中的一个巨大且众所周知的错误。每当strategy.close条件与strategy.entry条件一致(因此,一笔交易在下一笔交易同时被关闭)时,一些非常难看的输入就会添加到交易清单中-一条交易输入信号为“关闭输入” (s)订单...“ ???甚至没有意义。

这样的条目包含在回测计算中,因此将其完全销毁。有时他们改善了回测结果,有时使情况变得更糟-但始终都是不正确的。

解决方案:导出整个交易清单,粘贴到Excel中并手动删除那些难看的交易。 ProvitView或AutoView Chrome插件提供了导出功能。