凱特勒通道(backtrader)

import backtrader as bt
import datetime
import pandas as pd
import matplotlib.pyplot as plt
import backtrader.analyzers as btanalyzers#定義指標
class Ketler(bt.Indicator):params = dict(ema=20,atr= 17)lines = ('expo','atr','upper','lower')plotinfo = dict(subplot =False)plotlines = dict(upper = dict(ls = '--'),lower = dict(_samecolor = True))def __init__(self):self.l.expo = bt.talib.EMA(self.datas[0].close,timeperiod=self.params.ema)self.l.atr = bt.talib.ATR(self.data.hight,self.data.low,self.data.close,timeperiod = self.params.atr)self.l.upper = self.l.expo + self.l.atrself.lower = self.l.expo-self.l.atr
#Backtrader的策略主體
class Strategy(bt.Strategy):def log(self,txt,dt=None):"""Logging function for this strategy"""dt = dt or self.datas[0].datetime.date(0)print('%s,%s'%(dt.isoformat(),txt))def __init__(self):self.ketler = Ketler()self.close = self.data.closedef notify_order(self,order):if order.status in [order.Submitted,order.Accepted]:# Buy/Sell order submmitted/accepted to/by broker - Nothing to doreturn#Check if an order has been completed#Attention: broker could reject order if not enough cashif order.status in [order.Completed]:if order.isbuy():self.log('BUY EXECUTED ,Price:{:.2f},Cost:{:.2f},Comm {:.2f}'.format(order.executed.price,order.executed.value,order.executed.comm))self.buyprice = order.executed.priceself.buycomm = order.executed.commelse:self.log('SELL EXECUTED,Price:{:.2f},Cost:{:.2f},Comm(:.2f)'.format(order.executed.price,order.executed.value,order.executed.comm))self.bar_executed = len(self)elif order.status in [order.Canceled,order.Margin,order.Rejected]:self.log('Order Canceled/Margin/Rejected')self.order = Nonedef notify_trade(self,trade):if not trade.isclosed:returnself.log('OPERATION PROFIT,GROSS %.2f,NET %.2f' %(trade.pnl,trade.pnlcomm))def next(self):if not self.position:if self.close[0] > self.ketler.upper[0]:self.order = self.order_target_percent(target= 0.95)else:if self.close[0]<self.ketler.expo[0]:self.order = self.sell()
#策略主體
if __name__ == '__main__':cerebro = bt.Cerebro()data = bt.feeds.YahooFinanceData(dataname = 'AAPL',fromdate = datetime.datetime(2015,1,1),todate = datetime.datetime(2021,1,17),timeframe = bt.TimeFrame.Days)cerebro.adddata(data)cerebro.addstrategy(Strategy)cerebro.broker.setcash(1000000)cerebro.broker.setcommission(commission=0)cerebro.addsizer(bt.sizers.PercentSizer,percents=98)cerebro.addanalyzer(btanalyzers.SharpeRatio, _name = 'shape')cerebro.addanalyzer(btanalyzers.DrawDown,_name = 'drawdown')cerebro.addanalyzer(btanalyzers.Returns,_name='returns')print('Starte Portfolio Value {}'.format(cerebro.broker.getvalue()))back =cerebro.run()print('end portfolio vlaue {}'.format(cerebro.broker.getvalue()))par_list = [[x.analyzers.returns.get_analysis()['rtot'],x.analyzers.returns.get_analysis()['rnorm100'],x.analyzers.drawdown.get_analysis()['max']['drawdown'],x.analyzers.sharpe.get_analysis()['sharperatio']]for x in back]par_df = pd.DataFrame(par_list,columns = ['Total Return','APR','Drawdown','SharpRatio'])print(par_df)cerebro.plot(style='candle')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449541.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MYSQL安裝報錯 -- 出現Failed to find valid data directory.

運行環境&#xff1a;windows10數據庫版本&#xff1a;mysql.8.0.12安裝方式&#xff1a;rpm包直接安裝 問題描述&#xff1a;mysql初始化的時候找不到對應的數據庫存儲目錄 報錯代碼&#xff1a; 2018-10-13T03:29:24.179826Z 0 [System] [MY-010116] [Server] D:\Program Fil…

Mysql 取用逗號分隔的字串的子串的方法:SUBSTRING_INDEX

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 有一張部門表&#xff1a;appbricks_department &#xff0c;有 id 字段和 rank_tree 字段。 rank_tree&#xff1a;記錄的是當前部門的…

UCloud首爾機房整體熱遷移是這樣煉成的

2019獨角獸企業重金招聘Python工程師標準>>> 2018年下半年&#xff0c;UCloud首爾數據中心因外部原因無法繼續使用&#xff0c;需要在很短時間內將機房全部遷走。為了不影響用戶現網業務&#xff0c;我們放棄了離線遷移方案&#xff0c;選擇了非常有挑戰的機房整體熱…

akshare雙均線backtrader

# -*- coding: utf-8 -*- """ Created on Tue Aug 4 16:52:23 2020author: 四屏 """from datetime import datetime %matplotlib inline import backtrader as bt import matplotlib.pyplot as plt import akshare as akplt.rcParams["fon…

與python相關計算機基礎知識

一、編程與編程的目的1、什么是語言&#xff1f;什么是編程語言&#xff1f; 語言是一種事物與另外一個事物溝通的介質 編程語言是程序員與計算機溝通的介質 2、什么是編程&#xff1f; 程序員把自己想讓計算機做的事用編程語言表達出來 編程的結果就是一系…

HEVC/H265 HM10.0 分析(二)TComDataCU.cpp

