현재 트레이딩 세션

마지막 업데이트: 2022년 5월 13일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
OAuth2UserService 구현체

코딩하는 흑구

Spring AOP를 활용하여 서비스 로직의 시간 체크하는 @Annotation 만들기

  • 코딩하는흑구
  • 웹 개발/Spring Boot
  • 2022. 4. 11. 01:50

안녕하세요. 저는 현재 java/spring 환경에서 upbit API를 활용하여 트레이딩 시스템을 개발하고 있습니다.

트레이딩 시스템은 현재 1차 배포까지 완성이 되어 트레이딩을 진행하고 있으며, 그간에 있었던 내용중 공유하고자 하는 내용이 있어 글을 작성합니다.

현재 트레이딩 시스템의 가장 주요한 난제는 알고리즘 최적화입니다.

적절한 알고리즘에 따라 필요하지 않은 로직은 수행하지 않고 시간을 많이 잡아먹는 로직, 혹은 코인에 대해 트래킹이 필요하고 왜 그랬는지 대처를 해야 좀더 적절한 대응이 가능하게 됩니다.

그 중 가장 기본은 각 코인당 발생하는 동일한 service를 태웠을 때 허용 가능한 시간동안의 로직을 수행했느냐를 체크하는 것이 필요했습니다.

사실 굉장히 간단합니다. @Retention 어노테이션은 해당 어노테이션을 런타임까지 가져가기 위해(aop를 활용하기 위해서는 필수입니다.) 설정해놓고, @Target은 메소드 상단에 어노테이션을 활용할 것이기 때문에 METHOD로 두었습니다.

이는 아래와 같이 활용합니다.

그럼 스프링이 해당 annotion을 어떻게 읽어서 로직의 시간을 측정할 수 있을까요? 단순 현재 트레이딩 세션 어노테이션 클래스만 만들면 되는 걸까요??

결론만 말씀드리자면 bean 프록시의 참조에 의해서 호출될 때, 해당 어노테이션을 인식하기만 하면 됩니다. @Transactional 어노테이션을 사용할 때랑 비슷합니다.

저는 아래와 같이 어노테이션을 활용하였습니다.

@Around 어노테이션을 통해 @TimeCheck 어노테이션의 시작과 끝지점을 제어할 수 있고 ProceedingJoinPoint 객체에 의해 서비스 로직의 호출을 원하는 시점에 통제할 수 있습니다.

따라서 단순히 어떤 큰 틀같은 바구니 안에 로직을 넣는다로 이해하면 좋을 것 같습니다.

일단 오늘은 예제만 간단히 소개하였고 aop에 대한 코드는 별도로 까보는 시간을 가져보겠습니다. bean 프록시에 참조에 의한 호출이면 어떤 서비스 로직이던 측정할 수 있으니 AOP라는 이름에 겁을 먹거나 귀찮아할 필요는 없을 것 같습니다.

Premium Contents

오늘은 트레이딩 오라클 채널의 방향성과 더불어 7~8월달(아마 8월) 정도에 개설 예정인 추가 채널에 대한 소개와 운영 계획에 대해 설명해 드리려합니다.

현재 트레이딩 오라클 채널에서는 가상화폐 현물[업비트], 가상화폐 선물[바이낸스, 바이빗]을 메인으로해서 관련된 투자 노하우나 매매법등을 제작, 검증 과정을 거치고 알려드리고 있습니다. (매매법은 선물, 현물 각각 A,B,C이런식으로 알파벳을 붙여 구분짓고 있으며 Z까지 제작할 계획입니다.)

채널을 운영하는 중에 간간이 추가 채널에 대해 언질을 드렸습니다. 추가 채널을 개설할 수 있는 조건중 채널 개설후 6개월이라는 조건이 2개월정도 남았네요:) 추가 채널은 해외선물을 주제로 진행하고 기존 트레이딩 오라클 채널에서도 해외 선물을 일정 비율 다룰 예정입니다.

