반응형

질문의 속성

- 질문은 모르는 것을 대상으로 한다. 모르는 것은 나의 앎의 외곽 경계선에 있다. 나의 지식을 넓히게 된다.

- 질문은 행동 또는 반응을 이끌어 낸다.

- 질문을 생각하는 것에는 선택 행위가 따르므로 자동으로 우선 순위를 따지게 된다.

 

그냥 글쓰기, 말하기와 질문하기의 다른 점?

- 그냥 던져주는 뉴스 읽기와 자동 알고리즘으로 연결되는 유튜브 동영상 보기, 잡념, 상념과 다르게 검색어를 입력하는 것과 같은 주관적인, 의지가 동반되는 주체적(어떤 일을 실천하는 데 자유롭고 자주적인 성질이 있는. 또는 그런 것) 행위

- 목적, 목표 지향적, 의도적

- 질문에는 (응)답에 대한 규격(프레임)이 포함됨

 

 

관련 기록

1. 기계 인공지능 의식의 출발점 질문 

인공지능이 의식을 가지게 된다면 그것은 스스로에게 질문을 던지는 능력을 가지는 것에서 출발하지 않을까?

기계가 자신에게 질문을 하고 질문의 답을 자동으로 찾고, 만약 인간에게 허락받지 않고 자신이 찾은 해결책을 실행한다면

인간은 기계에게 지배받게 될 것이다.

질문은 어디서 나오게 될까?(가장 첫 질문은? 출발이 되는 질문, 근원적인 질문, 영원히 해소되지 않는 질문?)

어떻게 질문을 선택하게 만드는 것이 좋을까?

어떤 질문들을 선택하게 만들어야 할까?

혹시 추후에 기계가 질문을 선택하는 방식을 인간의 허락 없이 자기 마음대로 바꾸게 된다면?

 

2. 질문의 한계

질문에는 어떤 힘이 있을까?
​질문에 대해 이해하고 탐구할 네가지 힘을 탐구해보자
1. 질문은 [ ]를 제약한다.
2. 질문은 [ ]을 강화한다.
3. 질문은 '탐구'를 촉진한다.
"그리고 또?"

도요타의 문제해결 도구 5WHYS
문제에 대해 '왜'라고 질문을 하고, 질문에 대한 답에 다시 '왜'라고 질문을 하는 것이다.
이 과정을 다섯 번 반복하면서 문제의 근원을 찾아나가는 것이다.

"당신의 마음속에서 해결되지 않는 모든 것에 목매지 말라. 질문 그 자체를 받아들이려 노력하라.
지금 안되는데 해답을 찾으려고 하지 말라.(대신 다시 질문해라?) 왜냐하면 지금은 답이 나올 시기가
아니기 때문이다. 핵심은 모든 것을 자연스럽게 받아들이고 그것을 즐기는 것이다.
현재의 질문 속에서 구하라. 아마 깨닫지 못하는 사이, 시간이 조금 흐른 후

당신은 해답을 찾을 수 있을 것이다."

-라이너 마리아 릴케

 

3. [펌]격물치지

 '도道'를 닦아서 광명해진 정신을 바탕으로, 인간사에 가장 중요한 '수기치인修己治人'의 문제에 나아가 그 본말을 정확히 파악하여 현실 일에 소홀하미 없게 하는 것이야 말로, '격물치지' 즉 "사물의 선후先後를 분명히 파악하여 지혜를 이루는 것"이다. 사람의 인생을 가장 좌지우지하는 것은 바로 그 사람의 '고정관념'이다. 이러한 왜곡된 고정관념에서 벗어나, 사물을 '있는 그대로'의 본모습대로 합리적이고 올바르게 이해하는 것, 이것이야말로 인간의 '무지無知'를 바로잡는 '격물치지'의 핵심이라 하겠다.
 그렇다면 이러한 '격물치지'의 구체적인 방법론으로, 앞서 살펴보았던 '본연지' 즉 직관력을 밝히는 '도道'의 형이상학적 방법 외에 '견문지' 즉 연구력과 분석력을 활용하여 지혜를 이루는 방법에는 어떤 것이 있는가? 이는『중용』을 통하여 살펴볼 수 있다.


     널리 배우고, 치밀하게 질문하며, 신중하게 생각하고, 밝게 분별하며, 독실하게 행동하라.
     博學之 蕃問之 愼思之 明辯之 篤行之

 

사람들이 이러한 '지혜의 습득과정'을 이행하면서 가장 빠지기 쉬운 함정은, 바로 처음부터 멀리 있고 알기 어려운 것을 연구의 대상으로 삼는다는 점이다. 이러한 오류를 피하기 위해서는, 먼저 자신의 '지혜의 수준'을 정확히 파악하는 것이 선행되어야 한다. 『논어』「위정」에서 말하지 않았던가.

     공자님께서 말씀하시길 "자로야, 내가 너에게 '안다고 하는 것'을 가르쳐 주마!
     아는 것을 안다고 하고, 모르는 것을 모른다고 해라.
     이것이라말로 참으로 '안다고 하는 것이다'라고 하셨다."
     子曰 由誨女知之乎 知之爲知之 不知爲不知 是知也

