반응형


이전 글 <TSL3 (테슬라 3배 레버리지 매수 편> 내용정리

 

삼슬라(TSL3 : 테슬라 3배 레버리지) 투자 후기 part.2

삼슬라에 대해 궁금하신 분은 전에 작성한 아래 글에서 확인! 삼슬라 : 테슬라 3배 레버리지 (TSL3) 엊그제가 천이백슬라고 어제가 천슬라같은데 팔백슬라라니... 머스크 형이 세금 낸다고 테슬라

fire-programmer.tistory.com

매수 이유 

시장이 안 좋음으로 인해 성장주인 테슬라가 과도하게 폭락했다고 판단
-. 메인 계좌에 테슬라를 이미 400 후반대에 들고 있는 대투자자로서, 테슬라에 대한 확신이 있었음
-. 과도한 폭락 시마다 계속해서 추매함 (테슬라 $800에서 사고 700 아래로 떨어질 때마다 계속 줍줍)

호재

1:3 액면 분할 예정 (8월초 주주총회에서 발의 -> 통과시 분할 시행)

아리까리 포인트

머스크의 트위터 인수 포기 - 테슬라에 집중할 수 있지만, 손해배상등의 문제가 이슈로 남아 있음

7월말 실적 발표 - 1분기에 비해 2분기 실적이 낮춰진 상태로 예상하는데, 중요한건 예상치보다 높게 나올수 있을지!

매도 포인트

개인적인 테슬라의 가격이 목표가 : $900(장기로는 $1000이상을 보지만 중단기로는 $900목표)

테슬라의 액면 분할이 주총에서 통과 or 시행되는 날을 d-day로 보고, 2주 전부터 분할 매도


투자 정보

매도 종목 : TSL3
매수가격 : $1.387 (수량:10502개)

매도가격 : $1.761

순익 : $4723 (원화:6,700,000)

실제 매도 이유

위에서 말한 매수/매도 이유와 호재 그리고 아리까리 포인트까지 모두 긍정적으로 흘러가고 있는 상황

단기적으로 너무 급격하게 목표 근접치까지 올라왔기 때문에, 매도 후 추후에 재매수 예정

  • 너무 급상승한 시장과 테슬라
    => 하루 만에 10% 상승한 테슬라 (2022-07-21), 시장도 1주내내 상승
    => 1,2달동안 $900을 목표로 했지만, 단기적으로 $800중순까지 올라왔기 때문에
    단기적인 관점에서 수익을 실현
  • 7월말 다른 기업들의 실적발표와 FOMC/금리 발표등 이벤트가 많으므로, 불확실성 UP
    => 너무 급격히 올랐기에 다음주 빅 이벤트에서 불확실성으로 주식이 떨어질 수 있음 (단기적)
    => 그렇다면, 다시 재매수를 고려

하지만.. 역시 3배 레버리지라 리스크가 엄청나기 때문에 항상 조심 할 것!

반응형
반응형

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이 = 다른사람의 풀이(java)

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {

        // 숫자를 문자열로 변환
        String[] result = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            result[i] = String.valueOf(numbers[i]);
        }

        // 정렬
        Arrays.sort(result, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

        // 0만 여러개 있는 배열의 경우 하나의 0만 리턴
        if (result[0].equals("0")) {
            return "0";
        }

        String answer = "";
        // 정렬된 문자 하나로 합치기
        for (String a : result) {
            answer += a;
        }
        return answer;
    }
}

풀이 방법

몇몇 테스트 케이스를 통과하지 못하고.. 1시간 정도 고민하다가, 결국 다른 사람의 풀이를 보고 풀었다

관건은 실제로 정렬을 구현하는 부분이었다. 

혼자 힘으로 풀때는 문자 3 vs 30 이 나올때 330이 출력되도록 하는 로직 처리하다가 너무 복잡해짐

결론
Arrays.sort(result, (o1, o2) -> (o2 + o1).compareTo(o1 + o2))

 

느낀점

  • Array 정렬 방법
    • 단순 정렬시 - Array.sort(arr)
    • 복잡 정렬시 - Arrays.sort(result, (o1, o2) -> (o2 + o1).compareTo(o1 + o2))

 

반응형
반응형

에러 내용

Exception Type - I/O error on POST request for "주소": 주소; nested exception is java.net.UnknownHostException: 주소

=> 해당 호스트 정보 / DNS 등을 찾지 못해 발생

 

상세 내용