비트코인 선물과 비교한다면 해외선물은 명확한 장단점을 가지고 있습니다. 비트코인 선물과 해외선물을 비교해 보겠습니다.

매매 난이도에 대해서는 드릴 말씀이 많습니다. 트레이딩 관련 커뮤니티에서도 종종 논쟁이 일어나는 주제인데요. 대부분 논쟁의 결론은 해외선물이 어렵다는 쪽으로 갑니다. 실제로 장중 시나리오 매매를 기준으로 봤을때는 특유의 개장 이후 변동성 때문에 해외선물 난이도가 있는건 사실입니다. 비트코인도 가끔 상 하방으로 빔이 나올때가 있지만 개장의 개념이 없기에 빔을 쏘는 경우가 흔하진 않습니다.

하지만 제 생각은 각각의 난이도는 매매시간에 따라 케바케라고 봅니다. 이유를 설명하겠습니다.

각각이 확실한 바운더리가 있는건 아니지만 매매시간에 따른 방식을 초단타 현재 트레이딩 세션 [포지션 유지 5분 이내], 단타 [포지션 유지 1시간 이내], 스윙 [1~3일 포지션 유지],중장기[1주일~수개월]로 놓고 보겠습니다.

결론부터 말씀드리면 초단타= [확실하게] 해외선물이 유리, 단타= 비트코인 선물이 유리, 스윙= 비트코인선물이 근소우위, 중장기= 둘다 비추천 입니다.

일단 초단타부터 보겠습니다. 초단타를 하는 경우는 대부분 하루 매매시간이 1시간 ~2시간 정도로 제한적인 분들일 겁니다.

비트코인 차트의 저녁 9시 30분 부터 저녁 11시까지의 차트입니다. 물론 이날 워낙 변동성이 없긴 했지만 그렇다 하더라도 위아래 변동폭이 1시간 반 동안 위아래 변동폭이 0.4%밖에 되지 않습니다. 시장가 진입+ 스탑로스 사용이라 한다면 수수료만 0.08%를 사용하는건데요. 위의 0.4% 변동폭을 정수리 부터 발바닥까지 먹는다고 치더라도 그중 0.08%를 수수료로 낸다는건 수치상에 문제가 큽니다. 에라 익절한폭의 1/5가량을 수수료로 내는 거기에 손익비적으로 문제가 생깁니다. 저 0.4% 중 0.2%만 익절했다로 쳐보면 더 심하죠. 0.2% 익절분 중에서 0.08%를 수수료로 내야하니 익절폭의 절반을 가져가는 수준입니다. 이 문제 때문에 직장인분들 중에서도 매매시간의 제약이 큰 분들은 어려움이 많으셨습니다.

반면에 해외선물의 수수료는 고정분이고 변동성이 들어오는 시간이 개장시간으로 확실합니다. 키움증권을 기준으로 마이크로 왕복 수수료는 2달러입니다. [상시 이벤트 중이라 감면한 수치] 만일 마이크로 나스닥에서 손절을 40틱 익절을 50틱정도로 1:1.2 수준의 유사 1:1로 잡았다고 가정해봅시다. 마이크로 나스닥의 틱가치는 틱당 현재 트레이딩 세션 0.5$입니다. 수수료를 포함해 계산한다면 손절은 22$ 익절은 23$로 여전히 손익비가 1:1 언저리 입니다.

비트코인 선물에서 0.2% 익절인 부분에서 손익비를 1:1.2 수준으로 동일하게 잡았다고 한다면 에라 수수료를 포함한 실 손익비는 3:1로 역손익비가 나오게 됩니다. 항상 방향성이 존재하는게 아니고 내가 매매하는 시간에 변동성이 들어온다는 보장이 없으니 힘들게 됩니다.

