Backtrader做空現金

  |  

從一開始,反向交易者就可以做空任何東西,包括類似股票和類似期貨的工具。當做空時,現金減少,被賣空資產的價值用於總淨清算價值。

從一側移除並添加到另一側可以保持平衡。

人們似乎更喜歡增加現金,這可能會增加支出。

1.9.7.105版本中,經紀人已將默認行為更改為添加現金和移除價值。這可以通過默認為True的參數shortcash來控制。改變它是這樣的:

cerebro.broker.set_shortcash(False)

或者:

cerebro.broker = bt.brokers.BackBroker(shortcash=False, **other_kwargs)

在行動

下面的示例使用標準移動平均交叉,可用於查看差異。在沒有參數和新行為的情況下運行它:

$ ./shortcash.py --plot

它可以與禁用的行為進行比較:

$ ./shortcash.py --plot --broker shortcash=False

保持不變的事情:

  • 最後結果

  • 交易

  • 淨清算價值演變

    為了看到這一點,添加了一個額外的Observer以確保縮放允許詳細查看演變

有什麼變化:

  • shortcash設置為False cash 永遠不會超過初始水平,因為操作總是要花錢

    但是通過新的默認行為,我們已經可以看到第 1空頭操作(恰好是第 1)向系統添加現金,然後多頭如何從系統中扣除現金(很明顯,空頭是第一次關閉的)

示例使用

$ ./shortcash.py --help
usage: shortcash.py [-h] [--data DATA] [--cerebro CEREBRO] [--broker BROKER]
                    [--sizer SIZER] [--strat STRAT] [--plot [kwargs]]

shortcash testing ...

optional arguments:
  -h, --help            show this help message and exit
  --data DATA           Data to read in (default:
                        ../../datas/2005-2006-day-001.txt)
  --cerebro CEREBRO     kwargs in key=value format (default: )
  --broker BROKER       kwargs in key=value format (default: )
  --sizer SIZER         kwargs in key=value format (default: )
  --strat STRAT         kwargs in key=value format (default: )
  --plot [kwargs], -p [kwargs]
                        Plot the read data applying any kwargs passed For
                        example: --plot style="candle" (to plot candles)
                        (default: None)

示例代碼

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import argparse

import backtrader as bt


class MACrossOver(bt.SignalStrategy):
    params = (('ma', bt.ind.MovAv.SMA), ('p1', 10), ('p2', 30),)

    def __init__(self):
        ma1, ma2 = self.p.ma(period=self.p.p1), self.p.ma(period=self.p.p2)
        self.signal_add(bt.SIGNAL_LONGSHORT, bt.ind.CrossOver(ma1, ma2))


def runstrat(args=None):
    args = parse_args(args)

    cerebro = bt.Cerebro()

    # Data feed
    data0 = bt.feeds.BacktraderCSVData(dataname=args.data)
    cerebro.adddata(data0)

    # Broker
    kwargs = eval('dict(' + args.broker + ')')
    cerebro.broker = bt.brokers.BackBroker(**kwargs)

    # Sizer
    kwargs = eval('dict(' + args.sizer + ')')
    cerebro.addsizer(bt.sizers.FixedSize, **kwargs)

    # Strategy
    kwargs = eval('dict(' + args.strat + ')')
    cerebro.addstrategy(MACrossOver, **kwargs)

    # better net liquidation value view
    cerebro.addobserver(bt.observers.Value)

    # Execute
    cerebro.run(**(eval('dict(' + args.cerebro + ')')))

    if args.plot:  # Plot if requested to
        cerebro.plot(**(eval('dict(' + args.plot + ')')))