몇달동안 실제 운영서버에서 정상적으로 해당 api를 호출되다가, 간헐적으로 해당 에러가 나면서 요청 실패가 나는 상황
(
이틀간 수치가 급증하여, 조치 필요)

로컬에서도 같은 현상 발생 (간헐적으로 실패)

 

 

예상 원인

Java 애플리케이션에서 유효한 DNS정보를 응답받지 못하는 경우

=> Google DNS 서버가 해당 도메인을 제대로 인식하지 못 하거나, 문제가 잠시 생긴것으로 추측

 

해결 ( 1)

1. Hosts 파일 변경

DNS 되는것으로, Hosts에서 ip-DNS 등록해서 사용
=> 로컬에서도 손쉽게 적용가능하고, 재시작(리부팅)이 필요 없음. 단, 상대의 IP가 바뀌면 수동으로 다시 맵핑 시켜줘야 함

방법
vi /etc/hosts
내용 입력(ip,DNS) 127.0.0.1       localhost
(참고 :  ping 도메인 => 실제 ip 조회 가능)

 

2. DNS 설정 변경

주/보조가 모두 구글 서버라 하나를 다른 DNS Server를 바라보도록 변경해서 테스트해본 결과, 정상적으로 요청
=>  vi /etc/resolv.conf (운영체제 / 버전에 따라 다를수 있지만, IP or DNS Server 설정 부분을 찾아서 수정)

DNS1 - 8.8.8.8(Google) -> 1.1.1.1(Cloudflare)
DNS2 - 8.8.4.4(Google) -> 8.8.8.8 (Google)

반응형
반응형

삼슬라에 대해 궁금하신 분은 전에 작성한 아래 글에서 확인!

 

삼슬라 : 테슬라 3배 레버리지 (TSL3)

엊그제가 천이백슬라고 어제가 천슬라같은데 팔백슬라라니... 머스크 형이 세금 낸다고 테슬라 팔고(최대 주주 리스크), 테이퍼링+금리 때문에 조정 받는 장이라고는 하지만! 포트폴리오의 가장

fire-programmer.tistory.com

 

 


투자 정보

매도 종목 : TSL3
매수가격 : $1.387 (수량:10502개)

총 투자금 : 1880만원 (1295원/1$ 기준)


매수 이유 

시장이 안 좋음으로 인해 성장주인 테슬라가 과도하게 폭락했다고 판단
-. 메인 계좌에 테슬라를 이미 400 후반대에 들고 있는 대투자자로서, 테슬라에 대한 확신이 있었음
-. 과도한 폭락 시마다 계속해서 추매함 (테슬라 $800에서 사고 700 아래로 떨어질 때마다 계속 줍줍)

호재

1:3 액면 분할 예정 (8월초 주주총회에서 발의 -> 통과시 분할 시행)

아리까리 포인트

머스크의 트위터 인수 포기 - 테슬라에 집중할 수 있지만, 손해배상등의 문제가 이슈로 남아 있음

7월말 실적 발표 - 1분기에 비해 2분기 실적이 낮춰진 상태로 예상하는데, 중요한건 예상치보다 높게 나올수 있을지!

매도 포인트

개인적인 테슬라의 가격이 목표가 : $900(장기로는 $1000이상을 보지만 중단기로는 $900목표)

테슬라의 액면 분할이 주총에서 통과 or 시행되는 날을 d-day로 보고, 2주 전부터 분할 매도

 

 


투자 후기

  1. 리스크가 "진짜" 높다
  2. 수수료도 "진짜" 높다
  3. 낮은 거래량
  4. 영국에 상장
  5. 기타 제약 사항

자세한 내용은 삼슬라 투자 첫번째 후기에서 확인!

 

삼슬라(TSL:테슬라 3배 레버리지) 투자 후기

삼슬라에 대해 궁금하신 분은 전에 작성한 아래 글에서 확인! 삼슬라 : 테슬라 3배 레버리지 (TSL3) 엊그제가 천이백슬라고 어제가 천슬라같은데 팔백슬라라니... 머스크 형이 세금 낸다고 테슬라

fire-programmer.tistory.com

반응형
반응형

정리하게 된 계기

오늘 DB튜닝을 하다가 실행계획을 보았는데, 제가 알고 있던것과 다른점이 있어

믿보 블로그(기억보단 기록을)의 내용과 이번에 쓰면서 알게 된 점을 정리해봤습니다.

 

그 내용은...

여러개의 컬럼으로 이루어진 복합 인덱스의 컬럼 순서를 지키지 않았는데 인덱스를 타버리네?! 