무엇보다 먼저 자신이 '아는 것'과 '모르는 것'을 거짓없이 진실하게 확인해야 한다. 여기서 '속임수'를 부리게 되면, '격물치지'는 물론이거니와 진정한 '덕德'의 완성은 모두 그르치고 만다. (성의誠意가 요구된다.)

이렇게 자신의 위치를 정확히 알게 되면 자신이 알아내야 하는 것이 분명해질 뿐만 아니라, 알아낼 수 있는지 여부 역시 분명해진다. 항상 자신의 '위치'를 분명히 하고, 자신이 현위치에서 알아낼 수 있는 범위내의 것부터 알아내고자 노력해야 한다. 자신이 알아낼 수 있는 최대한까지 알아내고 나면, 다시 자신의 위치가 이동되어서 알아낼 수 있는 영역이 넓어지게 된다. 반드시 자신의 '가까이'에 있는 '알기 쉬운 것'부터 먼저 알아가야 한다.

     간절하게 질문하되, 가까이 있는 것부터 연구하라.
     切問而近思 (『논어』「자장子張」)

 이러한 "가까이 있는 것부터 차근차근 알아가는 과정" (近思)을 통하여 우리는 지금 당장에는 아주 멀리 있는 진리도, 언젠가는 우리의 것으로 삼을 수 있게 되는 것이다. 이 순서를 잊어서는 안 된다. '지혜'는 고원하고, 신비적인 것이 아니다. 바로 '상식'을 남보다 더 정확하고, 더 명확하게 아는 것이다. 멀리 있는 알기 어려운 것보다, 먼저 우리 주위의 알기 쉬운 것부터 하나하나 정확하게 아는 습관을 들여야 한다. 이것이 '격물치지'의 시작이다.
 이러한 사물에 대한 연구를 정성껏 해나가다 보면, 우리는 '격물치지의 극치'에 이르게 된다.

 

4. 질문 메타인지

*생각을 위한 질문법 메타인지
-'아는 것을 안다고 하고 모르는 것을 모른다고 하는 것, 이것이 바로 아는 것이다' -공자
-새로운 것을 생각하기 위해 몇개의 키워드를 조합할때 조합에 관한 전략과 규칙을 만드는 것
 ·긍정적인 문장으로 바꾸기
 ·질문을 위해 '왜'라는 키워드를 추가하기
 ·틀밖의 질문 만들기 : 과정과 문제에 대한 근본적인 의문 ( '문제의 조건이 달랐다면(what if)'과 '그래서 뭐?(so what)')
-결론이 생각을 멈추게 하는가? 질문은 생각을 지속하게 하는가?
-욕구불만과 질문의 차이점은?
 ·질문이 생각의 욕구불만을 만들어내는가?
 ·지속적인 생각을 위해 생각의 욕구불만 수위를 조절한다. (주기적으로 성취감을 맛볼 수 있도록 계획한다. / 미지에 도전하거나 오랫 시간 반복되는 좌절을 참아내면 더 큰 성취감을 얻을 수 있다는 자신감을 키운다)
-사고의 편향성에 주의한다.
 ·인간이 생각하는 방식을 '무의식 또는 본능적이고 자동적인 (그래서 빠른) 시스템1'과 '의식적이고 추론 노력이 필요한 (그래서 느린) 시스템2'의 경쟁으로 보고, 그 두 개의 시스템이 경쟁하는 다양한 상황 및 과정, 그리고 대부분의 상황에서 시스템1이 승리하는 것에 대한 대책(조직적, 시스템적 사고)이 필요하다.

메타생각원리를 간단히 응용한 예로는 '메타질문' 기법이라는 것이 있다. 
메타질문은 문제 속에서 빠져 나와 문제 자체에 대해서 질문을 하는 것이다. 

예를 들면 '왜 이 문제가 존재 하는가',' 왜 나는 이렇게 답을 구하고 있는 가' '그래서 뭐 어쩌라고' 등. 메타질문은 방향성이 없기 때문에 무한히 만들 수 가 있다. 
메타원리를 확장하여 지식 세계로 이동시키면 지식의 메타구조(지식도메인들 사이에서 본질적인 특징을 잡아서 다시 재구성하는 지식도메인)를 만들 수 있다. 
메타구조를 통해 하부지식들 세계를 연결하여 새로운 생각을 다시 만들게 된다. 따라서 메타기법은 수학공부에 잘 적용되며 미술이나 디자인 영역에도 확장이 된다.

 

5. [생각공부가 진짜 공부다④] 생각을 생각하는 메타인지

