1. 背景
上班族平时没有时间盯盘,股票突然冲高、跳水来不及操作,机会转瞬即逝。
2. 思路
通过软件实时获取股票价格信息,计算相关指标,满足涨跌幅度条件时,给微信发送信息,提示看看股票是否需要进行买卖。
3. 技术实现
3.1.1 通过java定时任务,拉取股票价格信息,判断涨跌幅度。
3.1.2 以百分之一为单位,每涨、跌一个百分点以上即发送微信通知。
3.1.3 相同的涨跌幅,每日只发送一次通知。
3.1.4 通知内容伪装成QQ黄钻订单信息。
核心代码如下:
(不求美观,只求一眼明了)
3.2.1. main 方法
package com.iv6.info4m;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.iv6.tips.KdjSearchTask;
import com.iv6.tips.MaxUpdownTask2;
import com.iv6.util.ClearKeyTask;
public class FirstM {
private static ScheduledExecutorService scheduExec = Executors.newScheduledThreadPool(2);
public static void main(String[] args) {
ScheduleTask st = new ScheduleTask();
st.addTask(new MyTask());
st.addTask(new ClearKeyTask());
//每分钟执行一次
scheduExec.scheduleAtFixedRate(st, 50, 60 * 1000, TimeUnit.MILLISECONDS);
}
}
3.2.2. 定时调度任务
package com.iv6.info4m;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ScheduleTask implements Runnable {
private List<Runnable> realTaskList= new ArrayList<Runnable>();
public static Map<String,String> flagMap = new HashMap<String,String>();
public void addTask(Runnable t) {
realTaskList.add(t);
}
private ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(5));
@Override
public void run() {
for(Runnable r : realTaskList) {
executor.execute(r);
}
}
}
3.2.3. 实时获取股票信息任务
package com.iv6.info4m;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
class MyTask implements Runnable {
@Override
public void run() {
// 当前日期、星期
String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
// 交易日
LocalDate currentDate = LocalDate.now();
int k = currentDate.getDayOfWeek().getValue();
// 周1 - 5
if (k > 5) {
return;
}
// 交易时间
String res = HttpUtils.getRes