Index1 : A,B,D
Index2 : C,D
쿼리1 : where A = '조건' and D = '조건' and  B = '조건'
쿼리2 : where C = '조건' and D = 조건''

쿼리 2는 Index2를 타고, 쿼리 1은 Index1과 컬럼 순서가 달라서 당연히 오래걸리겠거니 했는데, 제가 잘못 알고 있었어요.

위처럼 and 조건의 순서가 실제 인덱스와 꼭 같지 않더라도, 실행계획이나, 실제 수행시간이 똑같이 나왔습니다.

컬럼 순서를 지켜야, 인덱스를 탄다고 알고 있었는데, 민망하니까 후딱 찾아봤습니다.

 

인덱스 생성시

○ 카디널리티(중복을 제외하는 수치) 높은 컬럼 사용
○ 인덱스의 생성시 컬럼 순서는 카디널리티가 높음 -> 낮음 순서가 성능이 좋음


인덱스 사용 조회시

○ 인덱스가 여러 컬럼인 경우, 몇몇 조건 생략 가능
(인덱스 컬럼 앞에서 부터 포함하는게 좋음, index-컬럼1,2,3,4 중 3,4 생략가능)
○ 범위 조건 (Between, like, <,>)은 해당 컬럼까지만 인덱스를 타고, 그 뒤로는 인덱스를 타지 않음
○ In, =는 다음 컬럼도 인덱스 사용 (in은 =의 멀티)
○ Or 보다는 and가 성능상 좋음 (or는 row가 늘어나서 풀스캔 가능)
○ 인덱스의 컬럼을 그대로 사용해야 함 (연산 처리를 하지 않고)
○ 예전처럼 인덱스와 컬럼 순서를 반드시 지키지 않아도 인덱스 사용 가능 (컬럼 재배치 과정이 추가 되지만 거의 같음)

 

출처 - 기억보단 기록을

 


실제 사용하면서, 느낀점

  • 시간/날짜를 범위로 많이 검색하는 경우
    인덱스 생성시 시간 컬럼을 뒤쪽에 배치하는게 유리 (인덱스의 최대한 많은 컬럼에 대해 인덱스 사용)
  • 정확한 시간/날짜로 많이 검색하는 경우
    인덱스 생성시 시간 컬럼을 앞쪽에 배치하는게 유리 (시간으로 필터링 = 카디널리티 높음)
  • or , !=, not in 은 비효율적
    or는 row수가 늘어나고, not 이 붙는 연산자는 결국 full-scan을 타게 되는 경우가 대부분이라, 되도록 지양하는게 성능상 유리
  • 인덱스의 컬럼 순서를 지키지 않아도 인덱스 사용 가능 (그래도 이왕이면 지키자)
반응형
반응형

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

public class StringExercise {

    public static void main(String[] args) {
        String str = "912345";
        System.out.println("RESULT : "+ solution(str) );
    }

    public static boolean solution(String s) {
        boolean answer = false;
        try {
            if(s.length()==4 || s.length()==6){
                Integer number = Integer.parseInt(s);
                if(number > 0)
                    answer = true;
            }
        }catch (Exception e){ e.printStackTrace(); }
        return answer;
    }
}

접근

별 다른 로직이 필요 없어 보이고, 역시 가장 단순하지만 기본적인 접근으로 시작!
간단한 조건식(if)과 try/catch로 처리가 가능해보여서 작성하다 보니까 완성했는데, Best 풀이라 딱히 언급할건 없어보임

중간에 5,6번과 11번 데이터에 대한 처리가 약간 골치였지만!  음수, 자리수를 잘 처리해주었다.

다른 사람의 풀이

    // 정규식을 활용한 다른 사람의 풀이
    public static boolean solution2(String s) {
        boolean answer = false;
        if(s.length()==4 || s.length()==6){
            String pattern = "^[0-9]*$";
            return s.matches(pattern);
        }
        return answer;
    }

대동소이하나, 보통 정규식의 유무 정도만 다르고 대체로 다른 답도 비슷해 보인다.