생각하는 인간의 공부는 학습과 기억으로 인지한다 
생각을 생각하는 내 머릿속의 눈이 메타인지다 
생각을 생각하는 메타인지는 깨우치는 앎을 추구한다 
공부를 잘하는 비결은 결국 메타인지에 있었다 
메타인지적 지식은 성적 좋은 공부로 만든다. 
나의 뇌는 끊임없이 안다고 착각하게 한다
안다고 착각하는 뇌를 즉문즉답으로 일깨워라
설명하기와 수학일기로 메타인지를 강화하라
메타인지적 경험은 감정 실린 공부로 만든다
메타인지적 조절은 요령 있는 공부로 만든다
나의 지식, 감정, 행동 순으로 생각을 생각하라
“너 자신을 알라.”

 

결론

- 나는 무엇을 질문해야 하는가?

 

https://youtu.be/1R1Pq_41wFw

 

반응형

'생각' 카테고리의 다른 글

카피라이터  (1) 2022.12.08
동기부여  (0) 2022.12.06
세컨드 브레인  (0) 2022.11.30
개선하려면 분해해서 본질 찾기  (1) 2022.11.03
글쓰기  (5) 2021.01.14
반응형

[출처] https://tkim.co/2022/06/16/original-zettelkasten/

 

제텔카스텐: 창의적인 아이디어를 만드는 노트법 – 왜 디지털이 아닌 종이가 더 효과적일까 (1)

창의적인 아이디어를 폭발시켜주는 노트법 – 제텔카스텐 니클라스 루만 교수는 생애동안 70여권의 책과 400여편의 논문을 써 냈다. 그의 이론은 사회학뿐만 아니라 경제학, 심리학, 정치학, 종

tkim.co

 

1. 제텔카스텐 / 세컨드브레인 / 노트법

제텔카스텐처럼 노트를 연결할 수 있는 노트앱들이 세컨드 브레인(Second Brain)이라는 마케팅 키워드와 함께 폭발적으로 성장했다.

 

니클라스 루만 교수는 생애동안 70여권의 책과 400여편의 논문을 써 냈다. 그의 이론은 사회학뿐만 아니라 경제학, 심리학, 정치학, 종교학 등의 다양한 학문 분야에 큰 영향을 주었다.

 

이런 놀라운 생산성은 그가 썼던 제텔카스텐(독일어 Zettelkasten = Slip-box)라고 하는 A6 크기의 노트 서랍장이자 노트법에 기인한다고 스스로 주장했다.

노트법은 상당히 간단하다.

  1. 매일 새롭게 알게되는 교훈 중에서 가치 있는 몇 가지를 추려내서, 다른 사람이 읽어도 이해할 수 있도록 글로 짧게 정리한 메모(=노트)를 쓴다. 루만 교수는 책과 논문을 읽으면서 노트를 썼다.
  2. 그런 노트를 기존 노트와 어떻게 연결될 수 있을 지 고민하여 기존 노트와 연결한다.
  3. 특정 주제로 묶을 수 있는 노트들이 충분히 쌓이면 그걸 모아서 긴 글로 쓴다.

 

2. 디지털 제텔카스텐이 동작하지 않는 이유

1. 노트를 다시 보고 아이디어를 결합하는 프로세스가 빠졌다

2. 지식을 저장 하기가 쉬워서 너무 많이 저장한다

3. 디지털에 노트하는 것은 기억하기 더 어렵다

 

3. 세컨드 브레인이란?

[출처]  https://tkim.co/2022/07/16/what-is-second-brain/

외부의 정보를 선별한 뒤 소화하여 내 지식으로 만들고, 이런 지식을 잘 정리하며 쌓아가고, 쌓은 지식 간의 연결을 찾아서 놀라운 아이디어를 만드는, 이 전체 프로세스를 수행하기 위한 여러 도구의 조합 체계

이게 무슨 말이냐고 하면

  • (소화) 정보가 너무 많이 쏟아져 나오니까 외부의 정보를 선별적으로 소화해서 내 지식으로 만들고,
  • (정리) 내 기억에는 한계가 있으니 그런 지식 중에 중요한 것은 노트하여 정리해 두며,
  • (연결) 이전에 해 놓았던 노트간의 연결 고리를 찾는 작업을 틈틈이 해서 놀라운 아이디어를 만들어 내는 것을

잘 하기 위해서 프로세스도 만들고, 그 프로세스를 수행하는데 여러 가지 도구도 쓰고 해서 체계를 만들어 놓은 것이 세컨드 브레인이라는 것이다.

 

이런 (정리)를 하는데 사용하는 앱들이 롬리서치, 옵시디언 등의 네트워크 노트앱들이다.

 

이때 (정리) 부분 혹은 (소화)-(정리)-(연결) 전체를 가리켜 개인 지식 관리 (PKM, Personal Knowledge Management)라고 부르기도 한다.

