Я новичок в Pine-Script. В настоящее время я играю с некоторыми существующими скриптами.
Мне интересно, если тестер стратегий содержит ошибки.
У меня есть EDITED вопрос, сильно упрощающий сценарий, просто чтобы сосредоточиться на моей проблеме, как это было предложено комментаторами.
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 DAILY
//@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 сигнала.
открываетЛонг 8 января для 24,96 контрактов (BTC) по цене 4 005, которые имеют значение 24,96, так что общая потраченная стоимость составляет 4 005 * 24,96 = 100 000 долларов США по желанию
Затем тестер стратегий показывает, что когдаСтратегия меняется на 12 января, она закрывает (с убытком) длинную позицию по 3 631,5 и идет по той же цене, но ОДНАКО количество короткой позиции составляет 52,5055 контрактов (BTC), что соответствует общему значению (3 631,5 * 52,5055)) = 200 000 USD
Я не ожидаю такого поведения.
2) я заметил, что команда Strategy.entry открывает сделку по цене, равнойОТКРЫТИЯ СЛЕДУЮЩЕЙ СВЕЧИ, после чего выполняется условие входа.Это нормальное поведение?