단타의 경우에는 매매시간이 최소 3시간 정도는 있는 분들일 겁니다. 대부분의 직장인분들은 매매시간의 특성 때문에 하루안에 매매를 끝내는걸 좋아하는 성격이라면 초단타나 하루 한번 혹은 두번정도의 단타를 선호하긴 합니다. 단타의 경우에는 초단타보다는 현재 트레이딩 세션 길게 먹는 경향이 크기에 장중 해외선물 보다는 비트코인이 난이도가 쉽고 초단타보다는 길게 먹을 수 있기에 위의 수수료 문제에서 어느정도 자유롭습니다.

현재 트레이딩 오라클에서 다루고 있는 선물 매매법 B 리뉴얼도 마찬가지로 1시간 이내에 하루에 타점이 나오면 1~2번정도 진입해 매매를 끝내는 단타 매매법입니다. [다른 초단기 선물 매매법 보다는 수수료 문제에서 자유로움]

스윙, 중장기는 중요한 비교항목이 아니니 생략하겠습니다.

비트코인 선물은 많은 분들이 아시는 바와 같이 만원만 있어도 매매가 가능합니다. usdt를 사용하지 않고 btc로 선물을 하면 천원으로도 가능한걸로 압니다. 또한 레버리지의 사용이 자유롭습니다. 레버리지 사용이 자유롭다는 말은 대충 들으면 마냥 좋은점 같지만 독이든 성배인지 복이든 성배인지 모릅니다. 심리적인 컨트롤이 불가하고 원칙이 마련되어있지 않다면 고삐 풀린 망아지가 되는겁니다. 그렇다고 레버리의 자유도의 강점이 그렇게 큰편도 아니라서 저는 오히려 고정된 편이 낫다고 봅니다.

해외선물은 최소 증거금 개념을 사용하며 일반 종목과 마이크로 종목을 구분합니다. [일반종목에서 마이크로가 붙으면 필요증거금이 1/10가량] 예를들어 마이크로 나스닥을 매매하려면 1700달러가 최소증거금입니다. 마이크로 골드는 100만원 정도이며 외환 종목은 좀 더 저렴하게 가능합니다. 즉 어떤 종목을 하느냐에 따라 초기자금이 다르지만 비트코인 선물만큼의 자유도가 있지는 않습니다.

수수료는 간단합니다. 초단타는 해외선물이 압도적으로 유리하고 단타는 거의 비슷[해외선물이 현재 트레이딩 세션 근소우위지만 장중 난이도 때문에 비트코인선물이 좋음] 스윙은 비트코인이 좋습니다.

트레이딩 뷰 API 차트 적용 및 데이터 연동

현재 준비 상황 :
- 현재 트레이딩뷰 차트 적용 및 데이터 연동만 된다면 완성되는 단계까지 이르러 있습니다.
- 트레이딩뷰 Api 값을 실시간으로 연동만 된다면 준비 완료입니다. 가능하신 분 연락 부탁드립니다.

필요 요소 :
- 트레이딩뷰 차트의 데이터를 내부 DB로 연동

요구 사항 :
- 고객들에게 정보 제공하는 사이트를 운영 중입니다.
- 차트 라이브러리와 자사 DB 트레이딩뷰를 연동하여 실시간으로 유동성 있는 정보를 제공해야 합니다.

기타 유의 사항 :
- 트레이딩뷰 작업 경험이 있는 분을 찾고 있습니다.

모집 요건

지원 전 질문

지원서 작성시 클라이언트의 질문에 답변해 주세요.

참고사항 안내드리면, 차트 라이브러리 신청은 완료되어있구요 서버, github 준비되어있고
저희가 준비하고 있는 플랫폼으로 파싱되고 라이브 스트리밍 처럼 유동성 있는 차트가 필요합니다

GBPAUD : FOREX.com
BTCUSD : CURRENCY.com
XAUUSD : FOREX.com

모집 중인 다른 프로젝트

준비된 웹 사이트 데이터를 AWS에 배포/설정

