示例#1
0
    def test_behaviour_may_change_with_batch_or_stream_processing_using_euclidean_distance_1(
            self):
        data = [(item.get('x'), item.get('y')) for item in self.sample_1()]

        stream_result = pip(data, 300, distance='euclidean', stream_mode=True)
        batch_result = pip(data, 300, distance='euclidean', stream_mode=False)
        self.assertNotAlmostEqualCurves(stream_result, batch_result)
示例#2
0
    def test_behaviour_may_change_with_batch_or_stream_processing_using_euclidean_distance_3(
            self):
        data = self.sample_3()

        stream_result = pip(data, 300, distance='euclidean', stream_mode=True)
        batch_result = pip(data, 300, distance='euclidean', stream_mode=False)
        self.assertNotAlmostEqualCurves(stream_result, batch_result)
示例#3
0
    def test_result_should_always_be_the_same_for_a_given_input(self):
        data = [(item.get('x'), item.get('y')) for item in self.sample_1()]
        data_length = len(data)

        first_result = pip(data, data_length/10)
        for i in range(3):
            self.assertAlmostEqualCurves(
                self.pip(data, data_length/10), first_result, "Result has changed on iteration {}".format(i+1)
            )
示例#4
0
    def test_result_should_always_be_the_same_for_a_given_input(self):
        data = [(item.get('x'), item.get('y')) for item in self.sample_1()]
        data_length = len(data)

        first_result = pip(data, data_length / 10)
        for i in range(3):
            self.assertAlmostEqualCurves(
                self.pip(data, data_length / 10), first_result,
                "Result has changed on iteration {}".format(i + 1))
示例#5
0
def patterntype(x):
    if x == 1:  # Double Bottom Pattern
        return pip(__PATTERN_DOUBLE_BOTTOM, 7), 7
    if x == 2:  #
        return pip(__CUP_WITH_HANDLE, 7), 7
    if x == 3:  # Scallops Pattern
        return pip(__PATTERN_SCALLOPS, 7), 7
    if x == 4:  # Three Rising Valleys Pattern
        return pip(__THREE_RISING_VALLEYS, 7), 7
    if x == 5:  # Round Bottoms Pattern
        return pip(__ROUNDING_BOTTOMS, 7), 7
    if x == 6:  # Triangles Descending Pattern
        return pip(__TRIANGLES_DESCENDING, 7), 7
    if x == 7:  #
        return pip(__ROUNDING_TOPS, 7), 7
    if x == 8:  #
        return pip(__BUMP_AND_RUN_REVERSAL_BOTTOM, 7), 7
    if x == 9:  # Triple Bottom Pattern
        return pip(__PATTERN_TRIPLE_BOTTOM, 10), 10
    else:  # DEFAULT. exception route
        return None
示例#6
0
def findpattern(p_type, p_low, p_high, period):
    # p_type : pattern type index
    # p_low : low price; it's used to search shcode
    # p_high : high price; it's used to search shcode
    # period : pattern period
    start_time = time.time()

    compare, n = pttype.patterntype(p_type)  # choose pattern by p_type
    rows = shquery.makequerylist(p_low, p_high)  # stock filtering
    print("p_low=", p_low, "와 p_high=", p_high, " 조건에 부합한 종목코드 : ", rows)
    data_array = []
    for row in rows:  # each stock
        tmps = shquery.getstockprice(row)  # get stock data from DB
        temp_array = []  # stock price data
        pip_array = []  # list of found index
        sim_array = []  # list of found index
        i = -1
        for tmp in tmps:  # append data for PIP
            i += 1
            temp_array.append([i, int(tmp['closeprice'])])

        for k in range(0, len(temp_array) - period):  # find relevant index
            result = pip(temp_array[k:k + period], n)
            r_row, p_value = pearsonr(
                numpy.array(result)[:, 1],
                numpy.array(compare)[:, 1])
            if r_row > 0.7:
                print("종목코드 ", row, "에서 index가 ", k, "일 때, 피어슨상관계수 : ", r_row)
                pip_array.append(k)  # k is index
                sim_array.append(r_row)

        # fill data
        if pip_array:
            data_array.append(row)
            data_array.append(pip_array)
            data_array.append(sim_array)

    print("┌기간=", period, "에서 패턴발견 알고리즘 적용결과 리스트 구현")
    for i in range(0, len(data_array)):
        print(data_array[i])
    # measure of running-time
    print("--- processing time : %s seconds ---" % (time.time() - start_time))

    return data_array
示例#7
0
    def test_behaviour_changes_according_to_the_distance_function_used_2(self):
        data = self.sample_2()

        vertical_result = pip(data, 300, distance='vertical')
        euclidean_result = pip(data, 300, distance='euclidean')
        self.assertNotAlmostEqualCurves(vertical_result, euclidean_result)
示例#8
0
    def test_behaviour_changes_according_to_the_distance_function_used_1(self):
        data = [(item.get('x'), item.get('y')) for item in self.sample_1()]

        vertical_result = pip(data, 300, distance='vertical')
        euclidean_result = pip(data, 300, distance='euclidean')
        self.assertNotAlmostEqualCurves(vertical_result, euclidean_result)
