init
This commit is contained in:
95
hts/HTS.py
95
hts/HTS.py
@@ -1,10 +1,10 @@
|
|||||||
import win32com.client
|
#import win32com.client
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
#import plotly.graph_objects as go
|
import plotly.graph_objects as go
|
||||||
from stockpredictor.analysis.Common import Common
|
from stockpredictor.analysis.Common import Common
|
||||||
|
|
||||||
# enum 주문 상태 세팅용
|
# enum 주문 상태 세팅용
|
||||||
@@ -736,8 +736,8 @@ class HTS:
|
|||||||
STOCK.append({'close': data["Close"][i], 'open': data["Open"][i], 'high': data["High"][i], 'low': data["Low"][i], 'avg5': data["avg5"][i], 'avg20': data["avg20"][i], 'avg60': data["avg60"][i], 'avg120': data["avg120"][i]})
|
STOCK.append({'close': data["Close"][i], 'open': data["Open"][i], 'high': data["High"][i], 'low': data["Low"][i], 'avg5': data["avg5"][i], 'avg20': data["avg20"][i], 'avg60': data["avg60"][i], 'avg120': data["avg120"][i]})
|
||||||
|
|
||||||
bsLine = {}
|
bsLine = {}
|
||||||
bsLine['buy'] = [-1 for i in range(len(lower))]
|
bsLine['buy'] = [-1 for i in range(size)]
|
||||||
bsLine['sell'] = [-1 for i in range(len(lower))]
|
bsLine['sell'] = [-1 for i in range(size)]
|
||||||
|
|
||||||
i = size - 1
|
i = size - 1
|
||||||
status = self.checkStatus(STOCK, i)
|
status = self.checkStatus(STOCK, i)
|
||||||
@@ -767,13 +767,15 @@ class HTS:
|
|||||||
if "DARKCLOUD_" in status: count_0 += 1
|
if "DARKCLOUD_" in status: count_0 += 1
|
||||||
if "EVENINGSTAR" in status: count_0 += 1
|
if "EVENINGSTAR" in status: count_0 += 1
|
||||||
|
|
||||||
|
# real time 에서는 현재 기점에 사고 파는 가격을 표기한다.
|
||||||
if count_0 == 0 and count_1 > 0:
|
if count_0 == 0 and count_1 > 0:
|
||||||
bsLine['buy'][i + 1] = STOCK[i]['close'] - 5
|
bsLine['buy'][i] = STOCK[i]['close'] - 5
|
||||||
bsLine['sell'][i + 1] = STOCK[i]['close']
|
bsLine['sell'][i] = STOCK[i]['close']
|
||||||
if count_0 > 0:
|
if count_0 > 0:
|
||||||
bsLine['sell'][i + 1] = STOCK[i]['close'] + 5
|
bsLine['buy'][i] = 0
|
||||||
|
bsLine['sell'][i] = STOCK[i]['close'] + 5
|
||||||
|
|
||||||
return bsLine
|
return bsLine['buy'][i], bsLine['sell'][i]
|
||||||
|
|
||||||
|
|
||||||
def checkTransaction_Simulation(self, data, upper, lower):
|
def checkTransaction_Simulation(self, data, upper, lower):
|
||||||
@@ -814,6 +816,7 @@ class HTS:
|
|||||||
if "DARKCLOUD_" in status: count_0 += 1
|
if "DARKCLOUD_" in status: count_0 += 1
|
||||||
if "EVENINGSTAR" in status: count_0 += 1
|
if "EVENINGSTAR" in status: count_0 += 1
|
||||||
|
|
||||||
|
# 시뮬레이션은 이번에 사고 파는 것으로 판단했기 때문에, 다음 봉에서 사고 판 위치를 표시한다.
|
||||||
if count_0 == 0 and count_1 > 0:
|
if count_0 == 0 and count_1 > 0:
|
||||||
bsLine['buy'][i + 1] = STOCK[i]['close'] - 5
|
bsLine['buy'][i + 1] = STOCK[i]['close'] - 5
|
||||||
bsLine['sell'][i + 1] = STOCK[i]['close']
|
bsLine['sell'][i + 1] = STOCK[i]['close']
|
||||||
@@ -853,11 +856,9 @@ class HTS:
|
|||||||
return
|
return
|
||||||
|
|
||||||
def buyRealTime(self, stock_code, given_day):
|
def buyRealTime(self, stock_code, given_day):
|
||||||
data, upper, lower = None, None, None
|
PREVIOUS_PRICE = 0
|
||||||
|
BUY_COUNT = 200
|
||||||
previous_price = 0
|
TOTAL_BUY_AMT = 0
|
||||||
buy_count = 260
|
|
||||||
total_byu_amt = 0
|
|
||||||
|
|
||||||
logFp = open(given_day+".log", "w")
|
logFp = open(given_day+".log", "w")
|
||||||
|
|
||||||
@@ -872,7 +873,7 @@ class HTS:
|
|||||||
"low": [],
|
"low": [],
|
||||||
"vol": []}
|
"vol": []}
|
||||||
|
|
||||||
while datetime.strptime(given_day + " 083000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 151000", '%Y%m%d %H%M%S'):
|
while datetime.strptime(given_day + " 083000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 151100", '%Y%m%d %H%M%S'):
|
||||||
second = datetime.now().strftime('%Y%m%d %H%M%S')
|
second = datetime.now().strftime('%Y%m%d %H%M%S')
|
||||||
|
|
||||||
if second in timecheck and not timecheck[second]:
|
if second in timecheck and not timecheck[second]:
|
||||||
@@ -886,41 +887,35 @@ class HTS:
|
|||||||
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
|
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
|
||||||
data, upper, lower = self.analyze(result)
|
data, upper, lower = self.analyze(result)
|
||||||
|
|
||||||
# 사야 할 시점과 팔아야 할 시점을 체크한다.
|
# 사야 할 시점/가격과 팔아야 할 시점/가격을 체크한다.
|
||||||
bsLine = self.checkTransaction_Realtime(data, upper, lower)
|
bs_buy_price, bs_sell_price = self.checkTransaction_Realtime(data, upper, lower)
|
||||||
|
|
||||||
buy_line = bsLine['buy']
|
if bs_buy_price > 0:
|
||||||
|
if PREVIOUS_PRICE > 0:
|
||||||
# 주문 및 매도 처리
|
if PREVIOUS_PRICE > bs_buy_price:
|
||||||
price = bsLine['buy'][len(buy_line)-1]
|
if BUY_COUNT < 100:
|
||||||
|
BUY_COUNT = 90
|
||||||
# 매수신청과 5원 높여서 매도신청
|
BUY_COUNT += 10
|
||||||
if price > 0:
|
if BUY_COUNT > 250:
|
||||||
if previous_price > 0:
|
BUY_COUNT = 250
|
||||||
if previous_price > price:
|
elif PREVIOUS_PRICE < bs_buy_price:
|
||||||
if buy_count < 200:
|
if BUY_COUNT > 250:
|
||||||
buy_count = 200
|
BUY_COUNT = 260
|
||||||
buy_count += 40
|
BUY_COUNT -= 10
|
||||||
if buy_count > 500:
|
if BUY_COUNT < 100:
|
||||||
buy_count = 500
|
BUY_COUNT = 100
|
||||||
elif previous_price < price:
|
PREVIOUS_PRICE = bs_buy_price
|
||||||
if buy_count > 400:
|
|
||||||
buy_count = 400
|
|
||||||
buy_count -= 40
|
|
||||||
if buy_count < 100:
|
|
||||||
buy_count = 100
|
|
||||||
previous_price = price
|
|
||||||
|
|
||||||
# 매수 주문
|
# 매수 주문
|
||||||
# 현재까지 매입금액이 7백만원 이하일 때만 매수를 한다.
|
# 현재까지 매입금액이 7백만원 이하일 때만 매수를 한다.
|
||||||
if total_byu_amt < 7000000:
|
if TOTAL_BUY_AMT < 7000000:
|
||||||
self.requestOrder("2", stock_code, buy_count , price)
|
self.requestOrder("2", stock_code, BUY_COUNT , bs_buy_price)
|
||||||
|
|
||||||
## 매도 주문 (아래 잔고를 체크해서 매도를 호출하는 것으로 시도한다.)
|
## 매도 주문 (아래 잔고를 체크해서 매도를 호출하는 것으로 시도한다.)
|
||||||
#time.sleep(60)
|
#time.sleep(60)
|
||||||
#self.requestOrder("1", stock_code, buy_count , price + 5)
|
#self.requestOrder("1", stock_code, BUY_COUNT , price + 5)
|
||||||
print("BUY", second, price)
|
print("BUY", second, bs_buy_price)
|
||||||
logFp.write("%s,%s, %d\n" % ("BUY", second, price))
|
logFp.write("%s,%s, %d\n" % ("BUY", second, bs_buy_price))
|
||||||
logFp.flush()
|
logFp.flush()
|
||||||
|
|
||||||
# 가져온 만큼 데이터를 누적해서 파일로 작성한다.
|
# 가져온 만큼 데이터를 누적해서 파일로 작성한다.
|
||||||
@@ -936,18 +931,10 @@ class HTS:
|
|||||||
jangoDic = self.requstJango()
|
jangoDic = self.requstJango()
|
||||||
if jangoDic and len(jangoDic.keys()) > 0:
|
if jangoDic and len(jangoDic.keys()) > 0:
|
||||||
for code in jangoDic:
|
for code in jangoDic:
|
||||||
total_byu_amt = jangoDic[code]['매입금액']
|
TOTAL_BUY_AMT = jangoDic[code]['매입금액']
|
||||||
if jangoDic[code]['매도가능'] > 0:
|
if jangoDic[code]['매도가능'] > 0:
|
||||||
# 장부가 가격의 마지막 자리를 0으로 만든다. (2090 -> 2090, 2092 -> 2090, 2098 -> 2090)
|
# 장부가 가격의 마지막 자리를 0으로 만든다. (2090 -> 2090, 2092 -> 2090, 2098 -> 2090)
|
||||||
sell_price = int(jangoDic[code]['장부가'] / 10) * 10
|
sell_price = int(jangoDic[code]['장부가'] / 10) * 10
|
||||||
"""
|
|
||||||
# 만약 오후 1시 이전이라면 한 호가 (5원) 더 올려서 매도한다.
|
|
||||||
if datetime.strptime(given_day + " 092000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 104000", '%Y%m%d %H%M%S'):
|
|
||||||
lower_size = len(lower)
|
|
||||||
if lower != None and lower_size > 3:
|
|
||||||
if lower[lower_size-3] < lower[lower_size-2] < lower[lower_size-1]:
|
|
||||||
sell_price += 5
|
|
||||||
"""
|
|
||||||
# 장부가의 마지막 자리수를 가져온다.
|
# 장부가의 마지막 자리수를 가져온다.
|
||||||
last_number = int(jangoDic[code]['장부가']) % 10
|
last_number = int(jangoDic[code]['장부가']) % 10
|
||||||
if last_number in [0, 1, 2]:
|
if last_number in [0, 1, 2]:
|
||||||
@@ -982,9 +969,9 @@ if __name__ == "__main__":
|
|||||||
#hts.currentStock(stock_codes)
|
#hts.currentStock(stock_codes)
|
||||||
for given_day in given_days:
|
for given_day in given_days:
|
||||||
#hts.writeStockData(stock_codes, given_day)
|
#hts.writeStockData(stock_codes, given_day)
|
||||||
#for stock_code in stock_codes:
|
for stock_code in stock_codes:
|
||||||
#hts.simulate(stock_code, given_day)
|
hts.simulate(stock_code, given_day)
|
||||||
|
|
||||||
hts.buyRealTime(stock_codes, given_day)
|
#hts.buyRealTime(stock_codes[0], given_day)
|
||||||
|
|
||||||
print ("done...")
|
print ("done...")
|
||||||
|
|||||||
@@ -1,77 +1,367 @@
|
|||||||
time, check
|
time, check
|
||||||
090403,False
|
090503,False
|
||||||
|
090603,False
|
||||||
|
090703,False
|
||||||
|
090803,False
|
||||||
090903,False
|
090903,False
|
||||||
|
091003,False
|
||||||
|
091103,False
|
||||||
|
091203,False
|
||||||
|
091303,False
|
||||||
091403,False
|
091403,False
|
||||||
|
091503,False
|
||||||
|
091603,False
|
||||||
|
091703,False
|
||||||
|
091803,False
|
||||||
091903,False
|
091903,False
|
||||||
|
092003,False
|
||||||
|
092103,False
|
||||||
|
092203,False
|
||||||
|
092303,False
|
||||||
092403,False
|
092403,False
|
||||||
|
092503,False
|
||||||
|
092603,False
|
||||||
|
092703,False
|
||||||
|
092803,False
|
||||||
092903,False
|
092903,False
|
||||||
|
093003,False
|
||||||
|
093103,False
|
||||||
|
093203,False
|
||||||
|
093303,False
|
||||||
093403,False
|
093403,False
|
||||||
|
093503,False
|
||||||
|
093603,False
|
||||||
|
093703,False
|
||||||
|
093803,False
|
||||||
093903,False
|
093903,False
|
||||||
|
094003,False
|
||||||
|
094103,False
|
||||||
|
094203,False
|
||||||
|
094303,False
|
||||||
094403,False
|
094403,False
|
||||||
|
094503,False
|
||||||
|
094603,False
|
||||||
|
094703,False
|
||||||
|
094803,False
|
||||||
094903,False
|
094903,False
|
||||||
|
095003,False
|
||||||
|
095103,False
|
||||||
|
095203,False
|
||||||
|
095303,False
|
||||||
095403,False
|
095403,False
|
||||||
|
095503,False
|
||||||
|
095603,False
|
||||||
|
095703,False
|
||||||
|
095803,False
|
||||||
095903,False
|
095903,False
|
||||||
|
100003,False
|
||||||
|
100103,False
|
||||||
|
100203,False
|
||||||
|
100303,False
|
||||||
100403,False
|
100403,False
|
||||||
|
100503,False
|
||||||
|
100603,False
|
||||||
|
100703,False
|
||||||
|
100803,False
|
||||||
100903,False
|
100903,False
|
||||||
|
101003,False
|
||||||
|
101103,False
|
||||||
|
101203,False
|
||||||
|
101303,False
|
||||||
101403,False
|
101403,False
|
||||||
|
101503,False
|
||||||
|
101603,False
|
||||||
|
101703,False
|
||||||
|
101803,False
|
||||||
101903,False
|
101903,False
|
||||||
|
102003,False
|
||||||
|
102103,False
|
||||||
|
102203,False
|
||||||
|
102303,False
|
||||||
102403,False
|
102403,False
|
||||||
|
102503,False
|
||||||
|
102603,False
|
||||||
|
102703,False
|
||||||
|
102803,False
|
||||||
102903,False
|
102903,False
|
||||||
|
103003,False
|
||||||
|
103103,False
|
||||||
|
103203,False
|
||||||
|
103303,False
|
||||||
103403,False
|
103403,False
|
||||||
|
103503,False
|
||||||
|
103603,False
|
||||||
|
103703,False
|
||||||
|
103803,False
|
||||||
103903,False
|
103903,False
|
||||||
|
104003,False
|
||||||
|
104103,False
|
||||||
|
104203,False
|
||||||
|
104303,False
|
||||||
104403,False
|
104403,False
|
||||||
|
104503,False
|
||||||
|
104603,False
|
||||||
|
104703,False
|
||||||
|
104803,False
|
||||||
104903,False
|
104903,False
|
||||||
|
105003,False
|
||||||
|
105103,False
|
||||||
|
105203,False
|
||||||
|
105303,False
|
||||||
105403,False
|
105403,False
|
||||||
|
105503,False
|
||||||
|
105603,False
|
||||||
|
105703,False
|
||||||
|
105803,False
|
||||||
105903,False
|
105903,False
|
||||||
|
110003,False
|
||||||
|
110103,False
|
||||||
|
110203,False
|
||||||
|
110303,False
|
||||||
110403,False
|
110403,False
|
||||||
|
110503,False
|
||||||
|
110603,False
|
||||||
|
110703,False
|
||||||
|
110803,False
|
||||||
110903,False
|
110903,False
|
||||||
|
111003,False
|
||||||
|
111103,False
|
||||||
|
111203,False
|
||||||
|
111303,False
|
||||||
111403,False
|
111403,False
|
||||||
|
111503,False
|
||||||
|
111603,False
|
||||||
|
111703,False
|
||||||
|
111803,False
|
||||||
111903,False
|
111903,False
|
||||||
|
112003,False
|
||||||
|
112103,False
|
||||||
|
112203,False
|
||||||
|
112303,False
|
||||||
112403,False
|
112403,False
|
||||||
|
112503,False
|
||||||
|
112603,False
|
||||||
|
112703,False
|
||||||
|
112803,False
|
||||||
112903,False
|
112903,False
|
||||||
|
113003,False
|
||||||
|
113103,False
|
||||||
|
113203,False
|
||||||
|
113303,False
|
||||||
113403,False
|
113403,False
|
||||||
|
113503,False
|
||||||
|
113603,False
|
||||||
|
113703,False
|
||||||
|
113803,False
|
||||||
113903,False
|
113903,False
|
||||||
|
114003,False
|
||||||
|
114103,False
|
||||||
|
114203,False
|
||||||
|
114303,False
|
||||||
114403,False
|
114403,False
|
||||||
|
114503,False
|
||||||
|
114603,False
|
||||||
|
114703,False
|
||||||
|
114803,False
|
||||||
114903,False
|
114903,False
|
||||||
|
115003,False
|
||||||
|
115103,False
|
||||||
|
115203,False
|
||||||
|
115303,False
|
||||||
115403,False
|
115403,False
|
||||||
|
115503,False
|
||||||
|
115603,False
|
||||||
|
115703,False
|
||||||
|
115803,False
|
||||||
115903,False
|
115903,False
|
||||||
|
120003,False
|
||||||
|
120103,False
|
||||||
|
120203,False
|
||||||
|
120303,False
|
||||||
120403,False
|
120403,False
|
||||||
|
120503,False
|
||||||
|
120603,False
|
||||||
|
120703,False
|
||||||
|
120803,False
|
||||||
120903,False
|
120903,False
|
||||||
|
121003,False
|
||||||
|
121103,False
|
||||||
|
121203,False
|
||||||
|
121303,False
|
||||||
121403,False
|
121403,False
|
||||||
|
121503,False
|
||||||
|
121603,False
|
||||||
|
121703,False
|
||||||
|
121803,False
|
||||||
121903,False
|
121903,False
|
||||||
|
122003,False
|
||||||
|
122103,False
|
||||||
|
122203,False
|
||||||
|
122303,False
|
||||||
122403,False
|
122403,False
|
||||||
|
122503,False
|
||||||
|
122603,False
|
||||||
|
122703,False
|
||||||
|
122803,False
|
||||||
122903,False
|
122903,False
|
||||||
|
123003,False
|
||||||
|
123103,False
|
||||||
|
123203,False
|
||||||
|
123303,False
|
||||||
123403,False
|
123403,False
|
||||||
|
123503,False
|
||||||
|
123603,False
|
||||||
|
123703,False
|
||||||
|
123803,False
|
||||||
123903,False
|
123903,False
|
||||||
|
124003,False
|
||||||
|
124103,False
|
||||||
|
124203,False
|
||||||
|
124303,False
|
||||||
124403,False
|
124403,False
|
||||||
|
124503,False
|
||||||
|
124603,False
|
||||||
|
124703,False
|
||||||
|
124803,False
|
||||||
124903,False
|
124903,False
|
||||||
|
125003,False
|
||||||
|
125103,False
|
||||||
|
125203,False
|
||||||
|
125303,False
|
||||||
125403,False
|
125403,False
|
||||||
|
125503,False
|
||||||
|
125603,False
|
||||||
|
125703,False
|
||||||
|
125803,False
|
||||||
125903,False
|
125903,False
|
||||||
|
130003,False
|
||||||
|
130103,False
|
||||||
|
130203,False
|
||||||
|
130303,False
|
||||||
130403,False
|
130403,False
|
||||||
|
130503,False
|
||||||
|
130603,False
|
||||||
|
130703,False
|
||||||
|
130803,False
|
||||||
130903,False
|
130903,False
|
||||||
|
131003,False
|
||||||
|
131103,False
|
||||||
|
131203,False
|
||||||
|
131303,False
|
||||||
131403,False
|
131403,False
|
||||||
|
131503,False
|
||||||
|
131603,False
|
||||||
|
131703,False
|
||||||
|
131803,False
|
||||||
131903,False
|
131903,False
|
||||||
|
132003,False
|
||||||
|
132103,False
|
||||||
|
132203,False
|
||||||
|
132303,False
|
||||||
132403,False
|
132403,False
|
||||||
|
132503,False
|
||||||
|
132603,False
|
||||||
|
132703,False
|
||||||
|
132803,False
|
||||||
132903,False
|
132903,False
|
||||||
|
133003,False
|
||||||
|
133103,False
|
||||||
|
133203,False
|
||||||
|
133303,False
|
||||||
133403,False
|
133403,False
|
||||||
|
133503,False
|
||||||
|
133603,False
|
||||||
|
133703,False
|
||||||
|
133803,False
|
||||||
133903,False
|
133903,False
|
||||||
|
134003,False
|
||||||
|
134103,False
|
||||||
|
134203,False
|
||||||
|
134303,False
|
||||||
134403,False
|
134403,False
|
||||||
|
134503,False
|
||||||
|
134603,False
|
||||||
|
134703,False
|
||||||
|
134803,False
|
||||||
134903,False
|
134903,False
|
||||||
|
135003,False
|
||||||
|
135103,False
|
||||||
|
135203,False
|
||||||
|
135303,False
|
||||||
135403,False
|
135403,False
|
||||||
|
135503,False
|
||||||
|
135603,False
|
||||||
|
135703,False
|
||||||
|
135803,False
|
||||||
135903,False
|
135903,False
|
||||||
|
140003,False
|
||||||
|
140103,False
|
||||||
|
140203,False
|
||||||
|
140303,False
|
||||||
140403,False
|
140403,False
|
||||||
|
140503,False
|
||||||
|
140603,False
|
||||||
|
140703,False
|
||||||
|
140803,False
|
||||||
140903,False
|
140903,False
|
||||||
|
141003,False
|
||||||
|
141103,False
|
||||||
|
141203,False
|
||||||
|
141303,False
|
||||||
141403,False
|
141403,False
|
||||||
|
141503,False
|
||||||
|
141603,False
|
||||||
|
141703,False
|
||||||
|
141803,False
|
||||||
141903,False
|
141903,False
|
||||||
|
142003,False
|
||||||
|
142103,False
|
||||||
|
142203,False
|
||||||
|
142303,False
|
||||||
142403,False
|
142403,False
|
||||||
|
142503,False
|
||||||
|
142603,False
|
||||||
|
142703,False
|
||||||
|
142803,False
|
||||||
142903,False
|
142903,False
|
||||||
|
143003,False
|
||||||
|
143103,False
|
||||||
|
143203,False
|
||||||
|
143303,False
|
||||||
143403,False
|
143403,False
|
||||||
|
143503,False
|
||||||
|
143603,False
|
||||||
|
143703,False
|
||||||
|
143803,False
|
||||||
143903,False
|
143903,False
|
||||||
|
144003,False
|
||||||
|
144103,False
|
||||||
|
144203,False
|
||||||
|
144303,False
|
||||||
144403,False
|
144403,False
|
||||||
|
144503,False
|
||||||
|
144603,False
|
||||||
|
144703,False
|
||||||
|
144803,False
|
||||||
144903,False
|
144903,False
|
||||||
|
145003,False
|
||||||
|
145103,False
|
||||||
|
145203,False
|
||||||
|
145303,False
|
||||||
145403,False
|
145403,False
|
||||||
|
145503,False
|
||||||
|
145603,False
|
||||||
|
145703,False
|
||||||
|
145803,False
|
||||||
145903,False
|
145903,False
|
||||||
|
150003,False
|
||||||
|
150103,False
|
||||||
|
150203,False
|
||||||
|
150303,False
|
||||||
150403,False
|
150403,False
|
||||||
|
150503,False
|
||||||
|
150603,False
|
||||||
|
150703,False
|
||||||
|
150803,False
|
||||||
150903,False
|
150903,False
|
||||||
151403,False
|
151003,False
|
||||||
151903,False
|
|
||||||
|
Reference in New Issue
Block a user