一、主要流程
其实还是相对简单的。
1、本地保存数据
2、拉取本地数据,使用java调用python算法,并返回结果
3、判断开仓还是平仓。
4、阿里云ecs ,不要买国内的,要不然速度 啥的,都会有问题。
可能觉得为啥要用java调Python,多此一举。主项目几个原因吧
1、本人擅长java,python不够熟练。而bna的java sdk非常友好。
2、talib的java版本,不好用。
3、此应用中,还搭载了其他业务功能,都是java写的。
二、java调用python的实践
@Override
public 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 的插件完成的,还是非常方便的。