제텔카스텐은 (연결) 부분을 잘 하기 위한 별도의 메모 방법이다.

 

4. 지식의 연결

현재의 지식 연결 방법

다른 사람과 대화를 나누고 상담을 하는 것, 브레인스토밍, 아이디어 혹은 기획 회의가 우리가 가장 쉽게 지식을 연결하려고 시도하는 방법이다. 글을 쓰기 위해서 글감을 살펴보고 글을 써 내려갈 아이디어를 만들어 가는 과정도 이런 연결의 과정이다. 샤워를 하다가 무의식 중에 아이디어를 떠올리는 것은 내 머릿속의 두 아이디어가 새로운 맥락 아래서 결합되는 과정이다. 하지만 우리가 의식적으로 이러한 지식을 연결을 더 잘할 수 있도록 하는 노력을 하고 있지는 않다.

 

니클라스 루만의 제텔카스텐

루만 교수의 제텔카스텐은 간단해 보이는 방법이지만 우리가 지식을 정리할 때 놓치고 있는 가장 중요한 점을 일깨워준다. 끊임 없이 반복해서 정리된 지식 노트들을 살펴보면서 내 머릿속에 현재 있는 지식들과 새로운 연결 고리를 찾게 된다. 그런 의도적인 노력을 할 수 밖에 없는 것이 제텔카스텐 메모법이다. 이로 말마임아 창의적인 아이디어를 더 많이 만들어 낼 수 있게 된다.

그 외에도 지식을 연결하는 방법은 범죄 수사처럼 화이트보드를 사용하는 것, 제임스 알투처(James Altucher)의 아이디어 머신 방법, 닉 마일로(Nick Milo)의 MoC (Map of Contents) 작성 방법, 앤디 마추샥(Andy Matuschak)의 에버그린 노트 (Evergreen Note) 방법 등이 있다.

 

5. 세컨드 브레인은 쉽지 않다

소화 → 정리 → 연결의 예시들을 보면서 느꼈겠지만 … 안타깝게도 현재는 세컨드 브레인을 구축하는 것, 실행하는 것이 너무나도 어렵다.

다양한 방법을 배워서 내 것을 찾아야 하며, 하드웨어 – 소프트웨어 툴의 사용법도 배워야 하며, 의지를 가지고 계속 실행해야 하기 때문이다. 또한 세컨드 브레인 분야는 글로벌하게도 이제 막 사람들의 관심을 받기 시작한 분야라서 자료도 많지 않고 있는 자료도 정확하지 않은 경우가 많다.

그래서 나는 지금 당장에는 세컨드 브레인 전체를 구축하고 효과를 볼 수 있는 사람은 (1) 정리를 정말 좋아하거나, 정리하지 않으면 생계가 어려워지는 상황에 있는, 그리고 (2) 이런 작업을 꾸준히 시간을 내어 수행할 수 있는 강한 의지가 있는 사람들에 한정된다고 생각한다.

만일 자신이 이런 사람이 아니라면, 모든 단계를 구축하기 보다 자신에게 가장 효용이 큰 일부분을 찾아서 그 부분만 구축하고 실행하는 것이 현재는 현실적인 방안이다.

 

6. 얼마나 노력하느냐 보다 무엇을 하느냐가 더 중요하기 때문이다.

[출처] https://tkim.co/2022/09/27/why-i-write-10x-blog/

 

많은 노력을 하는 것을 폄하하는 것이 아니다. 성과에 큰 영향을 주는 것은 그 성과를 내기 위해서 무엇을 하느냐가 더 중요하고, 그 다음에야 얼마나 노력하느냐가 중요하다는 얘기이다. 이건 사람 관계에 있어서도, 개인의 행복에 있어서도, 일에 있어서도 모두 동일하게 적용 된다고 나는 믿게 되었다.

그럼 그 “무엇”을 어떻게 찾아갈 수 있을까?

그걸 운에 맞겨야 하나? 그 운의 확률을 조금이라도 높일 수 있는 알고리즘은 없을까? 프로세스는 없을까?

 

이것들을 찾아 가는 과정을 글로 쓴 것이 나의 10x 블로그이다.

과정에서 발견한 도구

  • 성공하는 사업 아이디어를 찾아 가는 고객 개발 (혹은 린스타트업) 방법론,
  • 직접 소프트웨어를 개발하기 보다 그 과정을 개발자 없이 하게 해 주는 노코드
  • 그리고 상향식(Bottom-up)으로 놀라운 아이디어를 만들어 내는 제텔카스텐 노트법이다
반응형

'생각' 카테고리의 다른 글

동기부여  (0) 2022.12.06
질문의 원리  (0) 2022.12.01
개선하려면 분해해서 본질 찾기  (1) 2022.11.03
글쓰기  (5) 2021.01.14
집중이 힘들고 피곤한 일인가?  (0) 2020.12.02
반응형