프로젝트 개요 : - 준비된 웹 사이트 데이터를 AWS에 배포/설정 현재 준비 상황 : - Spring boot 기반의 백엔드와 react 기반의 프론트엔드로 만들어진, 토이 프로젝트 레벨의 사이트 소스 코드가 준비되어 있습니다. 필요 요소 : - 레거시 검토 - 설정값 확인 - AWS 배포 개발환경/언어/방식 : - AWS - Java, Spring Boot 요구 사항 : - AWS 인스턴스에 사이트를 배포하고 현재 트레이딩 세션 웹페이지 관리자가 유지보수 가능한 환경을 구축하는 것을 목적으로 합니다. - 준비된 소스코드를 받아 AWS에 배포 가능한 환경 설정, 배포 진행, 현재 트레이딩 세션 유지보수 방법을 간략히 문서화하여 사이트 관리자에게 전달 산출물 : - AWS 배포 - 유지보수 방법 문서

Siemens Teamcenter 사용 SaaS 솔루션 개발(주 1회 재택)

<프로젝트 요약>1. 경력 2년차 이상, 월 1,300~1,[email protected] 로 조율 가능 2. Siemens Teamcenter 사용 3. 마곡 LG사이언스파크 근무 ( 주 1회 재택 ) 4. 6개월 이상 계약 가능 5. 1개월 만근시 휴가 1회, 초과근무(야간/주말) 수행시 대체휴가 부여 <프로젝트 개요>프로젝트 소개: Siemens Teamcenter 사용 SaaS 솔루션 개발 - 발주사:LG CNS 프로젝트 진행 상황: - 착수하여 진행중 전체 프로젝트 일정: - 전체 프로젝트 일정: 22년 내 솔루션 개발 완료 및 이후 운영/유지보수 ( 6개월 이상 ) - 투입 예정일: 즉시 착수 가능(늦어도 8월 이내 착수) - 인터뷰&계약 일정 : 지원자 발생 시 바로 인터뷰 진행, 1~2일 이내로 계약 여부를 결정할 예정입니다. - 계약 진행 프로세스: 프로젝트 지원 > 실무진 인터뷰 > 계약 결정 모집 인원: 10명 이상 충원 -경력 5년 미만 : 월 1,300~1,400만 원 이상 -경력 5년 이상 : 월 1,700만 원 이상 상세 업무 : - 지멘스 팀센터를 활용한 SaaS형 PMS/QMS 솔루션 개발 - UI개발, 로직 개발, 설계/모델링, I/F 중 원하시는 업무로 진행 가능합니다. * Siemens Teamcenter 사용이 가능하시면 바로 면접 희망하며 면접을 통해 담당 파트를 논의하고자 합니다. 필수 기술: - Siemens Teamcenter 우대 사항: - PLM 솔루션 경험자 우대 - 품질 업무 경험자 우대 - 위시켓 이용요금은 클라이언트가 부담합니다. - 초과근무(야간/주말) 수행시 대체휴가 부여 - 주 1회 재택 가능

Cloud Managed Platform Web 구축

이 프로젝트의 클라이언트는 사업자 또는 신원 정보 인증을 완료하였습니다.

