else:
self.exchange, self.symbol, utils.anchor_timeframe(self.timeframe)
def go_short(self):
return -1
stop = entry + 3 * self.atr
Uncaught Exception: RouteNotFound: Bellow route is required but missing in your routes:
def should_short(self) -> bool:
self.stop_loss = qty, stop
错误很明明。假如我在其他时间范畴内利用candle,也应该将其添加到我的route.py文件中。我的生意业务蹊径必需保持稳定,因为我只生意业务一个仓位,所以我利用的任何其他时间框架都被视为特另外candle。
]
在计策中界说多个时间框架
if self.price > ema:
def go_long(self):
你们中的有些人大概对此很熟悉,而且想知道前瞻性毛病是否对我们方才调查到的功效晋升有辅佐。请安心,事实并非如此。Jesse框架照顾了t背后的前瞻性毛病。
return self.short_ema < self.long_ema and self.anchor_trend == -1
entry = self.price
# trading routes
return ta.atr(self.candles)
from jesse.strategies import Strategy
self.sell = qty, entry
Jesse提供了一个实用东西助手来计较这个值,我将利用这个值。
3. 夏普比率从0.62增加到0.86。
return 1
这次回测顺利举办。功效如下:class SampleTrendFollowing(Strategy):
您大概会问我如何知道锚按时间范畴是哪个时间范畴?常用公式是生意业务时间的4倍或6倍。譬喻在我的环境下,4h的锚按时间框架为:
修改路由
这是我最终获得的完整计策:
这是我的routes.py此刻的样子:
self.buy = qty, entry
return self.short_ema < self.long_ema
# I wrote
def should_long(self) -> bool:
‘Bitfinex’, ‘BTCUSD’, utils.anchor_timeframe(‘4h’)
2. 总成交生意业务淘汰,这意味着我获得的进入信号更少,这是预期的,因为我添加了另一个进入条件到我的进入法则。
self.exchange, self.symbol, utils.anchor_timeframe(self.timeframe)
此刻我将输入法则更新为包罗anchor_trend:
ema = ta.ema(anchor_candles, 100)
def should_cancel(self) -> bool:
1. 净利润从31.44%增加到48.42%,这意味着,更多的钱!
self.stop_loss = qty, stop
这一次,我将利用多个时间框架,看看我是否可以改进功效。有履历的生意业务者在他们的手工生意业务中利用的一个能力是调查更大时间范畴的趋势(可能他们称之为锚按时间范畴)。这个简朴的能力凡是会增加你的得胜率,以淘汰买入信号的数量。
def atr(self):
(‘Bitfinex’, ‘BTCUSD’, ‘1D’)
这个想法可以扩展。譬喻假如您正在生意业务以太币,则大概要利用的锚定趋势,因为很明明,比特币是市场的王者,而且对其他代币的价值发生庞大影响。 return self.short_ema > self.long_ema and self.anchor_trend == 1
profit_target = entry – 5 * self.atr
这是自2019年1月1日至2020年5月1日以4h时间范畴回测的功效:
qty = utils.risk_to_qty(self.capital, 3, entry, stop)routes = [
# instead of
self.take_profit = qty, profit_target
结论
from jesse import utils
4. 胜率从47%增加到50%。
当你在计策中利用多个时间段时,你不会获得同样的晋升。但在我看来,至少实验一下是有意义的。
stop = entry – 3*self.atr
# use self.get_candles() to get the candles for the anchor timeframe
当在算法计策中利用多个时间段时,,前瞻性毛病是一个严重的问题。简而言之,这意味着利用将来的数据。
return self.short_ema > self.long_ema
如您所见,这次我利用self.get_candles而不是self.candles。我还利用了其他一些内置属性,而不是利用硬编码的字符串:
]
profit_target = entry + 5*self.atr
(‘Bitfinex’, ‘BTCUSD’, ‘6h’, ‘SampleTrendFollowing’),
)
此刻我再次执行回测,以查察此变动将如何影响回测功效,但呈现此错误:
entry = self.price
错误汇报我,我的蹊径中缺少(’Bitfinex’,’BTCUSD’,’1D’);因此将其添加到extra_candles列表中。这就是我的route.py应该酿成的样子:
qty = utils.risk_to_qty(self.capital, 3, entry, stop)
routes = [
@property