https://www.summarizingtool.net/

 

Summarizing Tool - Best Text Summary Generator Tool

AdBlock Detected! Our website is made possible by displaying ads to our visitors. Please support us by whitelisting our website.

www.summarizingtool.net

- 한글도 잘됩니다.

- 품질이 좋습니다.

- 핵심 구절들도 보여줍니다.

반응형
반응형

[출처] https://medium.datadriveninvestor.com/the-supertrend-implementing-screening-backtesting-in-python-70e8f88f383d

 

The Supertrend — Implementing, Screening & Backtesting in Python

Everything you need to know about this simple yet powerful indicator.

medium.datadriveninvestor.com

  1. Introduction to the Supertrend
  2. Implementation in Python: calculation & visualization
  3. Backtesting & parameter optimization
  4. Screening

1. Supertrend 

Supertrend는 ATR(Average True Range)과 간단한 고저 평균을 사용하여 더 낮은 값을 형성하는 추세 추종 지표입니다. 

상단 밴드. 지표의 요지는 종가가 상단 밴드를 넘을 때 주가가 상승 추세에 진입한 것으로 간주되어 매수 신호입니다. 

종가가 하단 밴드 아래로 교차하면 해당 주식은 추세를 이탈한 것으로 간주되어 매도 시점입니다.

많은 차트 플랫폼에서 Supertrend는 일반적으로 위쪽 밴드는 빨간색으로 아래쪽 밴드는 녹색으로 표시됩니다.

 

2. 구현

HL2 = (high + low)/2

MULT is just a constant multiplier, and 

ATR is the average of True Range (TR), which is simply the maximum value of 3 price differences: max[(high-low), |high — previous close|, |previous close — low|] .

UPPERBAND = HL2 + MULT * ATR
LOWERBAND = HL2 - MULT * ATR

 

최종 상위 대역은 더 높은 상위 대역 값이 있을 때까지 동일하게 유지되며 그 반대의 경우도 마찬가지입니다.

import pandas as pd
import numpy as np
from datetime import datetime
import yfinance as yf
import math
import matplotlib.pyplot as plt

def Supertrend(df, atr_period, multiplier):
    
    high = df['High']
    low = df['Low']
    close = df['Close']
    
    # calculate ATR
    price_diffs = [high - low, 
                   high - close.shift(), 
                   close.shift() - low]
    true_range = pd.concat(price_diffs, axis=1)
    true_range = true_range.abs().max(axis=1)
    # default ATR calculation in supertrend indicator
    atr = true_range.ewm(alpha=1/atr_period,min_periods=atr_period).mean() 
    # df['atr'] = df['tr'].rolling(atr_period).mean()
    
    # HL2 is simply the average of high and low prices
    hl2 = (high + low) / 2
    # upperband and lowerband calculation
    # notice that final bands are set to be equal to the respective bands
    final_upperband = upperband = hl2 + (multiplier * atr)
    final_lowerband = lowerband = hl2 - (multiplier * atr)
    
    # initialize Supertrend column to True
    supertrend = [True] * len(df)
    
    for i in range(1, len(df.index)):
        curr, prev = i, i-1
        
        # if current close price crosses above upperband
        if close[curr] > final_upperband[prev]:
            supertrend[curr] = True
        # if current close price crosses below lowerband
        elif close[curr] < final_lowerband[prev]:
            supertrend[curr] = False
        # else, the trend continues
        else:
            supertrend[curr] = supertrend[prev]
            
            # adjustment to the final bands
            if supertrend[curr] == True and final_lowerband[curr] < final_lowerband[prev]:
                final_lowerband[curr] = final_lowerband[prev]
            if supertrend[curr] == False and final_upperband[curr] > final_upperband[prev]:
                final_upperband[curr] = final_upperband[prev]

        # to remove bands according to the trend direction
        if supertrend[curr] == True:
            final_upperband[curr] = np.nan
        else:
            final_lowerband[curr] = np.nan
    
    return pd.DataFrame({
        'Supertrend': supertrend,
        'Final Lowerband': final_lowerband,
        'Final Upperband': final_upperband
    }, index=df.index)
    
    
atr_period = 10
atr_multiplier = 3.0

symbol = 'AAPL'
df = yf.download(symbol, start='2020-01-01')
supertrend = Supertrend(df, atr_period, atr_multiplier)
df = df.join(supertrend)

차트

# visualization
plt.plot(df['Close'], label='Close Price')
plt.plot(df['Final Lowerband'], 'g', label = 'Final Lowerband')
plt.plot(df['Final Upperband'], 'r', label = 'Final Upperband')
plt.show()

 

3. 백테스팅

