48 lines
1.1 KiB
Cython
48 lines
1.1 KiB
Cython
|
#encoding:utf-8
|
||
|
|
||
|
from __future__ import division
|
||
|
|
||
|
# 基础的cython加速
|
||
|
def ma_cython(data, ma_length):
|
||
|
ma = []
|
||
|
data_window = data[:ma_length]
|
||
|
test_data = data[ma_length:]
|
||
|
|
||
|
for new_tick in test_data:
|
||
|
data_window.pop(0)
|
||
|
data_window.append(new_tick)
|
||
|
|
||
|
sum_tick = 0
|
||
|
for tick in data_window:
|
||
|
sum_tick += tick
|
||
|
ma.append(sum_tick/ma_length)
|
||
|
|
||
|
return ma
|
||
|
|
||
|
|
||
|
# cython和高速算法
|
||
|
def ma_cython_online(data, ma_length):
|
||
|
# 静态声明变量
|
||
|
cdef int sum_buffer, sum_tick, old_tick, new_tick
|
||
|
|
||
|
ma = []
|
||
|
data_window = data[:ma_length]
|
||
|
test_data = data[ma_length:]
|
||
|
sum_buffer = 0
|
||
|
|
||
|
for new_tick in test_data:
|
||
|
old_tick = data_window.pop(0)
|
||
|
data_window.append(new_tick)
|
||
|
|
||
|
if not sum_buffer:
|
||
|
sum_tick = 0
|
||
|
for tick in data_window:
|
||
|
sum_tick += tick
|
||
|
ma.append(sum_tick/ma_length)
|
||
|
|
||
|
sum_buffer = sum_tick
|
||
|
else:
|
||
|
sum_buffer = sum_buffer - old_tick + new_tick
|
||
|
ma.append(sum_buffer/ma_length)
|
||
|
|
||
|
return ma
|