QueueController.class.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. <?php
  2. namespace Home\Controller;
  3. class QueueController extends \Think\Controller
  4. {
  5. // 更新市场价格
  6. public function houprice()
  7. {
  8. $list = M("market")->select();
  9. foreach ($list as $k => $v) {
  10. $hou_price = M('TradeLog')->where(array('market' => $v['name']))->order('id desc')->getField('price');
  11. M('Market')->where(array('name' => $v['name']))->setField('hou_price', $hou_price);
  12. echo $hou_price;
  13. }
  14. }
  15. /** 计算趋势,每天运行一次即可 **/
  16. public function tendency()
  17. {
  18. $list = M("market")->select();
  19. foreach ($list as $k => $v) {
  20. echo "----计算趋势----" . $v["name"] . "------------<br>";
  21. $tendency_time = 4; //间隔时间4小时
  22. $t = time();
  23. $tendency_str = $t - (24 * 60 * 60 * 3); //当前时间的3天前
  24. for ($x = 0; $x <= 18; $x++) { //18次,72个小时
  25. $na = $tendency_str + (60 * 60 * $tendency_time * $x);
  26. $nb = $tendency_str + (60 * 60 * $tendency_time * ($x + 1));
  27. $b = M("TradeLog")->where("addtime >=" . $na . " and addtime <" . $nb . " and market ='" . $v["name"] . "'")->max("price");
  28. if (!$b) { $b = 0; }
  29. $rs[] = array($na, $b);
  30. }
  31. M("Market")->where(array("name" => $v["name"]))->setField("tendency", json_encode($rs));
  32. unset($rs);
  33. echo "计算成功!";
  34. echo "\n";
  35. }
  36. echo "趋势计算0k " . "\n";
  37. }
  38. /** 计算行情 **/
  39. public function chart()
  40. {
  41. $list = M("market")->select();
  42. foreach ($list as $k => $v) {
  43. $this->setTradeJson($v["name"]);
  44. }
  45. echo "图形数据生成OK " . "\n";
  46. }
  47. //生成交易K线图数据
  48. public function setTradeJson___(){
  49. $timearr = array(1, 5, 15, 30, 60, 240,1440);
  50. }
  51. //生成交易日志
  52. public function setTradeJson($market)
  53. {
  54. $timearr = array(1, 5, 15, 30, 60, 240,1440);
  55. foreach ($timearr as $k => $v) {
  56. //如果在该时间类型有数据
  57. $tradeJson = M("TradeJson")->where(array("market" => $market, "type" => $v))->order("id desc")->find();
  58. if ($tradeJson) {
  59. $addtime = $tradeJson["addtime"];
  60. } else {
  61. $addtime = M("TradeLog")->where(array("market" => $market))->order("id asc")->getField("addtime");
  62. }
  63. if ($addtime) {
  64. $youtradelog = M("TradeLog")->where("addtime >=" . $addtime . " and market ='" . $market . "'")->sum("num");
  65. }
  66. if ($youtradelog) {
  67. if ($v == 1) {
  68. $start_time = $addtime;
  69. } else {
  70. $start_time = mktime(date("H", $addtime), floor(date("i", $addtime) / $v) * $v, 0, date("m", $addtime), date("d", $addtime), date("Y", $addtime));
  71. }
  72. for ($x = 0; $x <= 20; $x++) {
  73. $na = $start_time + (60 * $v * $x);
  74. $nb = $start_time + (60 * $v * ($x + 1));
  75. if (time() < $na) {
  76. break;
  77. }
  78. $sum = M("TradeLog")->where("addtime >=" . $na . " and addtime <" . $nb . " and market ='" . $market . "'")->sum("num");
  79. if ($sum) {
  80. $sta = M("TradeLog")->where("addtime >=" . $na . " and addtime <" . $nb . " and market ='" . $market . "'")->order("id asc")->getField("price");
  81. $max = M("TradeLog")->where("addtime >=" . $na . " and addtime <" . $nb . " and market ='" . $market . "'")->max("price");
  82. $min = M("TradeLog")->where("addtime >=" . $na . " and addtime <" . $nb . " and market ='" . $market . "'")->min("price");
  83. $end = M("TradeLog")->where("addtime >=" . $na . " and addtime <" . $nb . " and market ='" . $market . "'")->order("id desc")->getField("price");
  84. $d = array($na, $sum, $sta, $max, $min, $end);//时间,成交量,成交价,最高价,最低价,收盘价
  85. if($v == 1){
  86. $newd['new_price'] = $sta;
  87. $newd['min_price'] = $min;
  88. }
  89. if($v == 1440){
  90. $newd['volume'] = $sum;
  91. }
  92. // 判断是否有最新成交记录
  93. $jiansuotime = M("TradeLog")->where(array("market" => $market))->order("id desc")->find();
  94. $times = floor((time()-$jiansuotime['addtime'])%86400/60);
  95. if ($times >= 1){
  96. $jiansuo = M("TradeJson")->where(array("market" => $market, "data" => json_encode($d), "addtime" => $na, "type" => $v))->find();
  97. if ($jiansuo) {
  98. $sdfds = array();
  99. $sdfds['market'] = $market;
  100. $sdfds['price'] = $sta;
  101. $sdfds['num'] = 0;
  102. $sdfds['mum'] = 0;
  103. $sdfds['type'] = 1;
  104. $sdfds['addtime'] = time();
  105. $sdfds['status'] = 0;
  106. $aa = M("TradeLog")->add($sdfds);
  107. M("TradeJson")->execute("commit");
  108. sleep(1);
  109. }
  110. }
  111. if (M("TradeJson")->where(array("market" => $market, "addtime" => $na, "type" => $v))->find()) {
  112. M("TradeJson")->where(array("market" => $market, "addtime" => $na, "type" => $v))->save(array("data" => json_encode($d)));
  113. $marketlist = M("market")->where(array('name'=>$market))->save($newd);
  114. } else {
  115. $marketlist = M("market")->where(array('name'=>$market))->save($newd);
  116. $aa = M("TradeJson")->add(array("market" => $market, "data" => json_encode($d), "addtime" => $na, "type" => $v));
  117. M("TradeJson")->execute("commit");
  118. M("TradeJson")->where(array("market" => $market, "data" => "", "type" => $v))->delete();
  119. M("TradeJson")->execute("commit");
  120. }
  121. } else {
  122. M("TradeJson")->add(array("market" => $market, "data" => "", "addtime" => $na, "type" => $v));
  123. M("TradeJson")->execute("commit");
  124. }
  125. }
  126. }
  127. }
  128. return "计算成功!";
  129. }
  130. /** 机器人交易刷单 **/ //每次需要刷单几次,但单价需要不一致
  131. public function autotrade____(){
  132. $list = M("market")->select();
  133. if(!empty($list)){
  134. foreach($list as $k=>$v){
  135. //买的价格低,卖的价格高 ,1买2卖
  136. $type = rand(1, 2);
  137. $market = $v['name'];
  138. $wei = 1;
  139. $min_price = $v['sdlow'] * $wei; //最低价格
  140. $max_price = $v['sdhigh'] * $wei; //最高价格
  141. $min_x_num = $v['sdlow_num'] * $wei; //最低数量
  142. $max_x_num = $v['sdhigh_num'] * $wei; //最高数量
  143. $marketround = $v['round']; //获取交易价小数点
  144. $marketmum = $v['round_mum']; //获取交易数量小数点
  145. if ($max_price < $min_price) {
  146. $min_price = $max_price;
  147. $max_price = $min_price;
  148. }
  149. //如果设置了最高,最低刷单上下线,则价格按照此区域运行
  150. if ($v['sdhigh'] > 0 && !$v['zhang']) {
  151. $max_price = $v['sdhigh'] * $wei;
  152. }
  153. if ($v['sdlow'] > 0 && !$v['die']) {
  154. $min_price = $v['sdlow'] * $wei;
  155. }
  156. if ($v['zhang'] > 0) {
  157. $max_price = $v['hou_price'] * (1 + $v['zhang']) * $wei;
  158. }
  159. if ($v['die'] > 0) {
  160. $min_price = $v['hou_price'] * (1 + $v['die']) * $wei;
  161. }
  162. if (strlen($min_price) > 3||strlen($max_price) > 3) {
  163. $tbsss = str_pad(1,$marketround+2,"0",STR_PAD_RIGHT);
  164. } else {
  165. $tbsss = 1000;
  166. }
  167. $min_price = $min_price * $tbsss;
  168. $max_price = $max_price * $tbsss;
  169. $price = round((rand($min_price, $max_price) / $tbsss) / $wei, $marketround);//随机价
  170. // 刷单数量
  171. if ($max_x_num >0 && $min_x_num >0) {
  172. if ($max_x_num > 99999) {$muls = 1;} else {$muls = 10000;}
  173. if ($min_x_num > 99999) {$muns = 1;} else {$muns = 10000;}
  174. $max_num = round($max_x_num * $muls, $marketmum);
  175. $min_num = round($min_x_num * $muns, $marketmum);
  176. $num = round(rand($min_num, $max_num) / $muns, $marketmum);
  177. } else {
  178. $max_num = round(9.9999 * 10000, $marketmum);
  179. $min_num = round(0.0001 * 10000, $marketmum);
  180. $num = round(rand($min_num, $max_num) / 10000, $marketmum);
  181. }
  182. $data['userid'] = 0;
  183. $data['market'] = $market;
  184. $data['price'] =$price;
  185. $data['num'] =$num;
  186. $data['mum'] =$num;
  187. $data['fee'] =0;
  188. $data['type'] =$type;
  189. $data['addtime'] = time();
  190. $data['status'] = 1;
  191. M("trade")->add($data);
  192. $re = M("trade_log")->where(array('market'=>$market,'type'=>$type,"addtime"=>$data['addtime']))->count();
  193. if($re < 1){
  194. $dlog['market'] = $market;
  195. $dlog['price'] = $price;
  196. $dlog['num'] = $num;
  197. $dlog['mum'] = $num;
  198. $dlog['type'] = $type;
  199. $dlog['addtime'] = time();
  200. $dlog['status'] = 1;
  201. M("trade_log")->add($dlog);
  202. }
  203. }
  204. echo "=".$market."==交易OK==";
  205. }
  206. }
  207. //生成交易记录和交易记录
  208. public function fortrade(){
  209. for($i=1; $i<=3; $i++){
  210. $this->autotrade();
  211. }
  212. }
  213. /** 机器人交易刷单 **/ //每次需要刷单几次,但单价需要不一致
  214. public function autotrade(){
  215. $list = M("market")->select();
  216. if(!empty($list)){
  217. foreach($list as $k=>$v){
  218. //买的价格低,卖的价格高 ,1买2卖
  219. $type = rand(1, 2);
  220. $market = $v['name'];
  221. $wei = 1;
  222. $min_price = $v['sdlow'] * $wei; //浮动最低价格
  223. $max_price = $v['sdhigh'] * $wei; //浮动最高价格
  224. $min_x_num = $v['sdlow_num'] * $wei; //浮动最低数量
  225. $max_x_num = $v['sdhigh_num'] * $wei; //浮动最高数量
  226. $marketround = $v['round']; //获取交易价小数点
  227. $marketmum = $v['round_mum']; //获取交易数量小数点
  228. if ($max_price < $min_price) {
  229. $min_price = $max_price;
  230. $max_price = $min_price;
  231. }
  232. //如果设置了最高,最低刷单上下线,则价格按照此区域运行
  233. if ($v['sdhigh'] > 0 && !$v['zhang']) {
  234. $max_price = $v['sdhigh'] * $wei;
  235. }
  236. if ($v['sdlow'] > 0 && !$v['die']) {
  237. $min_price = $v['sdlow'] * $wei;
  238. }
  239. if ($v['zhang'] > 0) {
  240. //最高价= 昨日收盘价 + 涨幅
  241. $max_price = $v['hou_price'] * (100 + $v['zhang']) / 100 * $wei;
  242. }
  243. if ($v['die'] > 0) {
  244. //最低价= 昨日收盘价 - 跌幅
  245. $min_price = $v['hou_price'] * (100 - $v['die']) / 100 * $wei;
  246. }
  247. if (strlen($min_price) > 3||strlen($max_price) > 3) {
  248. $tbsss = str_pad(1,$marketround+2,"0",STR_PAD_RIGHT);
  249. } else {
  250. $tbsss = 1000;
  251. }
  252. $min_price = $min_price * $tbsss;
  253. $max_price = $max_price * $tbsss;
  254. $price = round((rand($min_price, $max_price) / $tbsss) / $wei, $marketround);//随机价
  255. // 刷单数量
  256. if ($max_x_num >0 && $min_x_num >0) {
  257. if ($max_x_num > 99999) {$muls = 1;} else {$muls = 10000;}
  258. if ($min_x_num > 99999) {$muns = 1;} else {$muns = 10000;}
  259. $max_num = round($max_x_num * $muls, $marketmum);
  260. $min_num = round($min_x_num * $muns, $marketmum);
  261. $num = round(rand($min_num, $max_num) / $muns, $marketmum);
  262. } else {
  263. $max_num = round(9.9999 * 10000, $marketmum);
  264. $min_num = round(0.0001 * 10000, $marketmum);
  265. $num = round(rand($min_num, $max_num) / 10000, $marketmum);
  266. }
  267. $data['userid'] = 0;
  268. $data['market'] = $market;
  269. $data['price'] =$price;
  270. $data['num'] =$num;
  271. $data['mum'] =$num;
  272. $data['fee'] =0;
  273. $data['type'] =$type;
  274. $data['addtime'] = time();
  275. $data['status'] = 1;
  276. M("trade")->add($data);
  277. //$re = M("trade_log")->where(array('market'=>$market,'type'=>$type,"addtime"=>$data['addtime']))->count();
  278. //if($re < 1){
  279. $dlog['market'] = $market;
  280. $dlog['price'] = $price;
  281. $dlog['num'] = $num;
  282. $dlog['mum'] = $num;
  283. $dlog['type'] = $type;
  284. $dlog['addtime'] = time();
  285. $dlog['status'] = 1;
  286. M("trade_log")->add($dlog);
  287. //}
  288. //M("market")->where(array('id'=>$v['id']))->setField('hou_price', $price);
  289. }
  290. echo "=".$market."==交易OK==";
  291. }
  292. }
  293. }
  294. ?>