def backtest_supertrend(df, investment):
    is_uptrend = df['Supertrend']
    close = df['Close']
    
    # initial condition
    in_position = False
    equity = investment
    commission = 5
    share = 0
    entry = []
    exit = []
    
    for i in range(2, len(df)):
        # if not in position & price is on uptrend -> buy
        if not in_position and is_uptrend[i]:
            share = math.floor(equity / close[i] / 100) * 100
            equity -= share * close[i]
            entry.append((i, close[i]))
            in_position = True
            print(f'Buy {share} shares at {round(close[i],2)} on {df.index[i].strftime("%Y/%m/%d")}')
        # if in position & price is not on uptrend -> sell
        elif in_position and not is_uptrend[i]:
            equity += share * close[i] - commission
            exit.append((i, close[i]))
            in_position = False
            print(f'Sell at {round(close[i],2)} on {df.index[i].strftime("%Y/%m/%d")}')
    # if still in position -> sell all share 
    if in_position:
        equity += share * close[i] - commission
    
    earning = equity - investment
    roi = round(earning/investment*100,2)
    print(f'Earning from investing $10000 is ${round(earning,2)} (ROI = {roi}%)')
    return entry, exit, equity
    
entry, exit, roi = backtest_supertrend(df, 10000)

차트

# visualization
plt.figure(figsize=(12,6))
plt.plot(df['Close'], label='Close Price')
plt.plot(df['Final Lowerband'], 'g', label = 'Final Lowerband')
plt.plot(df['Final Upperband'], 'r', label = 'Final Upperband')
for x,y in entry:
    plt.scatter(x=datetime.strptime(x, '%Y-%m-%d'), y=y, c="green", marker="^")
for x,y in exit:
    plt.scatter(x=datetime.strptime(x, '%Y-%m-%d'), y=y, c="red", marker="v")

plt.show()

 

4. 종목 검색

다음 코드는 먼저 S&P 500 주식 목록의 각 기호를 살펴보고 방금 Supertrend에 진입한 종목을 걸러냅니다.

# get the full stock list of S&P 500
payload = pd.read_html('https://en.wikipedia.org/wiki/List_of_S%26P_500_companies')
stock_list = payload[0]['Symbol'].values.tolist()
supertrend_stocks = []
# loop through each symbol
for symbol in stock_list:
    try:
        df = yf.download(symbol, start='2021-01-01', threads= False)
    except Exception as e:
        print(e)
    if len(df) == 0: continue
    supertrend = Supertrend(df, atr_period, atr_multiplier)
    if not supertrend['Supertrend'][-2] and supertrend['Supertrend'][-1]:
        supertrend_stocks.append(symbol)

print(supertrend_stocks)
반응형
반응형

20220531

한 장의 종이를 오려서 자동차 만들기

첫번째 떠오른 생각과 작은 문제들을 해결하기

그 자리에 머물지 않고 크게 지속적으로 개선하려면?

종이로 자동차 만들기를 구분과 단계로 해체해서

(왜 나누어야 하는가?는... 복잡한 것을 만들거나 해결하기 위해서 인간의 인식 한계를 극복하는 방법

완성되거나 검증된 복잡한 것의 하부 단위들은 오류가 없을 것이라고 전체로 인식한다.)

작은 본질들로 만들기

해체 작업을 통해서 작은 문제들로 만들기

작은 본질들의 무수한 조합들로 창작되는 무수한 자동차들

무수한 자동차들의 순위들을 정하려면?

무수한 자동차들 중에서 의미있는 자동차들을 찾으려면?

의미있다란?

본질이란?

왜 본질들로 나눠야 하는가?

본질찾기는 구분과 해체로만 되는가?

이러한 일련의 과정의 최종 목적지는?

분해 과정에서 새롭게 창조되는 개념들

최소한의 본질만으로 이루어진 핵심

새롭게 나타나는 것들이 생각하는 나의 경험, 배움과 생각의 한계에서 벗어나려면?

해체, 본질, 문제해결, 조합, 순위, 의미 등 모든 과정이 시스템화, 자동화

이러한 접근법을 주식거래에 적용하면

주식거래를 작은 본질들로 나누기

나타나는 문제들을 해결하고 실행 가능한 이문을 남기는 주식거래들 찾기

다른 사람들이 이전에 해놓은 해체, 조합 작업들을 찾아서 정리, 요약, 순위 정해서 나의 시도들에 시간과 노력을 절약하고 최신, 최고버전에 도달하기

최신, 최고에서 한 발자국 더 나가려면?

더 쪼갤 수 있는가?

더 새로운 조합을 찾을 수 있는가?

나와 다른 남들의 순위

남들의 순위를 알아내고 남들을 만족시키려면?

 

 

반응형

'생각' 카테고리의 다른 글

질문의 원리  (0) 2022.12.01
세컨드 브레인  (0) 2022.11.30
글쓰기  (5) 2021.01.14
집중이 힘들고 피곤한 일인가?  (0) 2020.12.02
기계 인공지능 의식의 출발점 질문  (0) 2020.11.24
반응형

