Тестер стратегий в TradeView: проблема с Qty и возвратами - PullRequest
0 голосов
/ 13 марта 2019

Я новичок в 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 открывает сделку по цене, равнойОТКРЫТИЯ СЛЕДУЮЩЕЙ СВЕЧИ, после чего выполняется условие входа.Это нормальное поведение?

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Оба ваших вопроса / проблемы описаны здесь: https://www.tradingview.com/wiki/Strategies#Broker_emulator тема broker emulator охватывает ваш второй вопрос, а Order placement commands - первый.

Короче (извините за каламбур),Вы выставляете два ордера с одинаковыми условиями, которые заполняются в одном баре.Так что это подражает ситуации, которая иногда случается с реальным брокером.Сначала длинная позиция заполняется, поэтому вы получаете BTC за 100 тыс. Долларов США, затем второй заказ говорит: «Я бы хотел иметь дефицит BTC в 100 тыс. Долларов США», так как этот тестер стратегий продает ваш BTC за 100 тыс. Долларов США и продает 100 тыс. Долларов США.больше, чтобы сделать «короткую» позицию.

0 голосов
/ 23 марта 2019

Это огромная и известная ошибка в backtester TradingView. Всякий раз, когда условие Strategy.close совпадает с условием Strategy.entry (то есть одна сделка закрывается одновременно с открытием следующей), в Список сделок добавляется какая-то очень уродливая запись - сделка вводится с сигналом «Закрыть запись». (s) заказать ... "??? Это даже не имеет смысла.

Записи, подобные этой, включаются в расчет бэктеста, поэтому полностью его уничтожают. Иногда они улучшают результаты тестирования на истории, иногда они делают их хуже - но все время они не верны.

Решение: экспортируйте весь Список сделок, вставьте в Excel и удалите эти уродливые сделки вручную. Функция экспорта предоставляется дополнениями ProvitView или AutoView Chrome.

0 голосов
/ 14 марта 2019

спасибо Michel_T

Если я поменяю strategy.close на strategy.exit

, проблема исчезнет

...