生活随笔
收集整理的這篇文章主要介紹了
文化财经SAR指标计算(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
文化財經SAR指標計算(一)主要介紹了SAR指標一次性計算的計算方式,但實際使用過程中,數據是一個個壓入的形式,所以對算法需要修改。本文主要基于VNPY中實現SAR做demo。VNPY中指標的計算都放在ArrayManager類里面,故對該類重寫。
代碼實現
定義一個類,用于存儲SAR需要用到的數據
class SarData:def __init__(self
, size
=100):self
.af
= np
.zeros
(size
)self
.ep
= np
.zeros
(size
)self
.sar
=np
.zeros
(size
)self
.low_pre
= 999999999 self
.high_pre
= 0 self
.N
=4self
.af0
=0.02self
.mvalue
=0.2self
.up
=Falseself
.init_up_down
=[False,False]self
.init_up_down_ep
=[0,0]def move_data(self
):self
.sar
[:-1] = self
.sar
[1:]self
.af
[:-1] = self
.af
[1:]
接著就是對ArrayManager的重寫:
主要注意一下幾點:
update_bar 函數中,計算SAR,每更新一個bar就計算sar增加一個函數calculate_sar計算SAR提供一個方法獲取計算好的SAR
class ArrayManager(object):"""For:1. time series container of bar data2. calculating technical indicator value"""def __init__(self
, size
=100):"""Constructor"""self
.count
= 0self
.size
= sizeself
.inited
= Falseself
.open_array
= np
.zeros
(size
)self
.high_array
= np
.zeros
(size
)self
.low_array
= np
.zeros
(size
)self
.close_array
= np
.zeros
(size
)self
.volume_array
= np
.zeros
(size
)self
.sar_value
= SarData
(size
)def calculate_sar(self
): if self
.count
==self
.sar_value
.N
+1:if self
.close
[-1]> self
.close
[0]:self
.sar_value
.up
=Trueif self
.sar_value
.up
==True: self
.sar_value
.ep
[-1] = min(self
.low
[-1*self
.sar_value
.N
-1:-1])self
.sar_value
.sar
[-1] = self
.sar_value
.ep
[-1]self
.sar_value
.init_up_down_ep
[0] = max(self
.high
[-1 * self
.sar_value
.N
-1 :-1])else: self
.sar_value
.ep
[-1] = max(self
.high
[-1 * self
.sar_value
.N
-1 :-1])self
.sar_value
.sar
[-1] = self
.sar_value
.ep
[-1]*-1self
.sar_value
.init_up_down_ep
[1]=min(self
.low
[-1 * self
.sar_value
.N
-1 :-1])elif self
.count
>self
.sar_value
.N
+1:self
.sar_value
.af
[-1] = self
.sar_value
.af
[-2] + self
. sar_value
.af0
if self
.sar_value
.af
[-1]> self
.sar_value
.mvalue
:self
.sar_value
.af
[-1] > self
.sar_value
.mvalue
if self
.sar_value
.up
:self
.sar_value
.sar
[-1] = abs(self
.sar_value
.sar
[-2]) + self
.sar_value
.af
[-1] * (self
.high
[-2] - abs(self
.sar_value
.sar
[-2]))print("轉勢頭",abs(self
.sar_value
.sar
[-2]),self
.sar_value
.af
[-1],self
.high
[-2] ,self
.sar_value
.sar
[-1] )self
.sar_value
.high_pre
= max(self
.sar_value
.high_pre
, self
.high
[-1])if self
.low
[-1] < abs(self
.sar_value
.sar
[-1]):self
.sar_value
.up
= Falseself
.sar_value
.af
[-1] = 0self
.sar_value
.low_pre
= self
.low
[-1]if self
.sar_value
.init_up_down_ep
[1] == 0:self
.sar_value
.sar
[-1] = max(self
.sar_value
.high_pre
,self
.sar_value
.init_up_down_ep
[0])else:self
.sar_value
.sar
[-1] = self
.sar_value
.high_pre
* -1else:self
.sar_value
.sar
[-1] = (abs(self
.sar_value
.sar
[-2]) +self
. sar_value
.af
[-1] * (self
.low
[-2] - abs(self
.sar_value
.sar
[-1])))self
.sar_value
.sar
[-1] = -1 * self
.sar_value
.sar
[-1]self
.sar_value
.low_pre
= min(self
.sar_value
.low_pre
, self
.low
[-1])print("self.sar_value.low_pre",self
.sar_value
.low_pre
)if self
.high
[-1] > abs(self
.sar_value
.sar
[-1]):self
.sar_value
.up
= Trueself
.sar_value
. high_pre
= self
.high
[-1]self
. sar_value
.af
[-1] = 0if self
.sar_value
.init_up_down_ep
[0] == 0: self
.sar_value
.sar
[-1] = min(self
.sar_value
.low_pre
,self
.sar_value
.init_up_down_ep
[1])self
.sar_value
.init_up_down_ep
[0]=self
.sar_value
. high_pre
else:self
.sar_value
.sar
[-1] = self
.sar_value
.low_pre
def update_bar(self
, bar
):"""Update new bar data into array manager."""self
.count
+= 1if not self
.inited
and self
.count
>= self
.size
:self
.inited
= Trueself
.open_array
[:-1] = self
.open_array
[1:]self
.high_array
[:-1] = self
.high_array
[1:]self
.low_array
[:-1] = self
.low_array
[1:]self
.close_array
[:-1] = self
.close_array
[1:]self
.volume_array
[:-1] = self
.volume_array
[1:]self
.open_array
[-1] = bar
.open_priceself
.high_array
[-1] = bar
.high_priceself
.low_array
[-1] = bar
.low_priceself
.close_array
[-1] = bar
.close_priceself
.volume_array
[-1] = bar
.volume self
.sar_value
.move_data
()self
.calculate_sar
()print(self
.sar_value
.sar
)def SAR(self
):"""類似文化財經的SAR計算"""return self
.sar_value
.sar
特別地,對此我選取了J2001.XDCE", start_date=‘2019-1-11’, end_date=‘2019-12-22’ 日線數據進行了驗證,截幾張圖
![1月11號附近幾天值(https://img-blog.csdnimg.cn/20191225111615624.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNjkwMw==,size_16,color_FFFFFF,t_70)
注:本工作室提供量化策略代寫以及交易、量化系統定制化開發服務:聚寬 米筐 優礦 文化財經 vnpy 發明者等 各大平臺
本工作室提供以下服務:
1、量化策略代寫以及優化以及研報建模
2、數據分析:主成分分析、頻域分析(濾波、小波變換等)
3、量化系統定制開發
4、輔助搭建自己的量化平臺
5、算法交易
價格根據服務雙方協商。請聯系微信quantcbll
總結
以上是生活随笔為你收集整理的文化财经SAR指标计算(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。