프로젝트 목적 : - 당사 주력 비즈니스인 Cloud 비즈니스에서 Azure를 고객에게 직접 제공하는 (T2) 사업을 진행하고자 필요한 MSP 자격 (Managed Service Provider) 요건인 고객 대상 사이트를 구축하는 것이 프로젝트 목적입니다. 프로젝트의 현재 상황 : - 현재 당사의 Azure 전문 엔지니어들이 홈페이지 기획안을 작성해 두었으며 8월부터는 선정된 에이전시와 기획안을 마무리하고 제작을 착수하고자 합니다. 이번에 구축하는 사이트는 12월까지는 구축이 완료되어야 하기 때문에 약 현재 트레이딩 세션 4개월간의 기간 내에 진행할 예정입니다. 사이트 용도 : - CMP 사이트는 당사(S.Pin)이 판매 및 관리하는 Azure 고객사에서 청구 내역 확인, 장애 발생 시 CS 접수, Azure 서비스 관련 지식 및 정보를 조회하고 관리자는 콘텐츠 관리, 고객 정보 모니터링을 하기 위해 현재 트레이딩 세션 구축하는 사이트입니다. 사이트 개요 : - 사이트 내에 청구 및 결제 기능은 필요하지 않으나 Azure와 관련된 App을 소개하는 마켓플레이스 개념의 정보 제공사이트와 Azure 엔지니어들을 대상으로 제공하는 콘텐츠를 회원가입 유/무에 따라 차등하여 전달할 필요가 있어서 회원가입 기능 또한 필요합니다. - 고객지원 (서비스 접수 및 현재 트레이딩 세션 고객 Billing 등 Azure 정보 확인), 제품&솔루션 (Azure 주요 서비스 소개, 고객 사례 게시, App 소개 등), 전문서비스 (당사 제공 Azure 현재 트레이딩 세션 관련 관리 서비스), 정보 및 지식 (제품&서비스 관련 정보 아카이빙) 과 시스템 관리 (관리자 페이지) 가 현재까지 확정된 메뉴이며 지금 버전에서 1,2개 정도 추가 될 수 있습니다. 필요 요소: - 업무 분석 및 설계 - UI/UX 디자인 - 사용자 웹사이트 개발 - 관리자 웹사이트 개발 - 서버 구축 산출물 : - 미팅을 통해 개발업체와 결정하고자 합니다. 개발 환경/언어 : -제안해주세요. 메뉴구조도 및 기능 목록 : - 첨부된 PPT 파일을 확인해주세요. * 미팅 시 서비스 플로우, 화면 설계 내용 공개할 예정입니다. 참고자료 / 유의사항 : - 모든 인프라는 Azure를 기반으로 구축되어야 합니다. 또한 Azure 전문 Cloud 비즈니스를 운영하기 때문에 Azure 에 대한 이해도가 있으면 더욱 좋습니다. - 8월 시작의 경우 12월 내에 모든 프로젝트 완료하는 것을 목표로 하며 이후 유지보수까지 제공 가능한 경우를 더욱 선호합니다.

제뉴어리의 모든것

SecurityContextHolder.getContext().getAuthentication().getPrincipal() 와 같이 사용하여 필요한 데이터를 가져오면 된다.

그리고 getPrincipal()로 가져온 객체에서 로그인 유저의 데이터를 가져다가 쓰면 된다. (데이터 구조를 브레이크 포인트를 찍어서 확인해볼것..)

  • Get the username of the logged in user: getPrincipal()
  • Get the password of the authenticated user: getCredentials()
  • Get the assigned roles of the authenticated user: getAuthorities()
  • Get further details of the authenticated user: getDetails()

> Spring Security로 인증을 한 유저를 SecurityContextHolder. getContext ().getAuthentication(). getPrincipal() 써서 Object를 가져왔을때

Spring Security로 인증을 한 유저는 UserDetails 을 현재 트레이딩 세션 현재 트레이딩 세션 implements하고

구현한 객체를 반환한다. (UserDetailsService를 implements 한 구현 service 객체의

loadUserByUsername 함수가 리턴하는 객체)

getPrincipal() 해서 가져온 object의 데이터형

UserDetailsService 구현체 UserDetails의 구현체

Member는 UserDetails를 구현 했으므로 loadUserByUsername에서 리턴 가능하다.

> Oauth2 로 인증을 한 유저를 SecurityContextHolder. getContext ().getAuthentication(). getPrincipal() 써서 Object를 가져왔을때 (네이버 로그인)

DefaultOAuth2User 데이터형의 변수를 반환한다.

(OAuth2UserService 를 implements 한 구현체의 loadUser 함수가 리턴하는 데이터형) 테스트 해보진 않았지만 아마도 OAuth2User 를 구현해 주면 직접 엔티티를 만들어서 핸들링 가능할듯 하다.

getPrincipal() 해서 가져온 object의 데이터형

OAuth2UserService 구현체

애너봇, AI 트레이딩봇으로 내가 직접 자산규모를 키운다!

애너봇, AI 트레이딩봇으로 내가 직접 자산규모를 키운다!

