标签: back-testing

每次在 tqdm 对象(VSCode 终端)上调用更新时,进度条(使用 tqdm)都会在新行中打印

我正在尝试使用 Python 中提供的 tqdm 模块打印优化算法的进度状态,但是,每次我尝试更新它时,它都会在新行中打印进度,有没有办法我只能更新原始的 tqdm bar 在开始时被实例化?我的代码如下,它基于 backtrader 回测库:

\n
def optimizer_callbacks(cb):\n    pbar.update()\n\ndef strategy_optim(**kwargs):\n\n    total = np.prod([len(value) for key,value in kwargs.items()])\n\n    csv_file = FDaxCSVData(---data---)\n    cerebro = bt.Cerebro()\n    cerebro.adddata(csv_file)    \n    cerebro.broker.setcash(500000.0)\n    cerebro.broker.setcommission(commission=2.0)\n\n    strats = cerebro.optstrategy(strategy_name, printlog = False, **kwargs)\n\n    global pbar\n    pbar = tqdm.tqdm(smoothing=0.05, desc='Optimization Runs', total=total)\n    cerebro.optcallback(optimizer_callbacks)\n\n    runnings = cerebro.run(optreturn=False, maxcpus=2)  \n\nif __name__=="__main__":\n    strategy_optim(periods = [100, 200, 300],  abs_margin= [25, 50, 75], trail_stop=[10, 20, 30, 40])\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
Optimization Runs:   0%|                                                    | 0/12 [00:00<?, ?it/s]\nOptimization Runs:   8%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x89                                             | …
Run Code Online (Sandbox Code Playgroud)

python back-testing tqdm backtrader

6
推荐指数
2
解决办法
1万
查看次数

Trail_price、trail_offset 在 pinescript 中到底是如何工作的?

感谢大家迄今为止的帮助。到目前为止,我已经在 pinescript 中编写了许多不同的策略,并且我已经阅读了 pinescript 手册和许多谷歌文章,但我仍然对追踪止损在 pinescript 中如何工作感到困惑。

例如,对于strategy.exit,我有一个trail_price,它标记要激活的追踪止损条目。然而,我所有的回溯测试都表明追踪止损位于该特定蜡烛线的最高点,即使 Trail_offset 尚未被触及。仅仅是因为交易视图回溯测试假设在一根蜡烛线中达到了最大利润,即使后续蜡烛线继续朝着您的目标方向发展?

例如,这是我的strategy.exit 的示例。Strategy.exit("long_TP", "long", Trail_price = 入场价格 + ATR, Trail_offset = ATR, stop= 入场价格 - ATR). 我注意到,只要在该特定交易收盘前获利,我将赚取 2 倍到 3 倍的 Trail_offset(在本例中基于 ATR,即,如果 ATR 为 50 点,我将赚取 100 甚至 150 点)。蜡烛吧。任何后续的蜡烛线,即使做多,即使没有达到 Trail_offset 止损,也不会被纳入计算(即,即使我的 ATR 是 50 点,当蜡烛线收盘时我可能会赚取 70 点,即使随后的蜡烛继续做多)。

我的假设是否不正确(即我的代码),或者这只是回溯测试的限制,因为程序无法知道蜡烛条内部发生了什么,只能知道最高价、最低价、开盘价和收盘价?然而,我确实对此感到好奇,因为有时即使蜡烛线处于最低点,也没有达到 Trail_offset,因此理论上利润应该继续累积,而不是在蜡烛线收盘后止损。

编辑:我添加了一些更多信息以进行澄清 - 这是一个带有一些解释的示例代码:

If condition == true
long = strategy.position_size[0] > strategy.position_size[1]  //go long if there is order entry
entry_price_long = valuewhen(long, open, 0) //entry price is the opening price, …
Run Code Online (Sandbox Code Playgroud)

trading algorithmic-trading forex back-testing pine-script

6
推荐指数
1
解决办法
6149
查看次数

如何将自己的数据输入PyAlgoTrade?

我正在尝试使用PyAlogoTrade事件分析器

但是我不想使用来自yahoo!finance的数据,我想用我自己的但无法弄清楚如何解析CSV,它的格式如下:

Timestamp      Low  Open   Close       High        BTC_vol     USD_vol       [8]      [9]
2013-11-23 00  800  860    847.666666  886.876543  853.833333   6195.334452  5248330  0
2013-11-24 00  745  847.5  815.01      860         831.255     10785.94131   8680720  0
Run Code Online (Sandbox Code Playgroud)

完整CSV在这里

我想做的事情如下:

def main(plot):
    instruments = ["AA", "AES", "AIG"]
    feed = yahoofinance.build_feed(instruments, 2008, 2009, ".")
Run Code Online (Sandbox Code Playgroud)

然后yahoofinance.build_feed(instruments, 2008, 2009, ".")用我的替换CSV

我试过了:

