vostock.kr 안드로이드용 앱이 출시가 되었습니다. 

 

아래 구글플레이에서 다운로드 받을 수 있습니다.

 

VoStock #비오스탁 #주식투자정보제공 - Google Play 앱

VoStock은 재무지표/보조지표를 통해 주식투자에 유용한 정보를 제공합니다.

play.google.com

 

5월 18일에 등록 신청했는데 이제서야 통과가 됐네요. 약 7일 걸렸습니다.

앱에서 따로 권한을 요구하는 건 없으니 주식 투자에 관심 있으신 분들은 다운 받으셔서 이용 해 보시면 감사하겠습니다. (앱에 광고는 포함되어 있습니다. 앱사용시 불편함이 없도록 최소한으로 제한 했습니다)

랩 로고입니다^^ (여친님께서 손으로 그려주셨습니다)

 

 

구글플레이에서 검색

vostock 또는 비오스탁으로 검색하면 나옵니다.  

오전에는 4번째에 있었는데. 지금은 두번째에 있네요
다운로드 2건!! ?

 

다음 글에서는

웹뷰를 이용하여 구글플레이 배포용으로 앱을 만드는 방법을 적어볼까합니다.

감사합니다.

 

 

4월부터 vostock.kr 사이트를  업그레이드 진행할려고..

아니.. 새로 뜯어 고치기로  마음먹고 주말마다 꽤 시간을 투자해서 현재 버전까지 완성했습니다. 완성이란 단어가 맘에 들지는 않지만 1차는 끝났다는 그런 느낌이 듭니다..

 

웹개발은 전무하기 때문에.. 나름대로 안풀릴때는 상당히 애를 먹기도 한것 같습니다.. 일단 만들고 모르는것은 구글링.. 만들다 보니 새로운 것도 알게 되고 짜논 코드에 대해서도 조금씩 이해가 되고.. 보람도 있는 것 같습니다.

 

웹 화면
스맛폰 화면

react로 개발해서 그런지 몰라도 아니면 제가쓴 ui 라이브러리 때문인지는 몰라도 스마트폰에 꽤 미려하게 나오는 것 같습니다. 그래서 생각이 든게 이걸 바로 앱으로 출시 해도 되겠다는 생각이 들어 내친김에 안드로이드 버전으로 앱 출시까지 진행했습니다. 예전에 구글 개발자로 등록비 내고 등록했었었는데.. 또 내라고 하는거 보니.. 라이센스 정책이 바뀐건지 모르겠지만.. 먼저 25불 결제하고 등록완료 후에 안드로이드 스튜디오 다운 받았습니다.

 

보통 앱 개발 완료하고 25불 결제하는게 보통 순서일 수도 있을 것 같은데.. 일단 지르고 보는... 되든 안되든 25불은 날아갔으니.. 그러므로 무조껀 만들어서 등록하게끔 심리압박을 스스로에게 주는 것일 지도..

 

첨으로 웹앱을 출시해봤는데 생각보다 의외로 간단하게 끝나서 다행이다고 생각됩니다.

 

 

출시 검토중...

현재는 심사중이고... 이변이 없으면 내일쯤 ?  구글 스토어에서 vostock 이라고 검색해서 다운 받으시면 좀더 편하게 사이트를 이용 하실 수 있을 것 같습니다.

항상 이변은... 발생하는 것이겠지만..

 

사이트의 데이터에는 오류가 있을 수 있으니, 다른 방면으로도 정보를 잘 찾아보시고 확인도 잘 해주시길 바랍니다.

사이트 오류에 대한 피드백은 환영입니다.

 

저 또한 틈틈히 또 새로운 기능이라던지 아이디어를 바탕으로 사이트에 녹여보도록 하겠습니다.

여러분 성투 하시길 바라겠습니다. ^^

사이트를 만들고 한동안 고민이었던게 네비게이션바의 메뉴를 누르고 상태가 활성화 된 상태에서 F5를 누르면 다시 초기화가 되는 현상을 어떻게 하면 해결할 수 있나 하는 거였는데, 

 

state 를 사용하면 된다는데 일단 여러가지로 알아본 결과 젤 간단한 방법을 찾아서 적용했고 결과는 Ok

 

웹쪽 개발은 전무하기 때문에... 일단 닥치는 대로 만들고.. 만들고 하다보면서 기반 기술을 조금씩 익혀가는..

어쨓든 실전이라 생각하고 결과물을 만들어 내고 부딪히고 깨지면서 하나씩 알아가는 즐거움도 있는 것 같다.

 

sessionStorage 를 사용하는 것인데, localStorage 라는 것도 있다. 이 둘의 차이는 구글링을 해서 알아보면 되고.

