소프트웨어 개발/Python

파이썬 코드

늘근이 2015. 4. 26. 17:59

코드는 상당히 쉽다. 그냥 맞춰서 잘 넣으면 된다. 다만 문제는 굉장히 느리다는 것이다. 

파이썬이 느리다는 사실을 말만 들었지, 생각보다 상당히 느려서 아무래도 실제 자동매매 프로그램을 개발할때는 C로 개발을 하여야 할듯 하다.


코드는 다음과 같다.


views.py



def calc(request):

tpl = loader.get_template('list.html')

beg = datetime.datetime(2010,1,1)

end = datetime.datetime(2015,4,1)

data = web.DataReader("030200.KS","yahoo",beg,end) # Samsung Electronics

data['mean5'] = panda.stats.moments.rolling_mean(data['Adj Close'], 5)

data['mean10'] = panda.stats.moments.rolling_mean(data['Adj Close'], 10)

data['mean20'] = panda.stats.moments.rolling_mean(data['Adj Close'], 20)

data['mean60'] = panda.stats.moments.rolling_mean(data['Adj Close'], 60)

data['mean120'] = panda.stats.moments.rolling_mean(data['Adj Close'], 120)

data['diff'] = data['mean5']-data['mean120']

data['status'] = ""

data['cash'] = 0

# data['stock'] = 0

data['asset'] = 0



i = 0 # loop initial value

cash = 0

stock = 0

asset = 0

flag = 0 # 0-maintain 1-buy 2-sell

temp = 0


while i < len(data):

val = data['diff'].ix[i] * temp 


if val < 0 and temp > 0:

flag = 1

elif val < 0 and temp <= 0 :

flag = 2

else :

flag = 0


if flag == 1 :

data['status'].ix[i] = 'YES'


cash = cash - data['Adj Close'].ix[i] # buying stock, 

# stock = stock + data['Adj Close'].ix[i] # buying stock, 

elif flag == 2: 

data['status'].ix[i] = 'NO'


cash = cash + data['Adj Close'].ix[i] # selling stock, 

# stock = stock - data['Adj Close'].ix[i] # selling stock, 

else :

data['status'].ix[i] = 'X'


#adjusting data

data['cash'].ix[i] = cash

asset = cash + data['Adj Close'].ix[i]

data['asset'].ix[i] = asset 

# data['stock'].ix[i] = stock 

temp = data['diff'].ix[i]

i = i + 1 # no iterator, thus manual index increasing


h = data.to_html(escape=False)

ctx = Context({'data' : data,  'htmlData' : h})



return HttpResponse(tpl.render(ctx)) 



list.html

파이썬 템플릿으로 완성되어있다.



 

{% if not data.empty %}

    <ul>

    {% for row in data %}

        <li><a href="#">{{ row }}</a></li>

        

    {% endfor %}

    </ul>

{% else %}

    <p>No data received</p>

{% endif %}



{% block content %}

{{htmlData|safe}}


{% endblock %}



데이터를 to_html 펑션을 써서 바로 테이블로 보내주기 때문에 결국에 html에서 할일은 굉장히 간단하다. 

그냥 {{htmlData}} 라는 표현식으로 써주는 것이다. 다만 이렇게만 쓴다면 주석처리가 되어서 실제로 브라우저는 태그를 그대로 출력하게 되는데, 이러한 이유로 |safe 라는 조건을 붙여주게 된다. 




'소프트웨어 개발 > Python' 카테고리의 다른 글

Django 웹소켓, Redis 구축  (0) 2015.04.27
성능 튜닝  (0) 2015.04.26
Django 구조 파악하기  (0) 2015.04.25
Django 를 이용해 웹에 데이터 뿌려주기  (0) 2015.04.22
Django 윈도우 설치  (0) 2015.04.22