느낀점

  • 자주 쓰이는 정규식은 잘 알아두면 항상 편리하니까 정리!
    str.matches("^[0-9]*$")  // 숫자만 있는지 확인
    str.matches("^[a-zA-Z]*$")  // 문자(영어)만 있는지 확인
    str.matches("^[a-zA-Z0-9]*$")  // 문자(영어)+숫자만 있는지 확인
    • matches는 뒤의 정규식이 있는지 boolean으로 결과 반환
    • ^ : 문자열 시작
    • [ ] : 문자의 집합
    • * : 앞문자가 많거나 무제한일수 있음 (*$: 자리수 상관없이 확인할때)
    • $ : 문자열 끝
    • ^[a-zA-Z]*$  : 첫 문자
  • 자주 쓸때는 좀 익숙하다가도, 오랜만에 보니까 정규 표현식이 기억이 안난다.
    https://moonong.tistory.com/31 참고하자!

 

반응형
반응형

 

반응형

 

 

1. 풍문으로만 듣던 10%의 수익률

여태까지 들어온 바로는 S&P500의 연 수익률이 10%정도 된다고 알고 있었습니다.

제가 예전에 정리했던 글에도 적혀있지만 

 

spy, S&P 500 : 워렌 버핏도 믿고 사는 미국 주식 치트키

안녕하세요. 오늘은 미국 주식의 대표적인 ETF 중 하나인 S&P 500에 대해 알아보려고 합니다. 작년부터 주식에 대한 관심이 많아지면서, 주변에서 주식을 시작하려 할 때, 가장 많이 추천했던 ETF입

fire-programmer.tistory.com

우리의 구글신에게 실제 S&P 500의 연평균 수익률을 물어본 결과는 14%(?) 10%, 8%로 나왔네요

물론 내용을 읽어 봐야 알겠지만.. 제가 알고 있는 8~10%로 얼추 비슷하네요.

 

2. 진실의 방으로!

뭐 일단 어느정도 근거가 있는 얘기라는건 확인했고

그래서 실제로 증권사 사이트에서 1993년도 데이터부터 월봉 차트로 일일이 표로 만들어서 직접 확인해봤습니다.

연도별 1월 시작가/ 12월 종료가를 넣어서 (엑셀이) 직접 계산해봤습니다.

연도 1월 시작가 12월 종료가 수익률 (1월 기준) 수익률(12월 기준)
1993 43.97 46.59    
1994 46.59 45.56 5.95 -2.21
1995 45.7 61.48 -1.91 34.94
1996 60.98 73.84 33.43 20.1
1997 74.38 96.22 21.97 30.3
1998 98.31 123.31 32.17 28.15
1999 123.38 146.88 25.5 19.11
2000 148.25 131.19 20.15 -10.68
2001 132 114.3 -10.96 -12.87
2002 115.11 88.23 -12.79 -22.8
2003 88.85 111.28 -22.81 26.12
2004 111.74 120.87 25.76 8.61
2005 121.56 124.51 8.78 3.01
2006 125.19 138.94 2.98 11.58
2007 142.25 146.21 13.62 5.23
2008 146.53 90.24 3 -38.28
2009 90.44 111.44 -38.27 23.49
2010 112.37 125.75 24.24 12.84
2011 126.71 125.5 12.76 -0.19
2012 127.76 124.41 0.82 -0.86
2013 145.11 184.69 13.58 48.45
2014 183.98 205.54 26.78 11.28
2015 206.38 203.87 12.17 -0.81
2016 200.49 223.53 -2.85 9.64
2017 225.04 266.86 12.24 19.38
2018 267.84 249.92 19.01 -6.34
2019 245.98 321.86 -8.16 28.78
2020 323.73 323.54 31.6 0.52
2021 375.31 461.64 15.93 42.68
2022 476.3   26.9  

3. 위 내용을 보고 느낀점

일단 결론은 바로 아래 나오겠지만.. 수익률은 10%정도 비슷

1월기준이든, 12월 기준이든, 그래프를 보면 추이는 거의 비슷하네요

  • 2021의 위엄 : 코로나로 양적완화를 진행한 결과 42%라는 어마무시한 결과가.. 덕분에 지금 무시무시한 후폭풍이..
  • 2년 연속 마이너스인 적은 없다(?) : 제가 알고 있는 이 말은 사실이 아닌것 같네요. 2000년도에는 무려 3년 연속 마이너스를 기록한적이 있습니다. 모두가 아시다시피 2008년도 금융위기는 1년만에 극복하긴 했네요
  • 후폭풍의 올해? : 살짝, 결과론적인 얘기지만.. 평균값이 10%인데 작년 42%, 재작년0%, 그 전해28%이면... 평균이 유지되려면 어느정도 역성장이 예상되긴 합니다.. 이미... 많이 내려왔죠..

 

4. 결론

1월 기준 / 12월 기준이냐에 따라 조금 차이는 있지만