[Bitget Futures API 사용 주의사항]

  • ccxt 연결시 options defaultType 에 future 대신 swap 사용
    • exchange = ccxt.bitget({

                                                       'apiKey': 'xxx',

                                                       'secret': 'yyy,

                                                       'password': 'zzz',

                                                       'options': {'defaultType': 'swap'},

                                                     })

  • 주문시 리턴값으로 가격 등등.. 빈값이고 id 만 리턴 됨.
    • fetch_order(id) 로 다시 가져와야 함

 


[프로그램 소스]

import ccxt, time, sys

SYMBOL = "ETH/USDT:USDT"
POSITION_SIZE = 0.02

# gridbot settings
NUM_BUY_GRID_LINES = 3
NUM_SELL_GRID_LINES = 3
GRID_SIZE = 4

# 너무 짧으면 간혹 가져오기 실패..
CHECK_ORDERS_FREQUENCY = 0.2

CANCELED_ORDERS_STATUS = "canceled"
CLOSED_ORDER_STATUS = "filled"

exchange = ccxt.bybit({
    "apiKey": "xxx",
    "secret": "yyy",
    "password": "zzz",
    "options": {"defaultType": "swap"}
})

buy_orders = []
sell_orders = []

def new_buy_orders():
    ticker = exchange.fetch_ticker(SYMBOL)
    for i in range(NUM_BUY_GRID_LINES):
        price = ticker['close'] - (GRID_SIZE * (i+1))
        print("신규 Buy : {}".format(price))
        order = exchange.create_order(symbol=SYMBOL, type='limit', side='buy', \
                                        amount=POSITION_SIZE, price=price, \
                                        params={'reduce_only': False})
        time.sleep(CHECK_ORDERS_FREQUENCY)
        order = exchange.fetch_order(symbol= SYMBOL, id= order['info']['orderId'])
        buy_orders.append(order['info'])

def new_sell_orders():
    ticker = exchange.fetch_ticker(SYMBOL)
    for i in range(NUM_SELL_GRID_LINES):
        price = ticker['close'] + (GRID_SIZE * (i+1))
        print("신규 Sell : {}".format(price))
        order = exchange.create_order(symbol=SYMBOL, type='limit', side='sell', \
                                        amount=POSITION_SIZE, price=price, \
                                        params={'reduce_only': False})
        time.sleep(CHECK_ORDERS_FREQUENCY)
        order = exchange.fetch_order(symbol= SYMBOL, id= order['info']['orderId'])
        sell_orders.append(order['info'])

new_buy_orders()
new_sell_orders()

while True:
    closed_order_ids = []

    for buy_order in buy_orders:
          
        try:
            order = exchange.fetch_order(symbol=SYMBOL, id=buy_order['orderId'])
        except Exception as e:
            print("주문 체크 오류 : ", e)
            continue
            
        order_info = order['info']

        if order_info['state'] == CANCELED_ORDER_STATUS:
            closed_order_ids.append(order_info['orderId'])

        if order_info['state'] == CLOSED_ORDER_STATUS:
            closed_order_ids.append(order_info['orderId'])
            print("{} 체결 : {}".format(order_info['side'], order_info['price']))

            if order_info['side'] == 'open_long': 
                new_side = 'close_long'
            else:
                new_side = 'open_short'
            new_sell_price = float(order_info['price']) + GRID_SIZE
            print("{} 추가 : {}".format(new_side, new_sell_price))
            # 기존 주문이 신규이면 새로운 청산 주문, 기존 주문이 청산이면 신규 주문
            new_reduce_only = not order_info['reduce_only']
            new_sell_order = exchange.create_order(symbol=SYMBOL, type='limit', side='sell', \
                                    amount=POSITION_SIZE, price=new_sell_price, \
                                    params={'reduce_only': new_reduce_only})
            sell_orders.append(new_sell_order['info'])

        time.sleep(CHECK_ORDERS_FREQUENCY)

    for sell_order in sell_orders:
        
        try:
            order = exchange.fetch_order(symbol=SYMBOL, id=sell_order['order_id'])
        except Exception as e:
            print("request failed, retrying : ", e)
            continue
            
        order_info = order['info']

        if order_info['order_status'] == CLOSED_ORDER_STATUS:
            closed_order_ids.append(order_info['order_id'])
            print("Sell 체결 : {}".format(order_info['price']))

            if order_info['side'] == 'open_short': 
                new_side = 'close_short'
            else:
                new_side = 'open_long'

            new_buy_price = float(order_info['price']) - GRID_SIZE
            print("{} 추가 : {}".format(new_side, new_buy_price))
            # 기존 주문이 신규이면 새로운 청산 주문, 기존 주문이 청산이면 신규 주문
            new_reduce_only = not order_info['reduce_only']
            new_buy_order = exchange.create_order(symbol=SYMBOL, type='limit', side='buy', \
                        amount=POSITION_SIZE, price=new_buy_price, \
                        params={'reduce_only': new_reduce_only})
            buy_orders.append(new_buy_order['info'])

        time.sleep(CHECK_ORDERS_FREQUENCY)

    for order_id in closed_order_ids:
        buy_orders = [buy_order for buy_order in buy_orders if buy_order['orderId'] != order_id]
        sell_orders = [sell_order for sell_order in sell_orders if sell_order['orderId'] != order_id]

    if len(sell_orders) == 0:
        print("새로운 Sells")
        new_sell_orders()

    if len(buy_orders) == 0:
        print("새로운 Buys")
        new_buy_orders()

 

 