sessionStorage 는 키, 벨류로 사용한다.

 

sessionStorage.setItem('key', value);

sessionStorage.getItem('key');

 

아래는 실제로 사용했던 코드 일부로 설명

 

메뉴의 섹션 정보를 만들고

const sections = [

    { key:'1', title: 'Home', url: '/' },

    { key:'2', title: '재무분석', url: '/jaemuratio' },

]

 

메뉴버튼을 클릭하면 'menu'라는 키에 값을 저장해둠

    menuClick(title) {

        sessionStorage.setItem('menu', title);

    };

 

메뉴 구성은 아래와 같다. 메뉴클릭 함수에 해당 메뉴의 키를 전달한다

<Menu.Item key="1">

     <Link to={sections[0].url} onClick={() => this.menuClick(sections[0].key)} />

     <span>{sections[0].title}</span>

 </Menu.Item>

 

컴포넌트의 컨스트럭터에 최초에는 메뉴가 선택이 안되어 있기 때문에 강제로 1번(home) 을 보여주고 값이 설정되어 있으면 마지막에 저장되어 있는 값을 꺼내온다.

constructor(props) {

        super(props);

        let item = sessionStorage.getItem('menu');

        if(item === null)

        {

          sessionStorage.setItem('menu''1');

        }

    };

class App extends Component {

  componentDidMount() {
    document.title = "VoCoin";
  }

}

 

또는

public 폴더 아래에 index.html 직접 수정

 

<title>VoCoin</title>

1. pg_dump 가 어디에 있는지 확인

 

# find / -name pg_dump
/usr/pgsql-11/bin/pg_dump
/usr/bin/pg_dump

 

2. postgres 11버전을 사용하기에

 

# /usr/pgsql-11/bin/pg_dump -U [user] -Fp -f [filename] [dbname] -t [tablename]

 

 

3. 다시 복구 할때  

# su - postgres

4. 덤프파일이 있는 곳으로 이동후

# psql -f [filename] [dbname]

In my case..

 

회사에서 서비스하고 있는 앱에 수정 사항이 생겨서 기능을 추가하여 오랜만에 플레이 스토어에 등록했는데 안전하지 않은 TrustManager 구현 ~~ 어쩌고저쩌고.. 오류로 심사 거부가 발생했다.

 

앱 전문으로 개발하는게 아니라.. 당황했지만  developers.android.com 힘을 빌어 'HTTPS 및 SSL을 사용한 보안' 으로 검색하면 가이드가 나온다.

 

일단 회사에서는 잘알려진 발급기관의 인즈서CA를 쓰고 있기 때문에 가이드에 있는데로 구현하고, 일부는 구글링 해서 간단하게 래핑 클래스를 작성하였다.

 

/**
 * The Class HttpHelper.
 * Http 핼퍼 클래스
 */
public class HttpHelper2 {

	/**
	 * Instantiates a new http helper.
	 */
	public HttpHelper2() {
	}

	public String requestHttp(String sUrl, Map<String, Object> params) throws IOException {
		URL url = new URL(sUrl);
		StringBuilder postdata = new StringBuilder();
		for (Map.Entry<String, Object> param : params.entrySet()) {
			if(postdata.length() != 0) postdata.append('&');
			postdata.append(URLEncoder.encode(param.getKey(), "UTF-8"));
			postdata.append('=');
			postdata.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
		}
		byte[] postDataBytes = postdata.toString().getBytes("UTF-8");

		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
		conn.setDoOutput(true);
		conn.getOutputStream().write(postDataBytes);
		BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

		StringBuilder sbRecv = new StringBuilder();
		String sLine;
		while((sLine = in.readLine()) != null) {
			System.out.println(sLine);
			sbRecv.append(sLine);
		}
		in.close();
		return sbRecv.toString();
	}
}

//가져다 쓸때
public class RegistTask extends AsyncTask<String, Integer, String> {
  protected String doInBackground(String... params) {
    String url = "https://yoursite";

    HttpHelper2 httpHelper = new HttpHelper2();
    Map<String, Object> postdata = new LinkedHashMap<>();
    postdata.put("tag", CommonPreference.TAG_REGISTER);
    postdata.put("email", email);
    postdata.put("regid", regid);
    postdata.put("mobile_desc", model);
    try {
    recvbuf = httpHelper.requestHttp(url, postdata);
    } catch (IOException e) {
    e.printStackTrace();
    }
  	return recvbuf;       
  }
}

그간 회사업무 / 새로운 개인 취미 프로젝트(VoCoin) 등으로 VoStock.kr 에 많은 신경을 못썼습니다.

 