[블록미디어 김보성 기자] 블록체인 기반 AI 개발 전문업체 비엠씨플러스가 애너봇과 블록체인이 연결되는 애너월렛(anawallet)을 통해서 전용 코인인 애너그램(anagram/ANG)코인만 있으면 누구나 애너봇을 운영할 수 있다고 7일 밝혔다.

애너봇은 ANG가 상장되어 있는 빅원거래소(https://vo.la/bOTEz)에서 구매가 가능하다. 초기 운영자를 위한 전용상품인 ‘정기구독+코칭형’을 6개월동안 운영 할 경우, 수량에는 상관 없이 서비스 금액만큼의 ANG를 구매하여 애너봇5.0 사이트에서 개설신청을 하면 된다.

디파이(DeFi)시장이 뜨거운 만큼 개인의 자산관리와 금융거래에 대한 관심 또한 뜨겁다. 그 중에서도 ‘트레이딩봇’ 시장이 디파이(탈중앙화 금융)와 코로나19로 인한 비대면 재테크 시장이 활성화되면서 다시 주목받고 있다.

(자료출처 : 깃허브내에서 검색할 수 있는 트레이딩 알고리즘에 대한 검색결과)

애너봇(anabot)은 현재 트레이딩 봇 업계에서는 거의 유일하게 남아있는 ‘개인형 AI 트레이딩 봇’이다. 트레이딩 봇의 알고리즘은 크게 보조지표 등을 분석하여 움직이는 ‘퀀트 알고리즘 방식’과 거래소간의 시세차익으로 수익을 보는 ‘아비트리지 방식’으로 나뉜다.

아비트리지 방식은 한때 유행을 했으나, 현재처럼 시세차익이 거의 없는 상태에서는 한달에 1~2%의 수익도 내기 힘든 부분이 있다. 또한 기존의 큰 수익을 약속했던 몇몇 회사들이 폰지사기로 판명이 나면서 수많은 피해자를 만들기도 했다.

퀸트(Quant)란 Quantitative Analyst의 약자로써, 계량적 투자 방식이라고도 한다. 각 종목별로 보여지는 보조지표, 거래량, 가격추이, 뉴스 빅데이터 분석 등의 다양한 자료를 수치로 만들어 그것을 토대로 매매하는 방식을 말하는데, 주로 사람이 아닌 트레이딩 프로그램을 통해서 투자가 진행된다.

기존에도 이런 방식을 도입한 트레이딩 봇들이 있었으나, 사업시작 1~2년만에 대부분 사업을 접었다. 이들의 방식은 봇을 운영하는 개인이 보조지표로 알고리즘을 직접 만들어야 하는 방식이거나 단순히 보조지표의 골든크로스와 데드크로스만 분석해서 운영을 하다보니 추세를 받은 상승장에서는 수익을 내지만 횡보장에서는 많은 손실을 보기 때문이다.

애너봇도 출시 초기 같은 문제에 직면했었다. 애너봇은 보조지표별로 매매에 미치는 영향이 다르다는 것을 발견하고 각각의 요소에 가중치를 부여하여 새로운 확률로 만들고, 가격의 추이와 손실과 수익여부를 인지하여, 애너지수(ana-index)라는 자체의 지수를 만들어낼 수 있는 인공지능을 탑재한 애너봇 2.0으로 업데이트 했다.

애너봇 2.0 발표이후로 개인별 월평균 수익률은 10%대를 기록하고 있으며, 현재까지 꾸준히 업데이트하여 현재 애너봇 5.0 beta 서비스를 하면서 기존 회원들을 대상으로 서비스하고 있다.

비엠씨플러스의 핵심관계자는 애너봇이 24시간 돌아가며 꽤 많은 거래량을 만들어내다 보니 중대형 암호화폐 거래소에서 러브콜을 받고 있는 상태라 차후 더욱 다양한 거래소에서 서비스할 수 있을 것이라고 밝혔다.


0 개 댓글

답장을 남겨주세요