9.45%와 10.32%가 나왔습니다.

이로써 S&P 500의 연 평균 수익률은 10% 내외라는 결론!

연평균 수익률 (1월) 9.45
연평균 수익률 (12월) 10.32

 

끝!

반응형
반응형

문제 설명

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의 풀이

import java.util.stream.IntStream;

public class NumberOfRemainingOne {

    public static void main(String[] args) {
        int n = 12;
        solution(n);
    }

    public static int solution(int n) {
        int answer = 0;
        while(true){
            if(n % ++answer == 1) break;
        }
        return answer;
    }
}

접근

별 다른 로직이 필요 없어 보이고, 역시 가장 단순하지만 기본적인 접근으로 시작 (시작과 끝 숫자를 잘못 정했지만..)

문제 풀이 컨셉은 다들 비슷했고, 나는 끝을 알수 없기에 while문을 적었으나, answer < n 으로 조건을 걸고, 시작은 2부터 했으면 더욱 깔끔한 코드일듯 하다

다른 사람의 풀이

    // Stream 을 활용한 다른사람의 풀이
    public static int solution(int n) {
        return IntStream.range(2,n).filter(i -> n % i == 1).findFirst().orElse(0);
    }

오늘도 Stream 한스푼! 일단 성능은 차치하고, 쓰는 법이나 익힐겸 적어보았다.
IntStream으로 2부터n까지 범위를 주되, filter로 조건을 걸어서 나머지가 1인 숫자, 그중에 첫번째를 찾는 로직

느낀점

  • 이번 문제는 딱히...없는듯
반응형
반응형

문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

문제 보러 가기

 

나의 풀이

import java.util.ArrayList;

public class AddingSomeNumbers {

    public static void main(String[] args) {
        int[] numbers = {1,2,3,4,6,7,8,0};
        solution(numbers);
    }

    public static int solution(int[] numbers) {
        int answer = 0;
        ArrayList<Integer> numbersList = new ArrayList<>();

        for (int number : numbers) {
            numbersList.add(number);
        }
        for(int i = 0; i < 10; i++){
            if(!numbersList.contains(i))
                answer += i;
        }

        return answer;
    }
}

접근

나의 풀이 방법 - Count는 ArrayList의 contains를 활용

그렇다면, 풀어야 할 문제는 2가지 : Array(int[])를 ArrayList로 어떻게 바꿀것인가?

다른 사람의 풀이

// 1 - for 사용하지만, 문제에 대한 깊은 이해로 인해 모두 더한 수를 생각해 냄
class Solution {
    public int solution(int[] numbers) {
        int sum = 45;
        for (int i : numbers) {
            sum -= i;
        }
        return sum;
    }
}

// 2 - 45(모두 더한 수)와 stram 객체를 활용한 방법으로, Stream을 익히는게 좋을듯 
import java.util.Arrays;

class Solution {
    public int solution(int[] numbers) {
        return 45-Arrays.stream(numbers).sum();
    }
}

오랜만에 풀어서 그런지 45를 생각해내지 못했다

게다가 Stream도 익숙지 않아서 생각하지 못해 아쉽다

느낀점

  • Count할 방법을 미리 정해놓으니까, 문제의 접근 방식이 제한돼서 오히려 돌아서 푼 느낌
 
반응형
반응형

Java에서 Array를 List로 바꾸는 방법은 많겠지만, 가장 간단한 방법들을 몇 개 소개해드리겠습니다.

1. Arrays 사용 

복사하려는 array의 type이 기본형이라면 가장 간편한 방법으로, 기본 함수 사용
(단,  Integer가 아닌 int형이라면 사용이 불가능)

2. Collection 사용

Collections를 사용하여 array를 복사하는 방법, 하지만 복사하려는 array의 type이 기본형이 아니라면 사용 불가능

3. for 사용

가장 기본적인 방법으로 for/stream등을 이용해서 array를 하나씩 읽어서 list에 새로 넣는 방법
번거로워 보이지만, 형변등 처리가 가능하므로 int형을 Integer로 바꿔서 처리할 수 있다.

      // 1 - Arrays 활용
      List<Integer> list = Arrays.asList(array);          

      // 2 - Collection 활용
      List<Integer> list = new ArrayList<Integer>();
      Collections.addAll(list, array);

      // 3 - for each 활용
      List<Integer> list = new ArrayList<Integer>();
      for(Integer text:array) {
         list.add(text);
      }

 

 

 

 

 

java array to list

how to convert array to list

반응형

+ Recent posts