제 사이트의 오류를 리포팅 해주시는 분들이 계셔서 다행스럽고 고맙게 생각하고 있습니다.

 

(개발자의 마인드.. 버그는 무조껀 때려잡는다.!)

 

현재 제가 살며시 살펴보니, 특이테마의 데이터가 정상적으로 수집이 안되고 있는 것 같습니다.

아직 코드를 살펴보진 않아서 .. 일단 증권사의 API를 사용하는 것이기 때문에 곧 업그레이드 프로젝트를 착수 하게 되면 새로 손볼 예정입니다.

 

일단 수집단을 다시 재정비해서 개선할 예정이고, 웹은 vocoin.kr 에서 사용한 것처럼 react를 사용할 예정입니다.

(vostock.kr은 제 손때가 묻은.. html 날코딩이 대부분이었던..ㅠ)

그리고, 시스템 트레이딩을 적용할 예정입니다. (vocoin.kr과 유사)

 

언제 시작할 지는 모르지만 4~5월 중으로 시작할 예정입니다.

 

누군가 제게 얘기했듯이,

 

훗날 경제적 자유를 위해 저도 노력하고 여러분들에게도 도움이 되는 싸이트가 되었으면 합니다.

http://vocoin.kr 

 

VoCoin

 

vocoin.kr

 

  • v0.1 베타 버전 배포
  • 2021-04-18
  • 사이트 구축(개발용)
  • 2021-04-16
  • 전략 적용 및 검증 기능 개발
  • 2021-04-16
  • 코인 지수 차트 개발
  • 2021-04-10
  • 개발 시작
  • 2021-04-??
  • 개발 스택 선정(front:react, back:nginx+djangorest, collector:python, db:postgres)

 

* 코로나 시대에 하고 싶은 취미들도 제대로 못하고 매일 회사/집/회사/집 하던 중에... 코인에 관심을 가지게 되어 손매매를 잠깐 하다가 API를 제공한다는걸 알고 흥미를 가지게 되었고 여기까지 오게 되었습니다.

 

* 직업이 개발자이고, 자매품 vostock.kr 을 한번 만들어 봤기 때문에 약간의 수월함은 있을지 몰라도 개인적으로 하는 프로젝트 이기 때문에 새로운 기술도 사용해보고 싶기도 하고 해서 퇴근하고 3~4시간씩 주말은 올인 해서 약 3~4주, 원래 c,c++개발자라 웹개발은 1도 모르는 상태에서 꾸역꾸역 오픈을 하게 되었습니다.

 

서버는 대부분 클라우드를 사용했고, 데이터 수집단만 집에 windows os가 깔려있는 미니 피씨에다가 돌려놨습니다. 최대한 무중단 서비스를 해볼려고 개발서버, 운영서버를 분리했습니다.

클라우드 서버리스트 (vultr)

서버는 젤 싼게 한달에 5달러 정도 됩니다. 관심 있으신 분은 홈페이지로 직접 방문해서 서버 구독해도 되고, 아니면 아래 링크인 친구 추천으로 들어오시면 테스트 플랫폼을 쓸수 있는100$를 제공한다고 합니다. 

www.vultr.com/?ref=8596087-6G

 

SSD VPS Servers, Cloud Servers and Cloud Hosting by Vultr

Vultr Global Cloud Hosting - Brilliantly Fast SSD VPS Cloud Servers. 100% KVM Virtualization

www.vultr.com

 

최종적으로 구성된 시스템은 아래와 같습니다만, 초반에 톰켓에다가도 해보고, 아파치도 깔아보고,  nginx에서 rest api 연결문제등 개발한거 못지 않게 구성때문에 애를 좀 먹었습니다. 나중에 기회가 된다면 제가 구성한 방법을 자세히 써보는 시간도 가져보도록 하겠습니다.

 

* 프론트 : react + 웹서버 : nginx 간 연동

* nginx <-> restful API 서버(django)

* db : postgres

* 수집 데몬 : python 

 

사이트는 아래의 메뉴로 이루어져 있습니다.

Index : 코인지수 차트 및 수집된 데이터 (비트코인 + 알트코인) 

Lab : 전략에 의해서 검출된 마켓 표시

Verify : 전략 검증

Simulation : 사고/팔고 해서 보유하고 있는 가상의 잔고

Guest : 방명록

 

사이트의 내용은 앞으로도 바뀔 수도 있고 또 오류가 있을 수 있습니다. 

저도 계속 연구 해보고 여러분들에게도 좋은 정보를 제공 하는 사이트가 되었으면 합니다.

 

아울러 제 패밀리 사이트 : vostock.kr 도 한번씩 방문해 주시면 감사하겠습니다. (추후 데이터 수집 데몬과 웹사이트를 더 좋게 새로 개발할 예정입니다.)

 

<Menu.Item key="1">

<Link to="/" onClick={this.menuClick("Home")}/>

<span>Home</span>

</Menu.Item>

 

onclick 함수 사용시 다음과 같은 에러를 만날때.

 

Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops

 

# 인자가 있는 경우에

 

<Link to="/" onClick={() => this.menuClick("Home")}/>

 

# 인자를 사용하지 않는 경우

 

<Link to="/" onClick={this.menuClick}/>

isinstance 함수 사용

 

##! @brief 어떤 함수 
def some_fn(self, marketl)
    # 항상 스트링 변수가 넘어오는줄 알았는데 tuple 타입으로 넘어오는 경우가 발생
    if isinstance(market, tuple):
        market = market[0]
        # som process ~~~~

 

운영하고 있는 vostock.kr 에 나오는 종목들의 조건 검색식 입니다.

좋은 아이디어 있으시면 언제든지 댓글 환영 합니다. 

감사합니다.

조건 검색식 설명

MACD돌파


제외종목 [정리매매,관리,거래정지,환기]
신용잔고율 0 ~ 10%
분기결산 0기전 부채비율 자본잠식 제외
분기결산 0기전 부채비율 400% 이하
분기결산 0기전 영업이익률 1% 이상
분기결산 0기전 영업이익 전년동기대비 증가율 1% 이상
5봉 평균 거래량 50,000주 이상
MACD[12,26,9] 0선 상향 돌파 또는 MACD Histogram[12,26,9] 0선 상향 돌파

 

60추세


제외종목 [정리매매,관리,거래정지,환기]
분기결산 0기전 부채비율 자본잠식 제외
분기결산 0기전 부채비율 300% 이하
연간결산 0기전 영업이익률 1% 이상
연간결산 0기전 순이익증가율 1% 이상
연간결산 0기전 매출액증가율 1% 이상
연간결산 0기전 영업이익증가율 1% 이상
5봉 평균 거래량 50,000주 이상
5봉 이내에 종가를 60 단순이평이 95% ~ 105% 범위에서 지지

 

210추세


제외종목 [정리매매,관리,거래정지,환기]
분기결산 0기전 부채비율 자본잠식 제외
분기결산 0기전 부채비율 300% 이하
연간결산 0기전 영업이익률 1% 이상
연간결산 0기전 순이익증가율 1% 이상
연간결산 0기전 매출액증가율 1% 이상
연간결산 0기전 영업이익증가율 1% 이상
5봉 평균 거래량 50,000주 이상
5봉 이내에 종가를 210 단순이평이 95% ~ 105% 범위에서 지지

 

순이익흑전


제외종목 [정리매매,관리,거래정지,환기]
신용잔고율 0 ~ 10%
분기결산 0기전 부채비율 자본잠식 제외
분기결산 0기전 부채비율 300% 이하
분기결산 0기전 순이익 흑자전환
분기결산 0기전 영업이익 적자지속 제외
현재가 기준 시가총액 500억 이상
5봉 평균 거래량 50,000주 이상

 

성장주


제외종목 [정리매매,관리,거래정지,환기]
분기결산 0기전 부채비율 자본잠식 제외
연간결산 0기전 매출액증가율 15% 이상
연간결산 0기전 순이익증가율 20% 이상
연간결산 0기전 영업이익증가율 20% 이상
연간결산 0기전 자기자본증가율 20% 이상

 

우량주_KSKIM


제외종목 [정리매매,관리,거래정지,환기]
분기결산 0기전 부채비율 자본잠식 제외
연간결산 0기전 매출액증가율 10% 이상
연간결산 0기전 영업이익률 20% 이상
연간결산 0기전 자기자본이익률 20% 이상

 

백억+상승50_KSKIM


제외종목 [정리매매,관리,거래정지,환기]
분기결산 0기전 부채비율 자본잠식 제외
분기결산 0기전 부채비율 300% 이하
0봉전 거래대금 100억 이상
등락률 상위 50종목

 

***.py 에서 html 템플릿으로 딕셔너리 데이타를 넘길때,  혹은 json 형태로 데이터 셋을 받았을때,

 

html 태그를 인식하게 해서 웹화면에 표현하고자 한다면 오토이스케이프를 쓰자.

 

{% autoescape off %}
   {% for key, val in conds.items %}

      ~~~ 내용 ~~~
   {% endfor %}
{% endautoescape %}

import multiprocessing as mp
import time
from time import sleep


def foo(q, id):
    while q.empty() == False:
        print ("%s %s" % (id, q.get()))

        for i in range(1, 5):
            sleep(0.1)

        sleep(0.01)

if __name__ == '__main__':
    mp.set_start_method('spawn')
    q = mp.Queue()
    stime = time.time()
    q.put('001')
    q.put('002')
    q.put('003')
    q.put('004')
    q.put('005')
    q.put('006')
    q.put('007')
    q.put('008')
    q.put('009')
    q.put('010')

    MAX_PROCESS = 20
    p = None
    for i in range (0, MAX_PROCESS):
        p = mp.Process(target=foo, args=(q, i))
        p.start()

    for i in range(0, MAX_PROCESS):
        p.join()

    etime  = time.time()
    print("%s seconds" % (etime - stime))

Version 1.0.2.0

 

2021.01.16

 - 네이버 상품수 검색 결과가 나오지 않던 문제 수정

 - Slow 체크박스 추가
   멀티스레드로 상품수 조회시 적은 건수는 상관없지만 2~300건 이상 조회시 페이지 요청 거부 제한에 걸림

   Slow 체크시 단일 스레드로 순차적으로 상품수 조회

 

 

NePanKing_1.0.2.0.msi
1.08MB

 

 

[네판왕] 네이버 광고 키워드 검색량 무료 프로그램 재소개

후원 여부 상관 없이 상품수 검색 결과 수를 제한을 없앴습니다. 프로그램 설치 하면 상품수 조회를 제약 없이 사용 하실 수 있습니다. 필요하신분들은 많이 이용해 주시고 댓글도 남겨주시면

ososoi.tistory.com

 

지난 조건 검색식 입니다.  박제 차원에서 기록 합니다.

 

다분히 기본적인 조건검색만 사용하고 있고, 디테일 하고 고급 검색식은 사용 할 줄 모릅니다. ㅠ

 

저는 증권사 두개를 이용중인데요. 하나는 이베스트 증권이고 다른 하나는 키움 증권입니다.

 

키움 증권이야 워낙 많이들 사용하시고, 이베스트 증권은 증권API 를 주로 사용하고 있습니다. 

 

Xing-API라고 불리죠.

 

이베스트에서는 조건검색을 e종목검색이라고 부릅니다.

 

저의 e종목검색의 기준은 기본적으로 공통으로 깔고 가는게 있고 거기서 각각 추가되는 조건식으로 카테고리를 나누었습니다.

 

기본적으로 들어가는 조건식 조건입니다.

 


a) 정리매매, 관리, 거래정지, 환기 종목 제외

b) 신용잔고율 10% 이하

c) 연간 결산 0기전 기준 순이익 증가율 3% 이상

d) 분기 결산 0기전 기준 순이익 증가율 3% 이상

e) 연간 결산 0기전 기준 영업이익증가율 증가율 3% 이상

f) 분기 결산 0기전 기준 영업이익증가율 증가율 3% 이상

g) 연간 결산 0기전 기준 부채비율 300% 이하

g) 분기 결산 0기전 기준 부채비율 300% 이하

h) 연간 결산 0기전 기준 유동비율 80% 이상

i) 분기 결산 0기전 기준 유동비율 80% 이상

 

 

그리고, 총 4가지 전략으로 나누어져 있는데요.

 

 

1. 20이평 근접

 

2. 기관외인 입질

 

3. 볼린저밴드 하단

 

4. 거래량 수상

 

 

1. 20이평 근접의 추가조건은 아래와 같습니다.

 

  < 종가기준 단순 20이평 대비 종가 등락율이 -3% ~ 3% 사이 > 

 

2. 기관외인 입질의 추가조건은 아래 두개 OR 조건입니다.

 

   < 10일 기관 기간 누적 순매수 금액이 1억 이상 >

   < 10일 외국인 기간 누적 순매수 금액이 1억 이상 >

 

3. 볼란저밴드 하단 추가조건은

 

  < 1봉전 기준 10봉 이내, Bollinger Bands 종가가 하한선을 -3% ~ 3% 이내 근접 >

 

4. 거래량 수상 추가조건은 제가 제일 좋아하는 조건이기도 한데요

 

  < 20봉 이내, 2~이상 발생, 1봉전 거래량 대비 0봉전 거래량 변동율이 300% 이상 >

 


위의 조건들을 토대로 해서 나온 결과가 조건검색검출 종목 메뉴의 일자별 종목 리스트 입니다.

 

계속해서 보완해 나가고 검출 결과 화면도 차근차근 손을 봐야 할 것 같습니다.



출처: https://ososoi.tistory.com/74?category=915962 [ososoi]

+ Recent posts