Advertisement
Guest User

Untitled

a guest
Feb 15th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.14 KB | None | 0 0
  1. package database;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DatabaseMetaData;
  5. import java.sql.DriverManager;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.ArrayList;
  10. import java.util.Arrays;
  11. import java.util.HashMap;
  12. import java.util.LinkedList;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.Map.Entry;
  16.  
  17. import javax.swing.text.html.HTMLDocument.HTMLReader.ParagraphAction;
  18.  
  19. import org.eclipse.jetty.util.log.Slf4jLog;
  20. import org.eclipse.jetty.websocket.api.Session;
  21. import org.omg.Messaging.SyncScopeHelper;
  22.  
  23. import java.util.Properties;
  24. import java.util.Set;
  25.  
  26. import com.google.gson.JsonArray;
  27. import com.google.gson.JsonElement;
  28. import com.google.gson.JsonObject;
  29. import com.webcerebrium.binance.api.BinanceApi;
  30. import com.webcerebrium.binance.api.BinanceApiException;
  31. import com.webcerebrium.binance.api.BinanceRequest;
  32. import com.webcerebrium.binance.datatype.BinanceCandlestick;
  33. import com.webcerebrium.binance.datatype.BinanceEventKline;
  34. import com.webcerebrium.binance.datatype.BinanceInterval;
  35. import com.webcerebrium.binance.datatype.BinanceSymbol;
  36. import com.webcerebrium.binance.datatype.BinanceTicker;
  37. import com.webcerebrium.binance.websocket.BinanceWebSocketAdapterKline;
  38.  
  39. import constants.BinanceApiKey;
  40.  
  41. public class SqlManager {
  42. private static BinanceApi api;
  43. private static String pKey = BinanceApiKey.getPublicKey();
  44. private static String sKey = BinanceApiKey.getSecretKey();
  45. private static Connection c = null;
  46. static long hieghsOpenTime = 2;
  47.  
  48. public static BinanceApi declareApi(){
  49.  
  50. try {
  51. return new BinanceApi(pKey,sKey);
  52. } catch (BinanceApiException e) {
  53. e.printStackTrace();
  54. return null;
  55. }
  56.  
  57. }
  58.  
  59. private static Properties getProperties() {
  60. Properties prop = new Properties();
  61. prop.setProperty("BINANCE_API_KEY", pKey);
  62. prop.setProperty("BINANCE_API_SECRET", sKey);
  63. return prop;
  64. }
  65. public static void main(String[] args) throws SQLException, ClassNotFoundException, BinanceApiException {
  66. Properties prop = getProperties();
  67. c = getConnection();
  68. // System.setProperty("lombok.extern.slf4j.Slf4j.DEFAULT_LOG_LEVEL_KEY", "ERROR");
  69. api = new BinanceApi(pKey, sKey);
  70. System.out.println(System.currentTimeMillis());
  71.  
  72. JsonArray allBookTickers = api.allBookTickers();
  73.  
  74. ArrayList<String> listOfPairs = new ArrayList<>();
  75.  
  76. for (JsonElement jsonElement : allBookTickers) {
  77. String je = jsonElement.toString();
  78. if(je.contains("123456"))
  79. continue;
  80. String split1 = je.split(",")[0];
  81. String pair = split1.split(":")[1];
  82. pair = pair.replaceAll("\"", "");
  83. System.out.println("++++++++++++++++++++++++++++++++++");
  84.  
  85. System.out.println(pair);
  86. listOfPairs.add(pair);
  87. }
  88.  
  89. // for (String string : listOfPairs) {
  90.  
  91.  
  92.  
  93. for (String string : listOfPairs) {
  94. downloadAllCandlesForInterval(string.toUpperCase());
  95. }
  96.  
  97.  
  98. c.close();
  99.  
  100. }
  101.  
  102. private static String pairThisPair(String pair) {
  103. String toReturn= "";
  104. pair = pair.toLowerCase();
  105. int lenght = pair.length();
  106.  
  107. if(pair.contains("usdt"))
  108. return "usdt"+pair.substring(0,lenght-4);
  109. else
  110. return pair.substring(lenght-3,lenght)+pair.substring(0,lenght-3);
  111. }
  112.  
  113. private static void downloadAllCandlesForInterval(String pairName) {
  114. ArrayList<BinanceInterval> intervalList = getIntervalList();
  115.  
  116. for (BinanceInterval interval : intervalList) {
  117. System.out.println(pairName+" "+interval);
  118.  
  119. boolean executePSQL = executePSQL("select * from "+pairName+".candle"+interval);
  120.  
  121. if(!executePSQL)
  122. createSchemaAndTable(pairName, interval);
  123. else {
  124. System.out.println("Tatak tabela juz istnieje");
  125. ResultSet set = executeSqlQuerry("select min(openTime) from "+pairName+".candle"+interval);
  126. try {
  127. if(set.next()) {
  128. System.out.println(set.getFetchSize());
  129. long timeValue = set.getLong(1)-1;
  130. if(timeValue >0) {
  131. List<BinanceCandlestick> klines;
  132.  
  133. do {
  134. klines = klines(new BinanceSymbol(pairName), interval, 500, timeValue);
  135. addDataToProBotDataBase(pairName,interval,klines);
  136. timeValue = getLastestTime(klines)-1;
  137. System.out.println("List size -> "+klines.size() + "dla "+interval);
  138. } while(klines.size() == 500);
  139. }
  140. }
  141. set = executeSqlQuerry("select max(openTime) from "+pairName+".candle"+interval);
  142. set.next();
  143. hieghsOpenTime = set.getLong(1);
  144. System.out.println(hieghsOpenTime +"<-- hie");
  145.  
  146. } catch (SQLException e) {
  147. // TODO Auto-generated catch block
  148. e.printStackTrace();
  149. } catch (BinanceApiException e) {
  150. // TODO Auto-generated catch block
  151. e.printStackTrace();
  152. }
  153. }
  154. Long timeValue = System.currentTimeMillis();
  155.  
  156. try {
  157. List<BinanceCandlestick> klines;
  158.  
  159. do {
  160. klines = klines(new BinanceSymbol(pairName), interval, 500, timeValue);
  161. boolean stop = addDataToProBotDataBase(pairName,interval,klines);
  162. timeValue = getLastestTime(klines)-1;
  163. System.out.println("List size -> "+klines.size() + "dla "+interval);
  164. if(stop) {
  165. System.out.println("Stop!");
  166. break;
  167. }
  168. } while(klines.size() == 500);
  169.  
  170. } catch (BinanceApiException | SQLException e) {
  171. e.printStackTrace();
  172. }
  173.  
  174. try {
  175. Thread.sleep(689);
  176. } catch (InterruptedException e) {
  177. // TODO Auto-generated catch block
  178. e.printStackTrace();
  179. }
  180. }
  181.  
  182.  
  183. }
  184.  
  185.  
  186. private static Long getLastestTime(List<BinanceCandlestick> klines) {
  187. long time = System.currentTimeMillis();
  188.  
  189. for (BinanceCandlestick binanceCandlestick : klines) {
  190. time = time < binanceCandlestick.openTime ? time: binanceCandlestick.openTime;
  191.  
  192. }
  193.  
  194. return time;
  195. }
  196.  
  197. private static boolean addDataToProBotDataBase(String pairName, BinanceInterval interval, List<BinanceCandlestick> klines) throws SQLException {
  198. c.setAutoCommit(false);
  199. Statement createStatement = c.createStatement();
  200.  
  201. for (BinanceCandlestick candle: klines) {
  202. if(candle.openTime == hieghsOpenTime)
  203. {
  204. System.out.println("Robie Update "+hieghsOpenTime);
  205.  
  206. createStatement.executeUpdate("update "+pairName+".candle"+interval
  207. +" set openTime = " + candle.open
  208. + ", high = " + candle.high
  209. + ", low = " + candle.low
  210. + ", close = " + candle.close
  211. + ", volume = " + candle.volume
  212. + ", closeTime = " + candle.closeTime
  213. + ", quoteAssetVolume = " + candle.quoteAssetVolume
  214. + ", numberOfTrades = " + candle.numberOfTrades
  215. + ", takerBuyBaseAssetVolume = " + candle.takerBuyBaseAssetVolume
  216. + ", takerBuyQuoteAssetVolume = " + candle.takerBuyQuoteAssetVolume
  217. + " where openTime = " + hieghsOpenTime
  218. );
  219. c.commit();
  220.  
  221. return true;
  222. }
  223. createStatement.executeUpdate("insert into "+pairName+".candle"+interval
  224. + "(openTime"
  225. + ", open"
  226. + ", high"
  227. + ", low"
  228. + ", close"
  229. + ", volume"
  230. + ", closeTime"
  231. + ", quoteAssetVolume"
  232. + ", numberOfTrades"
  233. + ", takerBuyBaseAssetVolume"
  234. + ", takerBuyQuoteAssetVolume)"
  235. + " values ("+candle.openTime
  236. +", " + candle.open
  237. +", " + candle.high
  238. +", " + candle.low
  239. +", " + candle.close
  240. +", " + candle.volume
  241. +", " + candle.closeTime
  242. +", " + candle.quoteAssetVolume
  243. +", " + candle.numberOfTrades
  244. +", " + candle.takerBuyBaseAssetVolume
  245. +", " + candle.takerBuyQuoteAssetVolume
  246. +")");
  247.  
  248. }
  249. c.commit();
  250.  
  251. return false;
  252.  
  253. }
  254.  
  255. private static ArrayList<BinanceInterval> getIntervalList() {
  256. ArrayList<BinanceInterval> toReturn = new ArrayList<>();
  257. toReturn.add(BinanceInterval.ONE_DAY);
  258. toReturn.add(BinanceInterval.ONE_HOUR);
  259. toReturn.add(BinanceInterval.ONE_MIN);
  260. toReturn.add(BinanceInterval.ONE_MONTH);
  261. toReturn.add(BinanceInterval.ONE_WEEK);
  262. toReturn.add(BinanceInterval.FIVE_MIN);
  263. toReturn.add(BinanceInterval.FIFTEEN_MIN);
  264. toReturn.add(BinanceInterval.FOUR_HOURS);
  265. toReturn.add(BinanceInterval.SIX_HOURS);
  266. toReturn.add(BinanceInterval.EIGHT_HOURS);
  267. toReturn.add(BinanceInterval.THIRTY_MIN);
  268. toReturn.add(BinanceInterval.THREE_DAYS);
  269. toReturn.add(BinanceInterval.THREE_MIN);
  270. toReturn.add(BinanceInterval.TWELVE_HOURS);
  271. toReturn.add(BinanceInterval.TWO_HOURS);
  272.  
  273. return toReturn;
  274. }
  275.  
  276. public static List<BinanceCandlestick> klines(BinanceSymbol symbol, BinanceInterval interval, int limit, Long timeValue) throws BinanceApiException {
  277. String u = api.baseUrl + "v1/klines?symbol=" + symbol.get() + "&interval=" + interval.toString() + "&limit=" + limit;
  278. u += "&" + "endTime" + "=" + timeValue;
  279. JsonArray jsonElements = (new BinanceRequest(u)).read().asJsonArray();
  280. List<BinanceCandlestick> list = new LinkedList<BinanceCandlestick>();
  281. for (JsonElement e : jsonElements) list.add(new BinanceCandlestick(e.getAsJsonArray()));
  282. return list;
  283. }
  284.  
  285. public static boolean executePSQL(String querry) {
  286.  
  287. try {
  288. ResultSet rs;
  289. Statement stmt = getConnection().createStatement();
  290. stmt.execute(querry);
  291. return true;
  292.  
  293. } catch (SQLException e) {
  294. return false;
  295. }
  296.  
  297. }
  298.  
  299. public static ResultSet executeSqlQuerry(String querry) {
  300.  
  301. try {
  302. ResultSet rs;
  303. Statement stmt = c.createStatement();
  304. rs = stmt.executeQuery(querry);
  305. return rs;
  306. } catch (SQLException e) {
  307. e.printStackTrace();
  308. }
  309. return null;
  310.  
  311. }
  312.  
  313. private static java.sql.Connection getConnection() {
  314. final String login = "postgres";
  315. final String password = "postgres";
  316. final String connectionLink = "jdbc:postgresql://localhost:5432/probot";
  317. java.sql.Connection c;
  318.  
  319. try {
  320. c = DriverManager.getConnection(connectionLink, login, password);
  321. return c;
  322. } catch (SQLException e) {
  323. System.out.println("Nie ma po³¹czenia");
  324. e.printStackTrace();
  325. }
  326. return null;
  327.  
  328. }
  329.  
  330. public static void createSchemaAndTable(String pairName, BinanceInterval interval) {
  331. String querry = "create schema "+pairName;
  332. executePSQL(querry); // robie schema
  333.  
  334. System.out.println(interval.toString());
  335. querry = "create table "+pairName+".candle"+interval
  336. + "(openTime numeric"
  337. + ", open numeric"
  338. + ", high numeric"
  339. + ", low numeric"
  340. + ", close numeric"
  341. + ", volume numeric"
  342. + ", closeTime numeric"
  343. + ", quoteAssetVolume numeric"
  344. + ", numberOfTrades int"
  345. + ", takerBuyBaseAssetVolume numeric"
  346. + ", takerBuyQuoteAssetVolume numeric)";
  347.  
  348. executePSQL(querry); // robie tabele
  349. ResultSet executeSqlQuerry = executeSqlQuerry("select * from "+pairName+".candle"+interval);
  350. try {
  351. System.out.println(executeSqlQuerry.next());
  352. } catch (SQLException e) {
  353. // TODO Auto-generated catch block
  354. e.printStackTrace();
  355. }
  356.  
  357.  
  358.  
  359. }
  360.  
  361.  
  362.  
  363. public static void insertDateToTable(Candle someCandle) {
  364.  
  365.  
  366. }
  367.  
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement