1. 數學知識篇11:洛必達法則
微信:kaoyan 公眾號:擺渡考研工作室
洛必達法則定理:當函數在某點的兩邊趨向於零,且導數在該點附近存在,若極限存在或為無窮大,則原函數在該點的極限等於導數的比值。
洛必達法則證明:通過假定極限與函數值無關,利用條件得知函數在該點鄰域連續。應用柯西中值定理,得出極限值等於導數之比。
洛必達法則分類:根據不同情況,應用法則解題,涉及無窮大、未定式等。
列1-3知識點概覽:涵蓋了數學概念、技巧和技巧篇,包括映射、極限、函數特性、數列收斂等知識點。
定義域求解、數列極限技巧、中值不等式、洛必達法則等技巧篇內容涉及具體解題方法。
函數求解、區間不等式、高階導數求解等技巧篇內容涵蓋函數解析和性質。
夾逼定理、中值等式命題、數值不等式等技巧篇內容側重於定理應用和證明。
湊微分求積分、定積分簡化、變限積分極限等技巧篇內容強調積分方法。
點線面距離、二次積分轉換、常數項級數等技巧篇內容涉及幾何和級數問題。
2. Backtrader來啦:可視化篇(重構)
量化投資與機器學習公眾號為全網讀者帶來的Backtrader系列,深受歡迎,我們致力於提供免費、最清晰的Bt教程。QIML官方Github已上線,相關數據、代碼一並同步,歡迎大家關注和星標。公眾號希望為國內量化投資圈貢獻一份力量,影響更多人了解和學習量化投資,找到適合自己的道路。如需分享內容,歡迎在評論區留言。
今天的《可視化篇》將介紹Backtrader觀測器模塊observers與自帶的繪圖函數plot()。我們將通過修改圖形樣式,基於回測返回的收益序列TimeReturn,結合pyfolio和matplotlib工具,自定義可視化圖形。獲取完整代碼+數據,見文末鏈接。
observers模塊用於統計回測信息,並在plot()的幫助下實現可視化展示。最常用的觀測器包括:
- Broker觀測器:記錄經紀商中各時間點的可用資金和總資產。可視化時,會同時展示cash和values曲線,若需單獨展示,可分別使用Cash和Value觀測器。
- BuySell觀測器:記錄回測過程中的買入和賣出信號。可視化時,會在價格曲線上標注買賣點。
- Trades觀測器:記錄回測過程中每次交易的盈虧。可視化時,會繪制盈虧點。
- TimeReturn觀測器:記錄回測過程中的收益序列。可視化時,會繪制收益曲線。
- DrawDown觀測器:記錄回測過程的回撤序列。可視化時,繪制回撤曲線。
- Benchmark觀測器:記錄業績基準的收益序列,必須事先通過數據添加函數添加至大腦cerebro中。可視化時,同時繪制策略本身的收益序列和業績基準的收益曲線。
如何添加觀測器?observers通過addobserver()添加給大腦cerebro,參數obscls對應觀測器類,args和kwargs對應觀測器支持的設置參數。
如何讀取觀測器數據?觀測器屬於lines對象,可以通過self.stats對象在Strategy中讀取數據。觀測器的數據在所有指標計算完後、執行Strategy的next方法後運行並統計數據,因此讀取的最新數據[0]相對與next的當前時刻晚一天。
如何自定義觀測器?自定義觀測器遵循繼承bt.observer.Observer類,指定要統計的數據為相應的line,隨著回測進行依次存入數據。作為Lines對象的Observers和Indicator類,內部都有plotinfo和plotlines屬性,用於回測結束後通過cerebro.plot()方法進行可視化展示。
plot()圖形繪制支持回測的三大內容:Data Feeds、Indicators和Observers。Data Feeds在回測開始前導入大腦,Indicators有的與Data Feeds一起繪制在主圖上,有的以子圖形式繪制,Observers通常繪制在子圖上。
plot()中的參數用於系統性配置圖形,如修改圖形樣式、主題顏色等。若需系統性修改圖形樣式,可以重新定義PlotScheme類,或直接在plot()中修改參數。關於主題顏色,Backtrader提供多種主題色,可通過復制源碼中定義的顏色並結合tab10_index進行修改。
局部繪圖參數設置通過類內部的plotinfo和plotlines屬性控制,plotinfo主要對圖形整體布局進行設置,plotlines主要對具體line的樣式進行設置。
基於收益序列進行可視化,Backtrader自帶的繪圖工具方便實用。此外,結合pyfolio和matplotlib,根據回測返回的分析器TimeReturn、pyfolio、matplotlib可以得到可視化圖形。不同主題下繪制效果也有所不同。
關於回測結果的可視化,需求不同對應不同的可視化內容。Backtrader回測框架提供了友好的繪圖介面,對於額外數據,可結合Backtrader分析器Analyzers返回的指標,選用Python繪圖工具如Matplotlib、Seaborn、Plotly等進行可視化展示。
量化投資與機器學習微信公眾號專注於量化投資、對沖基金、Fintech、人工智慧、大數據等領域,是業內主流自媒體,擁有來自公募、私募、券商、期貨、銀行、保險、高校等行業30W+關注者,曾榮獲AMMA優秀品牌力、優秀洞察力大獎,連續4年被騰訊雲+社區評選為「年度最佳作者」。公眾號致力於提供專業、全面的內容,幫助讀者深入學習量化投資知識和技能。
3. 學習C語言需要掌握哪些基本知識
1.入門程序
#include <stdio.h>
int main()
{
printf("Hello World!");
return 0;
}
2.數據類型
數據類型:
1.基本數據類型:
1.1. 整型:int 4個位元組
1.2. 字元型:char 1個位元組
1.3. 實型(浮點型)
1.3.1.單精度型:float 4個位元組
1.3.2.雙精度型:double 8個位元組
%d:十進制整數;
%c:單個字元;
%s:字元串;
%f:6位小數;
- #include <stdio.h>
- int main()
- {
- int age = 18;
- float height = 1.85;
- char unit = 'm';
- printf("小明今年%d歲 ", age);
- printf("小明身高%f%c ", height, unit);
- printf("小明現在在慕課網上學習IT技術 ");
- return 0;
- }
- #include <stdio.h>
- #define POCKETMONEY 10 //定義常量及常量值
- int main()
- {
- printf("小明今天又得到%d元零花錢 ", POCKETMONEY);
- return 0;
- }
表達式1 ? 表達式2 : 表達式3;
- #include <stdio.h>
- int main()
- {
- //定義三位數num,個位數sd,十位數td,百位數hd
- int num, sd, td, hd;
- //循環所有三位數
- for( num=100 ; num<1000 ; num++ )
- {
- //獲取三位數字num百位上的數字
- hd = num/100 ;
- //獲取三位數字num十位上的數字
- td = num/10%10 ;
- //獲取三位數字num個位上的數字
- sd = num%10 ;
- //水仙花數的條件是什麼?
- if(num ==hd*hd*hd+td*td*td+sd*sd*sd )
- {
- printf("水仙花數字:%d ", num);
- }
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int i, j, k;
- for(i=1; i<5; i++)
- {
- /* 觀察每行的空格數量,補全循環條件 */
- for( j=i ; j<5 ; j++ )
- {
- printf(" "); //輸出空格
- }
- /* 觀察每行*號的數量,補全循環條件 */
- for( k=0 ; k<2*i-1 ; k++ )
- {
- printf("*"); //每行輸出的*號
- }
- printf(" "); //每次循環換行
- }
- return 0;
- }
- #include <stdio.h>
- int main()
- {
- int sum = 0;
- int i;
- for(i=1; i<=10; i++)
- {
- printf("%d ", i);
- if(i==3){
- goto LOOP;//滿足條件就執行goto語句
- }
- }
- //執行goto
- LOOP:printf("結束for循環了...."); //請選擇合適位置添加標識符
- return 0;
- }
形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。函數調用結束返回主調函數後則不能再使用該形參變數。
實參可以是常量、變數、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參。因此應預先用賦值等辦法使實參獲得確定值。
在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生類型不匹配」的錯誤。
- #include <stdio.h>
- int getPeachNumber(int n) //這里要定義n,要不編譯器會報錯!
- {
- int num;
- if(n==10)
- {
- return 1;
- }
- else
- {
- num = (getPeachNumber(n+1)+1)*2;
- printf("第%d天所剩桃子%d個 ", n, num);
- }
- return num;
- }
- int main()
- {
- int num = getPeachNumber(1);
- printf("猴子第一天摘了:%d個桃子。 ", num);
- return 0;
- }
用關鍵字auto定義的變數為自動變數,auto可以省略,auto不寫則隱含定為「自動存儲類別」,屬於動態存儲方式。
用static修飾的為靜態變數,如果定義在函數內部的,稱之為靜態局部變數;如果定義在函數外部,稱之為靜態外部變數。
為了提高效率,C語言允許將局部變數的值放在CPU中的寄存器中,這種變數叫「寄存器變數」,用關鍵字register作聲明。
用extern聲明的的變數是外部變數,外部變數的意義是某函數可以調用在該函數之後定義的變數。
- #includ <stdio.h>
- //來源公眾號:C語言與CPP編程
- int main()
- {
- //定義外部局部變數
- extern int x;
- return 0;
- }
- int x=100;
數據類型 數組名稱[長度n] = {元素1,元素2,元素3,......};
數據類型 數組名稱[] = {元素1,元素2,元素3,......};
數類類型 數組名稱[長度n]; 數組名稱[0] = 元素1;數組名稱[1] = 元素2;...... 注意: 1、數組的下標均以0開始; 2、數組在初始化的時候,數組內元素的個數不能大於聲明的數組長度; 3、如果採用第一種初始化方式,元素個數小於數組的長度時,多餘的數組元素初始化為0; 4、在聲明數組後沒有進行初始化的時候,靜態(static)和外部(extern)類型的數組元素初始化元素為0,自動(auto)類型的數組的元素初始化值不確定。
- #include <stdio.h>
- int main()
- {
- int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- int i;
- for(i=0;i<10;i++)
- {
- printf("%d ",arr[i]);
- }
- return 0;
- }
數組的冒泡排序
字元串與數組
char 字元串名稱[長度] = "字元串內容";
char 字元串名稱[長度] = {'字元串1','字元串2',....,'字元串n','
2.構造類型:
2.1.枚舉類型
2.2.數組類型
2.3.結構體類型
2.4.共用體類型
3.指針類型:
4.空類型:
3.格式化輸出語句
學好C++才是入職大廠的敲門磚! 當年要是有這課,我的C++也不至於這樣
已失效
4.常量
值不發生改變的量成為常量;
定義字元常量(注意後面沒有;)
5.運算符
5.1.算數運算符:+,-,*,/,%,++,--;前++/--,先運算,再取值.後++/--,先取值,再運算;
5.2.賦值運算符:
5.3.關系運算符;
5.4.邏輯運算符;
5.5.三目運算符:
6.水仙花數計算
輸出所有三位數的水仙花數字
所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數,如:153就是一個水仙花數,153=111+555+333。
7.列印正三角形的*
8.臭名遠揚的goto語句
很少使用
9.形參與實參
形參:形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數;
實參:實參是在調用時傳遞該函數的參數。
函數的形參和實參具有以下特點:
10.函數返回值注意
注意:void函數中可以有執行代碼塊,但是不能有返回值,另void函數中如果有return語句,該語句只能起到結束函數運行的功能。其格式為:return;
11.遞歸
12.變數存儲類別 !
12.1.生存周期劃分存儲方式
C語言根據變數的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。
靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變數,如全局變數。
動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變數是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變數;函數調用時的現場保護和返回地址等。
12.2.存儲類型劃分
C語言中存儲類別又分為四類:自動(auto)、靜態(static)、寄存器的(register)和外部的(extern) ;
注意:靜態局部變數屬於靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變數在編譯時賦初值,即只賦初值一次;如果在定義局部變數時不賦初值的話,則對靜態局部變數來說,編譯時自動賦初值0(對數值型變數)或空字元(對字元變數)
注意:只有局部自動變數和形式參數可以作為寄存器變數;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變數;局部靜態變數不能定義為寄存器變數。
13.內部函數外部函數 !
在C語言中不能被其他源文件調用的函數稱為內部函數 ,內部函數由static關鍵字來定義,因此又被稱為靜態函數,形式為:
static [數據類型] 函數名([參數])
這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
在C語言中能被其他源文件調用的函數稱為外部函數 ,外部函數由extern關鍵字來定義,形式為:
extern [數據類型] 函數名([參數])
C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。 extern可以省略; 14.數組 數組:一塊連續的,大小固定並且裡面的數據類型一致的內存空間, 數組的聲明:數據類型 數組名稱[長度n]
15.數組遍歷
冒泡排序的思想:相鄰元素兩兩比較,將較大的數字放在後面,直到將所有數字全部排序。
在C語言中,是沒有辦法直接定義子字元串數據類型的,需使用數組來定義所要的字元串,形式如下: