量化交易
一、主要流程
其实还是相对简单的。
1、本地保存数据
2、拉取本地数据,使用java调用python算法,并返回结果
3、判断开仓还是平仓。
4、阿里云ecs ,不要买国内的,要不然速度 啥的,都会有问题。
可能觉得为啥要用java调Python,多此一举。主项目几个原因吧
1、本人擅长java,python不够熟练。而bna的java sdk非常友好。
2、talib的java版本,不好用。
3、此应用中,还搭载了其他业务功能,都是java写的。
二、java调用python的实践
@Overridepublic String calcMinDis(String startPoint, String endPoint, String points, String edgs) {Process proc;try {String exe = "python3";//解释器String command = pythonFile();if(command == null){return null ;}//传入参数,为字符串类型String[] cmdArr = new String[]{exe, command, startPoint, endPoint, points, edgs};proc = Runtime.getRuntime().exec(cmdArr);BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));String result = null;String line = null;while ((line = in.readLine()) != null) {System.out.println(line);result = line;}in.close();in = null;proc.waitFor();proc.destroy();return result;} catch (Exception e) {log.error("calcMinDis_error,startPoint={},endPoint={},points={},degs={}", startPoint, endPoint, points,edgs);}return null;}
import numpy as np
import random
from random import shuffle
from sys import argv
#dis_cube=np.array(
#[[0,1,2,3],
# [1,0,4,5],
# [2,4,0,3],
# [3,5,3,0]
#]
#)
#names = ['a','b','c','d']
#epoc = 100
# start = 'a', end = 'd', names = 'a,b,c,d'],dis_cube = ,0,1,2,3,1,0,4,5,2,4,0,3,3,5,3,0
def montcalo():start = argv[1].strip()end = argv[2].strip()names = [w.strip() for w in argv[3].strip().split(',')]dis_cube = [float(w.strip()) for w in argv[4].strip().split(',')]。。。。。。。。。。。。return [start]+res+[end]result = montcalo()
print(result)
附:
画图的工具是vscode+puml 的插件完成的,还是非常方便的。
更多推荐
量化交易
发布评论