1、量化交易简介
量化交易是以数学模型为交易思维,以历史数据为基础,以数学建模、统计学分析、编程设计为工具,利用计算机技术从庞大的历史数据中海选出能带来超额收益的多种大概率获利事件以制定交易策略。
2、量化交易的特点
(1)纪律性。量化投资决策都是依据模型做出的,模型会模拟测试成千上万次来达到高容错率。
(2)系统性。量化交易数据分析有一套非常全面的数据评测系统,会从多方面考量市场,比如:宏观周期、数字货币估值、换手率、盈利质量、市场情绪等。
(3)概率性。通过模型并结合数学方法,测算在什么样的情况下盈利率最高,适当仓位就可以加仓。
(4)利用数学分析并结合计算机技术寻找估值洼地,卖高买低,赚取中间的差价,收得利益的经济。
3、量化交易的优点
(1)投资业绩稳定,回撤低。量化交易从历史数据中不断地挖掘有望在未来重复的历史规律并进行利用;量化交易依靠一组股票来获胜,而不是一个或者几个股票获胜。
(2)能够克服人性的弱点,实现理性投资。在容易失去理性的情况下帮助投资者保持理性;因而在市场反应过度、丧失理性的时候能够及时把握住时机。
(3)信息的处理能力强。量化交易使用计算机技术对海量数据进行处理,对信息的处理能力更强。
量化仿真python代码参考
可以发现通常矩阵乘的weight按照同一列使用一组量化系数较好。
import copy
weight = np.load("tensor1.npy")
def round_near(data):
"""Round data to nearest int
For example, 0.1 to 0, 0.5 to 1
"""
if data >= 0:
data += 0.5
else:
data -= 0.5
return int(data)
def get_u8_quant_coef(np_tensor):
max_val = np.max(np_tensor)
min_val = np.min(np_tensor)
dst_max = 255
dst_min = 0
scale = (max_val-min_val)/(dst_max-dst_min)
zero_point = dst_max - max_val / scale
zero_point_i8 = np.rint(zero_point)
return scale, zero_point_i8
def quant_u8(np_tensor, scale, zero_point):
quanted_tensor = (np_tensor / scale + zero_point)
quanted_tensor_1d = quanted_tensor.reshape([-1])
for i, elem in enumerate(quanted_tensor_1d):
quanted_tensor_1d[i] = np.rint(elem)
quanted_tensor = quanted_tensor_1d.reshape(quanted_tensor.shape)
return quanted_tensor
def dequant(np_tensor, scale, zero_point):
dequant_tensor = np_tensor.astype("float32")
dequant_tensor = (dequant_tensor-zero_point)*scale
return dequant_tensor
def get_error(tensor1, tensor2):
return np.sum(np.abs(tensor1 - tensor2))
def get_dequant(np_tensor):
scale, zero_point = get_u8_quant_coef(np_tensor)
quanted_tensor = quant_u8(np_tensor, scale, zero_point)
dequant_tensor = dequant(quanted_tensor, scale, zero_point)
return dequant_tensor, scale, zero_point
dequant_tensor, scale, zero_point = get_dequant(weight)
error = get_error(weight, dequant_tensor)
weight1 = copy.deepcopy(weight)
weight2 = copy.deepcopy(weight)
col = weight1.shape[1]
row = weight1.shape[0]
for i in range(col):
line_data = weight[:, i]
dequant_tensor_i, scale_i, zero_point_i = get_dequant(line_data)
weight1[:, i] = dequant_tensor_i
for i in range(row):
line_data = weight[i, :]
dequant_tensor_i, scale_i, zero_point_i = get_dequant(line_data)
weight2[i, :] = dequant_tensor_i
error1 = get_error(weight, weight1)
error2 = get_error(weight, weight2)