def parse_args(pargs=None):

    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        description='shortcash testing ...')

    parser.add_argument('--data', default='../../datas/2005-2006-day-001.txt',
                        required=False, help='Data to read in')

    parser.add_argument('--cerebro', required=False, action='store',
                        default='', help='kwargs in key=value format')

    parser.add_argument('--broker', required=False, action='store',
                        default='', help='kwargs in key=value format')

    parser.add_argument('--sizer', required=False, action='store',
                        default='', help='kwargs in key=value format')

    parser.add_argument('--strat', required=False, action='store',
                        default='', help='kwargs in key=value format')

    parser.add_argument('--plot', '-p', nargs='?', required=False,
                        metavar='kwargs', const='{}',
                        help=('Plot the read data applying any kwargs passed\n'
                              '\n'
                              'For example:\n'
                              '\n'
                              '  --plot style="candle" (to plot candles)\n'))

    return parser.parse_args(pargs)


if __name__ == '__main__':
    runstrat()

推薦閱讀

相關文章

Backtrader策略選擇

休士頓我們有一個問題: cerebro 不應多次運行。這不是第1次 ,而不是認為使用者做錯了,這似乎是一個用例。 這個有趣的用例是通過票證177出現的。在這種情況下, cerebro 被多次用於評估從外部數據源獲取的不同策略。 backtrader 仍然可以支援此用例,但不能以直接嘗試的方式支援。

BacktraderMFI 通用

在最近的Canonical vs Non-Canonical 帖子中 MFI ,開發了(aka MoneyFlowIndicator)。 儘管它是以規範的方式開發的,但它仍然提供了一些改進和成為通用的空間。

Backtrader教程:安裝

要求和版本 backtrader 是獨立的,沒有外部依賴關係(除非要繪圖) 基本要求是: Python 2.7 Python 3.2 / 3.3/ 3.4 / 3.5 pypy/pypy3 如果需要繪圖,則其他要求: Matplotlib >= 1.4.

Backtrader教程:數據饋送 - 重新取樣

如果數據僅在單個時間範圍內可用,並且必須在不同的時間範圍內進行分析,則是時候進行一些重新採樣了。 “重採樣”實際上應該稱為“上採樣”,因為一個人從源時間幀到更大的時間幀(例如:幾天到幾周) backtrader 內置支持通過篩選器對象傳遞原始數據,從而進行重採樣。

Backtrader 教程:交易

交易的定義:當工具中的頭寸從 0 變為大小 X 時,交易打開,對於多頭/空頭頭寸可能為正/負)當頭寸從 X 變為 0 時,交易平倉。以下兩個動作:正轉負負轉正實際上被視為:一筆交易已關閉(倉位從 X 變為 0)新交易已開立(倉位從 0 變為 Y)交易只是提供信息,沒有用戶可調用的方法。

Backtrader教程:觀察者 - 統計

在內部backtrader 運行的策略主要處理 data feeds 和 指標。 Data feeds 被添加到Cerebro 實例中,並最終成為策略輸入的一部分(解析並用作實例的屬性),而指標則由策略本身聲明和管理。

Backtrader版本 1.2.1.88

將次要版本號從 1 更改為 2 需要一段時間,但舊的 DataResampler 和 DataReplayer 的棄用導致了這種情況。 readthedocs 的文件有 文件已更新為僅引用現代方法 resampling 和 replaying。

Backtrader多數據範例

社區中的幾個主題似乎以如何跟蹤訂單為導向,特別是當幾個data feeds在起作用時,還包括當多個訂單一起工作時,

Backtrader熊貓數據饋送

在一些小的增強功能和一些OrderDict調整中,以獲得更好的Python 2.6支援, backtrader 的最新版本增加了對分析Pandas Dataframe或Time Series數據的支援。

Backtrader終極振蕩器

backtrader開發啟動時的目標之一是使開發新的指標變得非常容易(至少對作者本人而言),以在數學和視覺上測試想法。 門票#102 是關於將 UltimateOscillator 添加到 backtrader 注意 它將在下一個版本中添加,同時可以使用下面的代碼使用它。 票證中所示的參考: 以及: 無需在這裡重複。