我是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命令以等于下一笔蜡烛的开盘价的价格开立交易,之后满足了进入条件。这是正常行为吗?
答案 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插件提供了导出功能。