以下分析TComDataCU.cpp。這個cpp是很重要的&#xff0c;要分幾次分析完&#xff0c;這是分析TComDataCU.cpp&#xff08;一&#xff09;。 Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH) {UInt col m_uiCUPelX;…

定制化你的ReactNative底部導航欄

前言 ? 接觸過ReactNative(以下簡稱RN)的大概都知道,react-navigation提供了兩種開箱即用的導航欄組件 createBottomTabNavigatorcreateMaterialBottomTabNavigator分別是這樣的 盡管官方提供了導航欄的開箱即用方案,但是實際開發里面,我們會遇到各種各樣的導航欄,各種各樣的動…

backtrader入坑1

煩死我了&#xff0c;不想玩backtrader&#xff0c;因為它只是個回測框架&#xff0c;數據庫&#xff0c;下單界面和國內都不能有效對接&#xff0c;早期就是玩玩&#xff0c;圖個樂子。還有學習它的代碼編寫邏輯&#xff0c;大概玩通了以后&#xff0c;完全不想碰它。感覺現在…

PHP 處理金額

導語 涉及到金額的代碼&#xff0c;一定要謹慎處理。剛好最近做了相關的功能&#xff0c;下面大概說一下。 存儲 PHP 的浮點數是不能精確計算的&#xff0c;具體的可以看這篇文章。所幸的是&#xff0c;金額一般不會有太多的小數。那么存儲的時候呢&#xff0c;一言以蔽之&…

HEVC/H265 HM10.0 分析(三)TAppDecTop.cpp

在TAppDecTop.cpp ,最重要的是decode 函數&#xff0c;下面將對其進行分析&#xff0c;是解碼上層的一個重要函數。 代碼如下&#xff0c;代碼后將進行分析。 Void TAppDecTop::decode() {Int poc;TComList<TComPic*>* pcListPic NULL;ifstream bits…

windows下xmllib2使用簡介 64位

1&#xff1a;環境配置 包含目錄下 包含include libxml2_64\include     包含xmllib庫路徑  libxml2_64 注意 libxml分為32位程序和64位程序&#xff0c;這兩種的環境需要的lib不一樣&#xff0c;需要分別下載 需要使用庫 libxml2.lib 注意&#xff1a…

backtrader2

backtrader的基本策略構成&#xff1a; #構成 #Backtrader 回測代碼編寫流程如下&#xff1a; import backtrader as bt # 導入 Backtrader import backtrader.indicators as btind # 導入策略分析模塊 import backtrader.feeds as btfeeds # 導入數據模塊# 創建策略 class T…

解決瀏覽器 Provisional headers are shown 無法向后臺發送請求問題

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我的情況和下面情況一樣&#xff0c;有一個斷點。 今天調試項目BUG&#xff0c;頁面的一個按鈕點擊后頁面無反應&#xff0c;去后臺找對…

臺灣郵政歷史常設展重新開幕

1月29日&#xff0c;重新開幕的臺灣郵政歷史常設展增加了與觀眾的對話和互動&#xff0c;希望吸引不同年齡層觀眾。中新社記者 孔任遠 攝 1月29日&#xff0c;重新開幕的臺灣郵政歷史常設展增加了與觀眾的對話和互動&#xff0c;希望吸引不同年齡層觀眾。中新社記者 孔任遠 攝 …

如何用vc6編譯ffmpeg, 并單步調試。

如何用vc6編譯ffmpeg, 并單步調試。目前官方ffmpeg的最新版本為0.9, 我們就以此為例&#xff1a; 1. 下載最新git版本的源代碼(http://ffmpeg.zeranoe.com/builds/, 本例下載的是2011-12-12版本) 2. 放到MSYS環境里配置&#xff0c;生成config.h文件。mingw gcc是能順利編譯…

backtrader指標

添加分析指標 # 添加分析指標 # 返回年初至年末的年度收益率 cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name_AnnualReturn) # 計算最大回撤相關指標 cerebro.addanalyzer(bt.analyzers.DrawDown, _name_DrawDown) # 計算年化收益&#xff1a;日度收益 cerebro.addana…

Javascript DOM對屬性的操作

獲得屬性值 itnode . 屬性名稱          //只能操作w3c規定內容 itnode . getAttribute(屬性名稱)    //規定的 和 自定義的都可以獲取 設置屬性值 itnode . 屬性名稱 值        //只能操作w3c規定的屬性 itnode . setAttribute(名稱&#xff0c;值) …

172開頭的IP不一定是局域網的地址

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 A類 10.0.0.0-10.255.255.255 網絡數&#xff1a;1B類 172.16.0.0-172.31.255.255 網絡數&#xff1a;16C類 192.168.0.0-192.168.255.…

微信屏蔽百度紅包活動頁面,誰在焦慮?

1月29日消息&#xff0c;百度與中央電視臺合作的百度紅包鏈接分享頁面被微信屏蔽&#xff0c;打開相關頁面顯示&#xff1a;網頁包含誘導分享、關注等誘導行為內容&#xff0c;被多人投訴&#xff0c;為維護綠色上網環境&#xff0c;已經停止訪問該網頁。 雷鋒網了解到&#x…

Visual C++利用Intel C++ 編譯器提升多核性能與多媒體指令支持獲取更高的程序效率與縮小程序體積

Intel c編譯器有下列優點&#xff0c;建議VC項目開發采用intel c編譯器取代VS自帶c編譯器&#xff1a; 與 Microsoft Visual C 相兼容&#xff0c;可以嵌入 Microsoft Visual Studio 開發環境。 支持最新的多核處理器&#xff0c;并提供安全功能&#xff0c;可以通過執行堆棧…