import csv

with open( 'FinexBTCDaily.csv', 'rb' ) as csvfile:
     data = csv.reader( csvfile )

def main( plot ): …
Run Code Online (Sandbox Code Playgroud)

csv algorithmic-trading quantitative-finance pyalgotrade back-testing

5
推荐指数
1
解决办法
2317
查看次数

如何在TradingView Pine脚本中优化参数?

我想在TradingView Pine回测中优化指标参数。其他工具也可以做到这一点,但是当我在TradingView中搜索此功能时,我什么也找不到。有人可以帮忙吗?

如果在TradingView中无法实现,那么有没有办法使用其他工具呢?

提前致谢!

back-testing tradingview-api pine-script

5
推荐指数
1
解决办法
585
查看次数

Pandas 数据框上的追踪止损

我正在 Pandas 数据框上对股票市场上的一些交易策略进行一些回溯测试,我想设置一个距离输入价格 1% 的追踪止损。如果股价上涨了 5%,那么追踪止损也会上涨 5%。如果股价下跌,追踪止损不会改变。( https://www.investopedia.com/terms/t/trailingstop.asp )

我有这张表,它显示了我的入场信号,如果价格低于追踪止损价格,则退出列将显示值 1,这意味着交易已退出。

这是我到目前为止的表:

date           price      entry_signal      
30/06/2018     95              0                
01/07/2018     100             1                
02/07/2018     103             0                
03/07/2018     105             0                
04/07/2018     104.50          0                
05/07/2018     101             0                
Run Code Online (Sandbox Code Playgroud)

我想有一栏显示每个日期的追踪止损是什么。当 enter_signal = 1 时,追踪止损首先设置为 01/07/2018 价格的 99%,此时交易在该日期执行。

当价格上涨 y% 时,追踪止损也会上涨 y%。但是,如果价格下跌,追踪止损将不会从其最后一个值改变。

当价格 <= 追踪止损时,交易退出,exit_signal 为 1...

如果价格也下跌 y%,我目前无法让追踪止损下跌 y%....

期望的表结果:

date           price      trailing stop loss      entry_signal      exit_signal
30/06/2018     95              NULL                     0                0
01/07/2018     100             99                       1                0
02/07/2018     103             101.97                   0                0
03/07/2018     105             103.95                   0 …
Run Code Online (Sandbox Code Playgroud)

python quantitative-finance pandas back-testing

5
推荐指数
2
解决办法
6851
查看次数

如何在Amibroker回测期间获取交易的利润百分比

我正在使用 Amibroker v6.3

我想了解回测期间进行的交易的利润百分比,然后相应地调整卖出标准。当利润低于10%时,我想使用这个函数sell_below10()。当利润>10%时,则使用函数 sell_abv10()。

如何在回测期间检测交易的利润百分比,以便我可以相应地使用正确的卖出功能?

谢谢。

trading algorithmic-trading back-testing amibroker

5
推荐指数
1
解决办法
925
查看次数

backtesting.py 绘图功能不起作用

我正在尝试学习 backtesting.py,当我运行以下示例代码时,它会弹出这些错误,有人可以帮忙吗?我尝试卸载 Bokeh 软件包并重新安装旧版本,但不起作用。

BokehDeprecationWarning: Passing lists of formats for DatetimeTickFormatter scales was deprecated in Bokeh 3.0. Configure a single string format for each scale
C:\Users\paul_\AppData\Local\Programs\Python\Python310\lib\site-packages\bokeh\models\formatters.py:399: UserWarning: DatetimeFormatter scales now only accept a single format. Using the first prodvided: '%d %b'
  warnings.warn(f"DatetimeFormatter scales now only accept a single format. Using the first prodvided: {fmt[0]!r} ")
BokehDeprecationWarning: Passing lists of formats for DatetimeTickFormatter scales was deprecated in Bokeh 3.0. Configure a single string format for each scale
C:\Users\paul_\AppData\Local\Programs\Python\Python310\lib\site-packages\bokeh\models\formatters.py:399: UserWarning: DatetimeFormatter scales …
Run Code Online (Sandbox Code Playgroud)

python-3.x back-testing

5
推荐指数
1
解决办法
6204
查看次数

Quantstrat 持仓数量限制

在过去的几天里,我一直在摸不着头脑,试图了解如何限制策略中的持仓数量。它是一种通道突破策略(做多/突破 20 日突破通道,并设置 10 日高点/低点止损。

\n\n

我不希望系统金字塔式的。仅接受 1 个头寸,即\n- 如果在第一天我有一个信号,并且市场保持趋势,它将打印新信号,但必须将其忽略,因为我们已经处于某个位置。

\n\n

我尝试了我发现的一切,但一无所获。我知道我必须调整 osMaxPos 和 addPosLimit 但似乎我做错了。

\n\n

这是我的代码。提前致谢。

\n\n
#Import des donn\xc3\xa9es\nGBPUSD <- getdata("GBPUSD.csv")\nGBPUSD <- getdata("GBPUSD.csv")\nAUDUSD <- getdata("AUDUSD.csv")\nEURUSD <- getdata("EURUSD.csv")\nXAUUSD <- getdata("XAUUSD.csv")\nEURCHF <- getdata("EURCHF.csv")\n\n### Cr\xc3\xa9ation des devises\ncurrency(c("USD","EUR","AUD","GBP","XAU","CHF"))\nexchange_rate(c("EURUSD","GBPUSD","AUDUSD","XAUUSD","EURCHF"),"USD")\nsymbols <- c("GBPUSD","AUDUSD","EURUSD")\ntradesize <- 1000000\n\n\n\ninit.date <- "2001-09-04"    #date d\'initialisation de l\'environement\nstart.date <- "2001-10-01"       #1ere date du jeu de donn\xc3\xa9e\nend.date <- Sys.Date()       #derni\xc3\xa8re date du jeu de donn\xc3\xa9e\ninitial.capital <- 1000000      #Capital de d\xc3\xa9part\nBreakout <- strategy("Breakout")\n\n\nportfolio.st <- account.st <- strat.st <- "Breakout"\n\nif (!exists(\'.blotter\')) .blotter <- new.env()\nif …
Run Code Online (Sandbox Code Playgroud)

r quantstrat back-testing

3
推荐指数
1
解决办法
950
查看次数

Python Backtrader 错误:FileNotFoundError:[Errno 2] 没有这样的文件或目录:'AAPL'

我正在尝试使用Python 3.8 中的backtrader对使用的模块AAPL从雅虎财经获得的历史股票价格进行回测。backtraderYahooFinanceData

问题:数据似乎是从雅虎财经下载的,但在回测过程中,我们得到一个错误:

FileNotFoundError:[Errno 2]没有这样的文件或目录:'AAPL'

知道我们如何解决这个问题吗?

系统:

  • Mac OS X 10.15.3
  • Python 3.8.0
  • 反向交易者 1.9.74.123

重现错误的 Python 代码

from datetime import datetime
import backtrader as bt

class SmaSignal(bt.Signal):
    param = (('period', 20), )

    def __init__(self):
        self.lines.signal = self.data - bt.ind.SMA(period=self.p.period)

data = bt.feeds.YahooFinanceData(dataname='AAPL',
                                fromdate=datetime(2018, 1, 1),
                                todate=datetime(2018, 12, 31))
cerebro = bt.Cerebro(stdstats=False)
cerebro.adddata(data)
cerebro.broker.setcash(1000.0)
cerebro.add_signal(bt.SIGNAL_LONG, SmaSignal)
cerebro.addobserver(bt.observers.BuySell)
cerebro.addobserver(bt.observers.Value)

print(f'Starting Portfolio Value: {cerebro.broker.getvalue():.2f}')
cerebro.run()
print(f'Final Portfolio Value: {cerebro.broker.getvalue():.2f}')
cerebro.plot(iplot=True, volume=False)
Run Code Online (Sandbox Code Playgroud)

错误堆栈

Traceback …
Run Code Online (Sandbox Code Playgroud)

python python-3.x yahoo-finance back-testing backtrader

2
推荐指数
2
解决办法
7239
查看次数

Python ZIPLINE:_RunAlgoError: 没有提供 ``benchmark_spec``,并且 ``zipline.api.set_benchmark`` 在 ``initialize`` 中没有被调用

这是我的第一个问题,请原谅我的错误我一直在阅读 Andreas Clenow 的 Trading Evolved,这是一本关于使用 Python 进行回测和财务的书 这是我收到的代码和错误

%matplotlib inline

# Import Zipline functions that we need
from zipline import run_algorithm
from zipline.api import order_target_percent, symbol

# Import date and time zone libraries
from datetime import datetime
import pytz
import pandas as pd

# Import visualization
import matplotlib.pyplot as plt


def initialize(context):
    # Which stock to trade
    context.stock = symbol('AAPL')
    
    # Moving average window
    context.index_average_window = 100
    
def handle_data(context, data):
    # Request history for the stock
    equities_hist = data.history(context.stock, …
Run Code Online (Sandbox Code Playgroud)

python finance pandas zipline back-testing

2
推荐指数
1
解决办法
1371
查看次数

是否可以在不使用回测库的情况下回测交易算法?

所以我的问题是,基本 python 库(例如 pandas、numpy、matplotlib)中是否有函数可以在不使用回测库(例如 pyalgotrade、backtesting.py 和 zipline)的情况下进行回测。那么,您是否可以仅使用基本库进行回测,或者如果您已经拥有历史数据,是否必须使用回测库?谢谢

python numpy trading pandas back-testing

1
推荐指数
1
解决办法
141
查看次数