我正在尝试使用 Python 中提供的 tqdm 模块打印优化算法的进度状态,但是,每次我尝试更新它时,它都会在新行中打印进度,有没有办法我只能更新原始的 tqdm bar 在开始时被实例化?我的代码如下,它基于 backtrader 回测库:
\ndef 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])\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nOptimization 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) 感谢大家迄今为止的帮助。到目前为止,我已经在 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) 但是我不想使用来自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)
我想做的事情如下:
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
我想在TradingView Pine回测中优化指标参数。其他工具也可以做到这一点,但是当我在TradingView中搜索此功能时,我什么也找不到。有人可以帮忙吗?
如果在TradingView中无法实现,那么有没有办法使用其他工具呢?
提前致谢!
我正在 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) 我正在使用 Amibroker v6.3
我想了解回测期间进行的交易的利润百分比,然后相应地调整卖出标准。当利润低于10%时,我想使用这个函数sell_below10()。当利润>10%时,则使用函数 sell_abv10()。
如何在回测期间检测交易的利润百分比,以便我可以相应地使用正确的卖出功能?
谢谢。
我正在尝试学习 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) 在过去的几天里,我一直在摸不着头脑,试图了解如何限制策略中的持仓数量。它是一种通道突破策略(做多/突破 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) 我正在尝试使用Python 3.8 中的backtrader包对使用的模块AAPL从雅虎财经获得的历史股票价格进行回测。backtraderYahooFinanceData
问题:数据似乎是从雅虎财经下载的,但在回测过程中,我们得到一个错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'AAPL'
知道我们如何解决这个问题吗?
系统:
重现错误的 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) 这是我的第一个问题,请原谅我的错误我一直在阅读 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 库(例如 pandas、numpy、matplotlib)中是否有函数可以在不使用回测库(例如 pyalgotrade、backtesting.py 和 zipline)的情况下进行回测。那么,您是否可以仅使用基本库进行回测,或者如果您已经拥有历史数据,是否必须使用回测库?谢谢
back-testing ×11
python ×5
pandas ×3
trading ×3
backtrader ×2
pine-script ×2
python-3.x ×2
amibroker ×1
csv ×1
finance ×1
forex ×1
numpy ×1
pyalgotrade ×1
quantstrat ×1
r ×1
tqdm ×1
zipline ×1