示例#9
0
    def test_behaviour_may_change_with_batch_or_stream_processing_using_euclidean_distance_3(self):
        data = self.sample_3()

        stream_result = pip(data, 300, distance='euclidean', stream_mode=True)
        batch_result = pip(data, 300, distance='euclidean', stream_mode=False)
        self.assertNotAlmostEqualCurves(stream_result, batch_result)
示例#10
0
    def test_behaviour_may_change_with_batch_or_stream_processing_using_euclidean_distance_1(self):
        data = [(item.get('x'), item.get('y')) for item in self.sample_1()]

        stream_result = pip(data, 300, distance='euclidean', stream_mode=True)
        batch_result = pip(data, 300, distance='euclidean', stream_mode=False)
        self.assertNotAlmostEqualCurves(stream_result, batch_result)
示例#11
0
def get_pip_dates(df, k):
    return _pip_array_to_dates(df, pip(_pandas_to_xy_array(df), k))
示例#12
0
    def test_behaviour_changes_according_to_the_distance_function_used_1(self):
        data = [(item.get('x'), item.get('y')) for item in self.sample_1()]

        vertical_result = pip(data, 300, distance='vertical')
        euclidean_result = pip(data, 300, distance='euclidean')
        self.assertNotAlmostEqualCurves(vertical_result, euclidean_result)
示例#13
0
    def test_behaviour_changes_according_to_the_distance_function_used_3(self):
        data = self.sample_3()

        vertical_result = pip(data, 300, distance='vertical')
        euclidean_result = pip(data, 300, distance='euclidean')
        self.assertNotAlmostEqualCurves(vertical_result, euclidean_result)
示例#14
0
# Fetch
rows = cursor.fetchall()
i = -1
array = []
graph = []
for row in rows:
    #print(row)
    i = i + 1
    #print(pip([i, int(row['closeprice'])], 5))
    #print([i, int(row['closeprice'])])
    array.append([i, int(row['closeprice'])])
    graph.append(int(row['closeprice']))
#print(array)

# Perceptually Important Points
result = pip(array, 7)
print(result)
plt.plot(graph)

# Perceptually Important Points
index = []
data = []
for idx in result:
    i = i + 1
    index.append(idx[0])
    data.append(idx[1])
#index = [0,43,101,174,339,456,499]
#data = [5500, 6470, 9870, 7080, 10800, 7280, 7950]
plt.plot(index, data)
plt.grid(True)
plt.show()
示例#15
0
graph_array = []
sample_array = [[0, 8000], [1, 4000], [2, 4000], [3, 8000], [4, 4000],
                [5, 4000], [6, 8000]]  # Double Bottom graph
#sample_array = [[0, 8000], [1, 5500], [2, 6500], [3, 5500], [4, 6000], [5, 5000], [6, 4000]]    # Triangles,Descending, up breakout (6)
#sample_array = [[0, 6000], [1, 5500], [2, 6500], [3, 6000], [4, 7000], [5, 6500], [6, 8000]]    # Three Rising Valleys, up breakout (4)
#sample_array = [[0, 8000], [1, 6000], [2, 5500], [3, 5000], [4, 5500], [5, 6000], [6, 8000]]    # Rounding Bottoms, up breakout (5) 그림이 좀 이상...
#sample_array = [[0, 4000], [1, 5250], [2, 6500], [3, 5000], [4,6500], [5, 6000], [6, 7500]]    # Cup with Handle
#sample_array = [[0, 4000], [1, 4700], [2, 5400], [3, 6000], [4,5400], [5, 4700], [6, 7000]]    # Rounding Tops
#sample_array = [[0, 6000], [1, 6500], [2, 6000], [3, 6250], [4,5000], [5, 6250], [6, 6000]]    # Bump-and-Run Reversal Bottoms

for row in rows:
    i += 1
    graph_array.append([i, int(row['closeprice'])])  # append data for PIP

# Find Pattern using pearson correlation coefficient
sample = pip(sample_array, 7)
plt.plot(numpy.array(sample)[:, 0],
         numpy.array(sample)[:, 1])  # plot result of sample pip
# plt.show()

pip_array = []  # list of found index
for k in range(0, len(graph_array) - 30):
    result = pip(graph_array[k:k + 30], 7)
    a = numpy.array(result)  # print(a[:, 1])
    r_row, p_value = pearsonr(
        numpy.array(result)[:, 1],
        numpy.array(sample)[:, 1])
    if r_row > 0.7:
        print("종목코드 ", shcode, "에서 index가 ", k, "일 때, 피어슨상관계수 : ", r_row)
        print(rows[k])
        pip_array.append(k)
示例#16
0
import pymysql
from fastpip import pip

import mysqlinfo

# Open database connection
myhost, myport, myuser, mypassword, mydb, mycharset = mysqlinfo.getmysqlinfo()
conn = pymysql.connect(host=myhost, port=myport, user=myuser, password=mypassword, db=mydb, charset=mycharset)

# prepare a cursor object using cursor() method
cursor = conn.cursor()

# execute SQL query using execute() method.
sql = "SELECT * FROM stockprice WHERE shcode='000020'"
cursor.execute(sql)

# Fetch a single row using fetchone() method.
rows = cursor.fetchall()
# print(rows)       # total rows
# print(rows[0])    # first row
# print(rows[1])    # second row
i = -1
for row in rows:
    print(row)
    i = i + 1
    print(pip([i,int(row['closeprice'])], 5))

# disconnect from server
conn.close()