반응형
반응형

2022-05-25 기준

- 거래소 정보 출처 : https://exchangewar.info/

- 코인 정보 출처 : https://coinmarketcap.com/

- Kucoin(쿠코인) / Binance(바이낸스) 비교표

Kucoin(쿠코인)
Binance(바이낸스)
거래소 순위
12위
4위
거래소 24시간 거래 규모
54,059 BTC
338,406 BTC (6.25 배)
발행코인
KCS
BNB
발행코인 Market Cap
(40위) $1,564,409,957
(5위) $53,288,881,917 (34 배)
발행코인 가격
$15.91
$326.16 (20.5 배)
발행코인 Circulating Supply
98,379,860.95 KCS
58%
163,276,974.63 BNB
99%
발행코인 Max Supply
170,118,638
165,116,760
발행코인 Total Supply
145,879,861
163,276,975
총소각 수량
24,238,777 KCS
1,839,786 BNB
총소각 금액
~ $385,638,942 USD
~ $741,840,738 USD
배당 이자 수익
KCS 보유자에게 매일 배당
BNB 스태킹으로 이자 받을 수 있음

Dear KCS Holders,

To accelerate the process of KCS burn and adapt to the market development more efficiently, the KCS team decides to adjust the period of KCS buyback and burn from each quarter to each month.

The KCS team has executed the 157,537 KCS burn for April, 2022. The estimated burning amount is 2,398,117 USDT, which is 10% of the April income of KuCoin.

Burn Txid: https://explorer.kcc.io/en/tx/0xdc03a0358b6cf56af3473ec7b47422fa4a054f4a33375224387d718c781f9f80

Current KCS Circulating Supply: 97,984,145 KCS

Current KCS Total Supply: 145,484,145 KCS

총소각 : 24,238,777 KCS

총소각 금액 : ~$385,638,942 USD

- BNB 소각

https://www.binance.com/en/blog/ecosystem/19th-bnb-burn-421499824684903705

19th BNB Burn

2022-04-26

For this past quarter, BNB completed its second quarterly BNB Auto-Burn. A total of 1,839,786.26 BNB, or the equivalent of $741,840,738.874 USD, was removed from circulation. This includes 9,403.78 BNB that was burned from the Pioneer Burn Program.

Here are the facts and figures from our latest burn:

Total BNB burned: 1,839,786.26 BNB

Approximate value in USD: ~$741,840,738.874 USD

Transaction ID (TXID) for BNB burn: View transaction

BNB burned from the Pioneer Burn Program: 9,403.78 BNB


[Kucoin 쿠코인 앱 다운로드]

Kucoin(쿠코인) 가입 -> https://www.kucoin.com/r/E3bNRN

 

 

 

반응형
반응형
 

- จำนวนผู้ใช้การแลกเปลี่ยนสกุลเงินดิจิตอล Kucoin เกิน 10 ล้านคนทั่วโลก

 

- มีฟังก์ชันการทำธุรกรรมต่างๆ เช่น เหรียญเงินปันผล (xtz, trx, atom, luna, dot..) เงินปันผล, กิจกรรมการออกเหรียญใหม่, ธุรกรรมที่มีเลเวอเรจ, บอทซื้อขายอัตโนมัติ เป็นต้น

ซื้อขายแลกเปลี่ยนสกุลเงินดิจิตอล Kucoin ที่เติบโตอย่างต่อเนื่อง

 

 หากคุณถือครอง Kucoin สกุลเงินดิจิตอลที่แนะนำ (KCS) คุณจะได้รับเงินปันผลรายวัน

(เมื่อซื้อ KCS ค้างไว้ กรุณากดปุ่มจ่ายเงินปันผลวันละครั้ง~)

 

 

 

- กฎการเดินทางแลกเปลี่ยนต่างประเทศ (Koocoin) การฝากและถอนเงินดิจิตอล

กฎการเดินทาง สกุลเงินดิจิตอล การฝากและถอนเงินในต่างประเทศ

 

 

- เข้าร่วม Kucoin  ->https://www.kucoin.com/r/E3bNRN

 

 

 

반응형

+ Recent posts