스톱로스 오더

마지막 업데이트: 2022년 6월 23일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
바이낸스 Trailing Stop 기능

TreeOF의 세상 이야기

경제 또는 투자 분야에서 자주 사용되는 용어였지만 최근 여러 곳에서 비유적으로 사용되는 것이 있습니다. 바로 손절이라는 표현입니다. 손절의 뜻은 무엇일까요? 쉽게 말하면 손실을 보더라도 잘라내는 것을 말합니다. 더욱 자세한 내용을 알아보겠습니다.

1. 손절(cut loss) 뜻은?

to stop an activity, business, etc.,
that is failing in order 스톱로스 오더 to prevent more losses or damage

손절은 영어로 컷 로스(cut loss) 또는 스톱 로스(stop loss)라고 합니다. 컷 로스는 '더 큰 손해나 피해를 막기 위해 사업이나 활동 등을 중단하는 것'이라는 뜻을 가지고 있습니다. 즉, 투자한 것이 손해를 보더라도 투자를 그만두는 것을 말합니다. 한편 손절은 잃다, 손해를 보다를 의미하는 損(손)과 베어내다, 끊다를 의미하는 切(절)이라는 한자로 구성되어 있습니다.

2. 손절 - 비유적 표현

경제 분야에서만 사용될 것 같은 손절이라는 단어가 사회적 관계에 활용되고 있습니다. 바로 누군가와의 관계를 끊어낼 때 손절이라고 부르는 것입니다. 특정 사람과 관계를 이어갈 때 한 사람만 지속적으로 감정적, 금전적으로 손해를 본다면 문제가 있습니다.

이러한 문제 상황에서는 대화를 통해 관계를 재정립하는 방법도 있고, 손절을 통해 관계 자체를 끝내는 방법도 있습니다. 원래 손절이 가진 의미를 잘 생각해 본다면 굉장히 적절한 표현이라고 할 수 있습니다. 사회적 관계를 이어갈 때, 미래에 입을 피해를 더 이상 당하지 않기 위해 끊어내는 것입니다.

3. 손절은 왜 중요할까?

그렇다면 투자에서 손절은 왜 중요하며 수많은 사람들이 강조할까요? 여러 이유가 있을 수 있겠지만 손절이 중요한 대표적인 이유는 다음과 같습니다.

  • 첫째, 여러 투자 기회를 놓칠 수 있기 때문입니다. 보통의 투자자라면 투자 금액이 무한하지 않습니다. 정해진 투자 금액에서 최대한의 효율을 내야 합니다. 그러나 손해 보는 종목에 투자금이 묶여 있다면 다른 곳에 투자할 기회를 상실하는 것을 의미합니다.
  • 둘째, 산업의 흐름이 변화된 것일 수 있습니다. 투자한 기업이 산업의 흐름에 뒤처지고 있다면 치명적인 결과가 나올 수 있습니다. 실제로 스마트폰 시장으로 변화하는 2010년 초반에 수많은 기업이 휘청거렸습니다. 또한 필름 카메라에서 디지털카메라로 수요가 이동하던 시기에도 많은 기업들이 쇠퇴하였습니다. 한번 바뀐 산업의 변화는 다시 돌아오기 힘들기 때문에 적절한 순간에 손절하는 것이 중요합니다.
  • 셋째, 심리적으로 영향을 받기 때문입니다. 투자에서 심리적인 요인이 중요하다는 것은 널리 알려져 있습니다. 손절하지 않고 계속 손해가 누적된다면 다른 매매에도 영향을 주게 됩니다. 다른 곳에서 더 큰 수익을 내기 위해서 심리적으로 악영향을 주는 것을 과감히 처리할 필요가 있습니다.

물론 손절하는 순간 투자한 기업의 가치가 다시 올라갈 수 있습니다. 그러나 그러한 상황만을 기대하다가는 돌이킬 수 없는 손해로 이어질 수 있습니다. 때로는 아픔을 참고 과감한 선택을 하는 것이 좋을 수도 있습니다. 항상 신중하게 선택하시길 바랍니다.

지금까지 손절이라는 용어의 뜻과 쓰임에 대해서 알아보았습니다. 투자에서 정말 중요한 개념이기 때문에 항상 인지하시길 바랍니다. 또한 아무리 투자를 잘하는 사람이라도 손절은 반드시 합니다. 심리적으로 잠시 힘드셔도 더 큰 성장을 위한 값을 지불했다고 긍정적으로 생각하셔야 합니다. 위의 내용을 요약하면 다음과 같습니다.

스톱로스 오더

잠깐! 현재 Internet Explorer 8이하 버전을 이용중이십니다. 최신 브라우저(Browser) 사용을 권장드립니다!

  • 기사공유하기
  • 프린트
  • 메일보내기
  • 글씨키우기
    • 가나다라마바사
    • 가나다라마바사
    • 가나다라마바사
    • 가나다라마바사
    • 가나다라마바사
    • 가나다라마바사
    • 승인 2013.03.07 14:02
    • 댓글 0
    • 기사공유하기
    • 프린트
    • 메일보내기
    • 글씨키우기
      • 가나다라마바사
      • 가나다라마바사
      • 가나다라마바사
      • 가나다라마바사
      • 가나다라마바사
      • 가나다라마바사

      외환시장에서 이용 가능한 여러 형태의 주문방법을 알아보자. 모든 온라인 브로커들이 모든 형태의 주문이 가능하지는 않다. 그렇기 때문에 자신이 거래하고 있는 브로커가 어떤 타입의 주문이 가능한지를 미리 체크해 놓고 거래를 시작하는 것이 좋다.

      -이익제한 주문(Limit Order)

      이익제한주문이란 거래를 시작할 때 자신이 예상하는 목표치를 설정하여서 그만큼의 이익을 생각하고 거래에 임한다는 얘기이다.

      즉, 매수 포지션을 가졌다면 매입한 통화가격이 올라야만 돈을 버는 것이므로 애초에 매입한 가격보다 더 위쪽에 limit 주문을 내고, 매도 포지션을 가진 경우에는 진입한 가격보다 더 떨어져야 돈을 버는 것이므로 애초에 매도한 가격보다 더 아래쪽에 limit 주문을 내는 것이다.

      -이익 실현 주문 (Profit-taking order)

      이익실현 주문은 생각만 해도 행복하다. 사람들은 이익을 종종 실현하다보면 파산하지는 스톱로스 오더 않는다고 말한다.

      오픈 포지션을 가졌을 경우 이익실현 주문을 이용해보자. 만일 USD/YEN을 82.20에 숏 포지션을 가지고 있다면 82.20 보다 낮은 환율, 즉 81.80에 달러를 다시 되사는 이익실현 주문을 내보자. 또, GBP/USD를 1.6040에 롱 포지션을 가지고 있다면, 이익실현 주문을 1.6070에 내 포지션보다는 조금 높은 가격에 이익실현 주문을 내보자.

      또 가지고 있는 오픈포지션의 일부분을 이익실현 주문을 스톱로스 오더 낼 수도 있다. 예를 들면, 유로화가 올라갈 것을 대비하여 200,000 EUR/USD를 1.2950에 롱 포지션을 거래하였다고 하면 그 중 반 정도의 포지션인 100,000 EUR/USD 을 1.3000에 이익실현을 하고, 나머지 100,000 EUR/USD는 더 올라갈 것을 기대하여 조금만 더 기다리는 것이다. 이와 같이 부분적인 이익실현 주문을 내서 전체 포지션을 두 개로 나누어서 각각 다른 레벨로 주문해 볼 수도 있다.

      -손실제한 주문 (stop-loss order)

      가장 싫어하는 주문이다. 사실상 스톱로스 주문은 트레이딩의 생존전략을 위해서 불가피한 주문이다.

      전통적으로 스톱로스 주문은 손실을 보고 있는 오픈 포지션을 끝내기 위한 주문으로 시장이 거꾸로 움직일 것을 대비한 주문이다. 포지션을 그냥 시장에 맡겨 두는 것은 항상 위험에 노출된 사업을 경영하는 것과 마찬가지이다.

      롱 포지션인 경우의 스톱로스 주문은 현재가격보다도 더 낮은 가격에 파는 것을 말하고, 숏 포지션의 스톱로스 주문은 현재 시장가격보다 더 높은 가격에 사는 주문을 내는 것을 말한다.

      위에서 설명한 여러 가지 주문내용을 간단히 정리해보자면 이익방향은 limit order이고, 손해 방향은 stop loss order 라고 생각하면 된다.

      다시 말하면 매수진입을 한다면 매수한 포지션의 가격이 올라야 돈을 버는 것이므로 위쪽에는 limit order, 매수한 포지션의 가격이 떨어진다면 손해를 보는 것이므로 아래쪽에는 stop loss order를 두면 된다.

      반대로 매도진입을 한다면 매도한 포지션의 가격이 떨어져야 돈을 버는 것이므로 아래쪽은 limit order, 매도한 포지션이 오르면 손해를 보는 것이므로 위쪽이 stop loss order가 되는 것이다.

      Technology & Finance

      과거 포스팅에서 올려드린 트레일링 스탑을 활용한 자동 매도 프로그램에서 매수 후 바로 매도가 되어 버리는 현상이 발생한다는 댓글을 달아주신 분이 계셔서 프로그램을 분석해 본 결과 업비트 API의 치명적인 오류가 발견되었습니다.

      문제는 업비트 API를 이용해서 보유 코인 리스트(get_accounts)를 할 때 발생하는 것으로 확인 되었으며 현상은 매수 직후에 매수가격이 올바르지 않게 조회되는 현상입니다. 예를들어 도지코인을 300원에 매수했음에도 불구하고 매수 직후에 조회된 잔고 자료에는 평균매수가격이 400원이나 200원 등으로 높거나 낮게 조회되어 수익 후 매도 로직이나 손절 로직을 타게 되는 현상입니다. 그리고 몇 초후에 다시 조회하면 올바르게 300원으로 조회가 됩니다.

      오류 현상은 매수 직후에만 간헐적으로 나타나고 발생하지 않을 때도 있기 때문에 발견하기가 쉽지는 않았습니다.

      그래서 이번 포스팅에서는 해당 부분을 일부 보완하여 만든 트레일링 스탑을 활용한 자동 매도 프로그램 수정본을 다루어 보도록 하겠습니다.

      트레일링 스탑을 활용한 자동매도 프로그램

      공통 모듈 - upbit.py

      매도 프로그램 - sell_bot.py

      오류 현상이 매수 직후에 짧은 시간(대략 1~2초)에만 발생하고 다시 정상적으로 조회 되기 때문에 매수 시간을 조회하여 매수 후 1분(60초) 동안은 매도를 진행하지 않도록 로직을 추가 하였습니다.

      트레일링 스탑을 이용한 매도 프로그램은 일봉 보다는 60분봉 정도가 적당해 보여서 분봉의 기준을 기존 일봉(D)에서 60분봉(60)로 수정하였습니다.

      기존 일봉을 60분 봉으로 수정하는 경우에 고려해야 할 부분은 업비트 API 제약으로 캔들을 200개까지만 조회할 수 있기 때문에 과거 시점 조회가 가능한 기간은 200시간이며 일수로는 대략적으로 8일 정도가 됩니다. 그래서 60분봉으로 수정하는 경우 매수 시점 이후로 8일 동안 매도가 되지 않으면 올바른 매수 후 고점을 찾기가 어려워지게 됩니다.

      최근 업비트에 새롭게 상장되는 코인들이 있거나 정기 점검이 있는 경우 프로그램이 기타 오류로 자주 종료 되는 현상이 있었습니다. 계속해서 돌아가야 하는 프로그램이 다른 일을 하고 오면 멈춰 있어서 다시 돌려야만 했는데요.

      이런 현상을 극복하기 위해서는 가정용 윈도우 PC에서 프로그램을 수행하는 것 보다는 서버에서 수행하는 것이 대안이 될 수 있습니다. 가정용 윈도우 PC에서도 프로세스를 감지하고 띄울 수 있는 방법이 있지만 원하는 만큼 정확하게 동작하지 않을 뿐더러 PC 자체가 주기적인 업데이트로 재부팅 되기 때문에 24/7으로 프로그램을 가동하기에는 적합한 환경이 아닙니다.

      그래서 앞으로 리눅스 환경에서 파이썬을 설치하고 프로그램을 24/7 동안 최소한의 끊김으로 수행할 수 있는 환경을 만들어 보려고 합니다. 물론 리눅스에 대한 지식이 조금은 필요하겠지만 쉽게 따라하실 수 있도록 차근차근 연재해 보도록 하겠습니다.

      블로그를 구독하시면 소식을 조금 더 빨리 받아 보실 수 있습니다. 감사합니다.

      '프로젝트 > 비트코인 자동매매' 카테고리의 다른 글

      파이썬 업비트 웹소켓 접속방법 - 비트코인 자동매매 프로그램 (17) 2022.01.14
      리눅스 서버에서 비트코인 자동매매 프로그램 스케쥴 등록하여 실행하기 (9) 2022.01.12
      리눅스 서버에서 비트코인 자동매매 프로그램 실행하기 (33) 2021.12.21
      트레일링 스탑 자동 매도 프로그램(수정본) - 파이썬 업비트 비트코인 자동매매 (38) 2021.11.24
      비트코인 자동 매수 프로그램(수정본) - 파이썬 업비트 비트코인 자동매매 (23) 2021.11.23
      보유코인 모니터링 및 알림 메세지 발송하기 - 파이썬 업비트 비트코인 자동매매 (23) 2021.11.16
      원하는 보조지표만 한번에 조회하기 - 파이썬 업비트 비트코인 자동매매 (14) 2021.11.12

      '프로젝트/비트코인 자동매매'의 다른글

      • 이전글 비트코인 자동 매수 프로그램(수정본) - 파이썬 업비트 비트코인 자동매매
      • 현재글 트레일링 스탑 자동 매도 프로그램(수정본) - 파이썬 업비트 비트코인 자동매매
      • 다음글 플레이댑 코인 바이낸스 상장 - PLA 코인
        이전 댓글 더보기

      웹소켓을 이용하지 않으면, 하나 또 생각해 봤는데요. 만약 api호출 제한으로 튕겨 나가면 로직을 다시 시작하게 끔 보완할 수 있게 코드를 고치려면 except에 다시 매수로직 호출하면 번번히 서버에서 꺼졌는지 확인 안하고 계속 실행할 수 있을까요? 튕길 때를 보려고 고쳐놨는데 확신이 안서서요.

      말씀해 주신 방법으로 exception에서 계속해서 반복처리 하도록 할 수도 있긴 하지만 업비트 점검이나 신규 상장 등으로 서버가 부하가 걸리면 프로그램 종료를 막는 방법은 없는 것 같아 보입니다.

      리눅스 서버에 프로그램을 구동하면 다운타임을 최소화 할 수 있긴 합니다. 해당 부분도 포스팅을 할 예정인데 요즘 시간이 없어 지연 되는 점 양해 부탁 드립니다.

      답변 감사합니다^^ 덕분에 식견이 넓어지는 것 같아요. 사실 회사업무에 pandas 사용해보다가 활용할게 없을까 하던 차에 이 블로그를 보고 파이썬 전반에 대한 이해도가 넓어지는 것 같아요. 6천원씩 거래해서 봇에서 재미보지는 못하지만 코드 뜯어고치고 좌절하고 반복하면서 재미를 느끼는 것 같습니다. 바쁘신데 천천히 포스팅 해주셔도 됩니다. 응원합니다~~ 저도 나중엔 더 잘하고 싶어요 ㅎㅎ

      안녕하세요. python 자동매매 프로그램 글 감사합니다
      초보 질문입니다 코인을 구매하고 나면 자동매도 프로그램이 정지를 합니다
      코인 구매전에는 실행이 진행되고 화면에는 [upbit.py:127]:기타 에러:404
      가 보입니다

      기타에러 만으로는 어떤 것이 문제인지 확인하기가 조금 어렵습니다. 매도시 에러가 발생할때 로그를 조금 더 많이 찍어 보셔야 할 것 같습니다.

      추측 상으로는 매수가 되면 매도 로직이 멈춘다는것은 매수된 종목 조회할때 무언가 에러가 나는것 같은데 원화 마켓, BTC 마켓등 마켓 코드 관련 오류일 수도 있을 것 같습니다. 자세한건 로그를 찍어 보셔야 알 것 같습니다.

      안녕하세요, 답답한 마음에 댓글에 문의드려봅니다. 완전초보다보니 개념이 없어서요.

      공통모듈, 매수로직, 매도로직, 웹소켓로직 이렇게 각각 있는 것 같은데요. 이중에 어떤 로직을 수행해야 전체적으로 매수한 후 매도가 자연스럽게 되는 건지 여쭐수있을까요, 아니면 새로운 총괄 로직을 짜서 해야하는 건가요?

      너무 지식이 짧아서 질문드리기조차 송구합니다. ㅠ.ㅠ

      해결했습니다. 설치 사용 에 문제가 있었네요 감사합니다

      혹시 스탑로스에서 몇% 밑으로 내려가면 손절을 하도록 정하고 싶은데 가능할까요?

      현재가와 매수 평균가를 이용해 수익률을 계산해서 수익률이 지정한 수치 미만으로 내려가는 경우 시장가 매도 처리하면 될 것 같습니다~

      아래 모니터링 프로그램 포스팅에 전체 종목의 수익률을 구하는 방법을 포스팅해 두었습니다. 참고하시면 좋을 것 같습니다.

      로그 레벨은 로그를 찍는 경우라고 생각하면 되는데 일반적으로 I 를 입력하면 정보성 로그만 출력되고 D를 입력하면 디버깅을 위해 상세 로그들이 많이 출력 됩니다. 일반적인 수행에서는 I를 입력하면 될 것 같으며 두번째 3 세번쩨 -1을 입력하면 3% 올랐다가 1% 하락하는 경우 매도가 진행되도록 되어 있습니다.

      1) ( 3일 동안 ) 실행해도 매수가 이루어지지 안아요 # 표시는 제거했어요

      2) 몇% 손익 손절 하도록 정하고 싶은데 도움 부탁합니다

      로직이 보수적이라 그럴 것입니다. 일봉으로 RSI나 MFI가 모두 일정 수치 이상으로 떨어져야 매수를 하기 때문에 그렇습니다. 수치를 완화하거나 체크 로직을 몇개 빼거나 일봉을 분봉으로 변경하면 매매는 잦아지지만 리스크가 높아 집니다.

      손절 로직은 다른 분도 요청하신 내용이 있어 추후 만들어 보도록 하겠습니다.

      File "stop.py", line 191, in
      start_selltrade(sell_pcnt, dcnt_pcnt)
      File "stop.py", line 130, in start_selltrade
      if Decimal(str(cur_dcnt_pcnt)) < Decimal(str(dcnt_pcnt)):
      decimal.InvalidOperation: []

      파일이름은 stop.py라고 하고 스탑트레이링을 실행하였습니다. 몇번 실행이 되고는 이런 글이 나오고 멈추네요
      머가 문제일까요?

      혹시 해결 하셨나요?? 저 또한 같은 문제로 잘 되다가 가끔씩 작동이 멈추네요 ㅠㅠ
      if Decimal(str(cur_dcnt_pcnt)) < Decimal(str(dcnt_pcnt)) : 부분에서
      decimal.InvalidOperation: []
      의 오류가 뜨며
      매수후 최고가랑 고점대비 하락률이 nan이라고 뜹니다..


      음 왜그런진 모르겠지만 비트코인을 거래종목에서 제외하니까 작동하네요. 종목별로 가격 자리수가 달라서 소수점 문제로 오작동이 나는건지. 파이썬 넘 어렵습니다 흑

      #####
      highest_high_price = round(numpy.max(filtered_df['high_price']),4)
      로 round값 지정하니까 작동하네요! 이유는 모릅니다 ㅠ

      ######
      저 이러고 다음 날 되어서 또 먹통되어서 뭐가 문제인가 계속 고민하다가 결국 해결했습니다.
      highest_high_price 정의할 때 Decimal 삽입해주면 잘 돌아가요
      또 되다가 안되네요..

      cur_dcnt_pcnt 또는 dcnt_pcnt가 Decimal로 변환이 되지 않는 내용이 담겨 있는것 같습니다. 두 변수를 로그로 찍어보시면 오류 내용을 알 수 있을 것 같습니다.

      안녕하세요. 글 감사히 잘 읽었습니다. 저도 프로그램을 공부하고 있는데 질문이 있습니다, 혹시 orders API 사용 시 done 목록에서 체결된 거래들이 종종 누락되지 않으시나요? 업비트 사이트의 거래 내역에는 매수로 잡혀있는데 done에는 조회해도 찾을 수 없는 경우가 이따금 발생해서 난감 하네요 ㅠㅠ 이와 관련한 에러를 경험해보신적이 있으신가요?

      말씀해 주신대로 업비트 주문내역API는 오류가 좀 있는것 같습니다. 일단 상태를 구분없이 모두 조회해 보시면 done이 아닌 상태로 거래내역이 있을수 있습니다. 현재로써는 체결내역을 전체 조회해서 거래내역과 비교하면서 자체적으로 상태를 필터링해야 할 것 같습니다.

      친절한 답변 감사합니다. wait, cancel 등으로도 안 잡혀 있긴 하네요. 저도 이 부분에 대해서 알아서 보완을 좀 해야겠어요.ㅠ ^^;

      매도 프로그램 - sell_bot.py
      에서 184번줄
      매도 로직 시작인거 같은데 매수라고 적혀있어ㅓ요!

      안녕하세여
      log_level = "D" #input("로그레벨(D:DEBUG, E:ERROR, 그 외:INFO) : ").upper()
      sell_pcnt = "5" #input("매도 수익률(ex:2%=2) : ")
      dcnt_pcnt = "5" #input("고점대비 하락률(ex:-1%=-1) : ")
      이런식으로 쓰려고 하는데요
      고점대비 하락률은 마이너스로 사용해야하나요.

      선생님 현재 같은 문제로 한 4일째 고생중인데 조금만 도와주실수 있나요?? 이게 잘 작동하다가 간혹
      if Decimal(str(cur_dcnt_pcnt)) < Decimal(str(dcnt_pcnt)) : 부분에서
      decimal.InvalidOperation: []
      의 오류가 뜨며
      매수후 최고가랑 고점대비 하락률이 nan이라고 뜹니다..

      그래서 시도했던게
      1)highest_high_price = round(numpy.max(filtered_df['high_price']),4)
      로 round값 지정하니까 잘 작동했는데, 다시금 이후에 문제가 발생하네요

      2)highest_high_price 정의할 때 Decimal 삽입해주었는데 잘 작동하는 듯 싶더니, 다음 날 또 같은 오류가 발생하였습니다.

      3)결국 nan을 해결하는 게 관건인 듯 싶은데, 이게 매수한 첫 시간대에 캔들조회식에서 가끔 nan이 발생하는 것 같습니다. 캔들조회식에서
      candles = upbit.get_candle(target_item['market'스톱로스 오더 ], '60', 200)
      60을 30으로 바꾸니까 40분쯤 전에 매수했던 종목에서의 오류가 해결되었거든요.
      근데 그렇다고 이 조회 간격을 더 짧게 줄이는게 근본적인 해결책은 아닌 것 같아서. 어떻게 해야 이 오류를 완전히 해결할 수 있을까요?

      좀 더 만지고 있는데 이게 매수시점부터 60분이 가기 전까지
      filtered_df가
      Empty DataFrame로 출력이 되네요

      일단은 어떻게 해결해야 할 지 감이 안와서 임시방편으로 매수 60분이후부터 filtered_df를 계산하게끔 해놓았는데, 혹시 좋은 아이디어 있으면 알려주시기 바랍니다!!

      일단 에러를 찾기 위해서는 로그를 많이 찍어보시는게 좋습니다. 에러 로직 바로위에 종목코드 같은걸 찍으면 특정 종목에서 계속 에러가 나는지 등을 확인할 수 있습니다.

      캔들 갯수를 줄이면 되는것으로 보아서 짐작컨데 며칠전 새로 상장한 아발란체가 지수 계산을 위한 캔들 갯수가 모자라서 그럴 가능성이 높아 보입니다. 우선 해당 종목만 제외하고 돌려 보신후 에러가 사라지면 해당 로직을 보완하는 방향으로 진행해야 할 것 같습니다.

      안녕하세요 포스팅 덕분에 요즘 공부하느라 너무 바쁘네요^^;
      한가지 질문좀 드려도 될까요? 제가 선생님께서 올려주신 트레일링스탑 매도기능만 사용하려고 합니다. 혹시 위에 공통모듈에서 어디까지만 사용을 해야되나요? 공통모듈+매도모듈을 조합하여
      아래처럼 사용해보았는데 정상작동이 되지않는것같아서 문의드립니다.

      import time
      import logging
      import requests
      import jwt
      import uuid
      import hashlib
      import math
      import os
      import pandas as pd
      import numpy

      from urllib.parse import urlencode
      from decimal import Decimal
      from datetime import datetime

      # Keys
      access_key = '업비트'
      secret_key = '업비트'
      server_url = 'https://api.upbit.com'

      # 상수 설정
      min_order_amt = 5000

      # 요청 가능회수 확보를 위해 기다리는 시간(초)
      err_sleep_time = 0.3

      # 요청에 대한 응답을 받을 때까지 반복 수행
      while True:

      # 요청 처리
      response = requests.request(reqType, reqUrl, params=reqParam, headers=reqHeader)

      # 요청 가능회수 추출
      if 'Remaining-Req' in response.headers:

      hearder_info = response.headers['Remaining-Req']
      start_idx = hearder_info.find("sec=")
      end_idx = len(hearder_info)
      remain_sec = hearder_info[int(start_idx):int(end_idx)].replace('sec=', '')
      else:
      logging.error("헤더 정보 이상")
      logging.error(response.headers)
      break

      # 요청 가능회수가 3개 미만이면 요청 가능회수 확보를 위해 일정시간 대기
      if int(remain_sec) < 3:
      logging.debug("요청 가능회수 한도 도달! 남은횟수:" + str(remain_sec))
      time.sleep(err_sleep_time)

      # 정상 응답
      if response.status_code == 200 or response.status_code == 201:
      break
      # 요청 가능회수 초과인 경우
      elif response.status_code == 429:
      logging.error("요청 가능회수 초과!:" + str(response.status_code))
      time.sleep(err_sleep_time)
      # 그 외 오류
      else:
      logging.error("기타 에러:" + str(response.status_code))
      logging.error(response.status_code)
      logging.error(response)
      break

      # 요청 가능회수 초과 에러 발생시에는 다시 요청
      logging.info("[restRequest] 요청 재처리중. ")


      import time
      import os
      import sys
      import logging
      import traceback
      import pandas as pd
      import numpy
      import dateutil.parser

      from decimal import Decimal
      from datetime import datetime

      # 공통 모듈 Import
      sys.path.append(os.path.dirname(os.path.dirname(__file__)))
      from module import upbit

      # -------------------------------------------------
      # 고점을 계산하기 위해 최근 매수일시 조회
      # 1. 해당 종목에 대한 거래 조회(done, cancel)
      # 2. 거래일시를 최근순으로 정렬
      # 3. 매수 거래만 필터링
      # 4. 가장 최근 거래일자부터 현재까지 고점을 조회
      # -------------------------------------------------
      order_done = upbit.get_order_status(target_item['market'], 'done') + upbit.get_order_status(
      target_item['market'], 'cancel')
      order_done_sorted = upbit.orderby_dict(order_done, 'created_at', True)
      order_done_filtered = upbit.filter_dict(order_done_sorted, 'side', 'bid')

      # 현재 시간 추출
      current_dt = datetime.strptime(datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
      '%Y-%m-%d %H:%M:%S')

      # 시간 차이 추출
      diff = current_dt - last_buy_dt

      # 매수 후 1분간은 진행하지 않음(업비트 오류 방지 용)
      if diff.seconds < 60:
      logging.info('- 매수 직후 발생하는 오류를 방지하기 위해 진행하지 않음. ')
      logging.info('------------------------------------------------------')
      continue

      logging.info('')
      logging.info('------------------------------------------------------')
      logging.info('- 종목:' + str(target_item['market']))
      logging.info('- 평균매수가:' + str(target_item['avg_buy_price']))
      logging.info('- 현재가:' + str(ticker['trade_price']))
      logging.info('- 수익률:' + str(rev_pcnt))

      # ------------------------------------------------------------------
      # 최근 매수일자 다음날부터 현재까지의 최고가를 계산
      # ------------------------------------------------------------------
      df = pd.DataFrame(candles)
      mask = df['candle_date_time_kst'] > order_done_filtered[0]['created_at']
      filtered_df = df.loc[mask]
      highest_high_price = numpy.max(filtered_df['high_price'])

      logging.info('- 매수 후 최고가:' + str(highest_high_price))
      logging.info('- 고점대비 하락률:' + str(cur_dcnt_pcnt))
      logging.info('- 최종 매수시간:' + str(last_buy_dt))

      # ------------------------------------------------------------------
      # 시장가 매도
      # 실제 매도 로직은 안전을 위해 주석처리 하였습니다.
      # 실제 매매를 원하시면 테스트를 충분히 거친 후 주석을 해제하시면 됩니다.
      # ------------------------------------------------------------------
      logging.info('시장가 매도 시작! [' + str(target_item['market']) + ']')
      # rtn_sellcoin_mp = upbit.sellcoin_mp(target_item['market'], 'Y')
      logging.info('시장가 매도 종료! [' + str(스톱로스 오더 target_item['market']) + ']')
      # logging.info(rtn_sellcoin_mp)
      logging.info('------------------------------------------------------')

      # noinspection PyBroadException
      try:

      # 1. 로그레벨
      log_level = input("로그레벨(D:DEBUG, E:ERROR, 그 외:INFO) : ").upper(0)
      sell_pcnt = input("매도 수익률(ex:2%=2) : ")
      dcnt_pcnt = input("고점대비 하락률(ex:-1%=-1) : ")

      # 매수 로직 시작
      start_selltrade(sell_pcnt, dcnt_pcnt)


      except KeyboardInterrupt:
      logging.error("KeyboardInterrupt 스톱로스 오더 Exception 발생!")
      logging.error(traceback.format_exc())
      sys.exit(-100)

      except Exception:
      logging.error("Exception 발생!")
      logging.error(traceback.format_exc())
      sys.exit(-200)

      저도 완전초보인데요. 글 작성하신 선생님이 제가 올린 비슷한 질문 글에 달아주신 정보로 보면 매수프로그램과 매도프로그램을 각각 독립적으로 돌리시면 된다고 하십니다. 공통모듈은 매수와 매도프로그램 돌리면 필요할때 끌어와사용하므로 따로 돌리실 필요없다고 하시네요. 즉 매수프로그램과 매도프로그램을 각각 따로 실행시키시면 된다고 하십니다.

      안녕하세요, 몇번 질문 드렸는데 친절히 설명해주셔서 감사히 시도하고 있는 왕초보입니다.
      바쁘실텐데 또 질문드립니다. ㅠ
      1. 매도프로그램을 돌리려다보니 자동매매전에 사두었던 종목도 조건에 맞으면 자동매매를 시도합니다. 이부분 제외처리할 수 있는 방법은 없는지요? 거의 손실이 -90이상이라서 존버를 해야하는데요 팔리면 너무 큰 손해라서요 ㅠ
      2. 다른 질문 인데요. 에러를 체크하기위서는 로그를 돌리라고 하시는데요 ㅠ. 초보다보니 로그를 돌린다는게 뭔지 정확히 감히 안옵니다.
      혹시 특정 부분을 마우스로 블럭지정 후에 디버깅해본다는 말씀이신지요?? 그렇게 해봤지만 선생님 처럼 에러내용이 보이지 않아서 질문드립니다.

      바쁘신데 자꾸 질문드려 죄송합니다.

      블로그님 좋은 프로그램을 공유해주셔서 감사합니다.
      제가 궁금한 부분이 있어 질문드립니다.
      손절라인을 만드려고하는데 어떻게 해야하는지 잘 이해가 되지 않습니다.

      안녕하십니까 최근 며칠 사이에 구글링하다가 들어오게 되었는데 방대한 코드와 거의 강의에 가까운 커리큘럼을 보고 감동을 받아 공부를 시작한 초보입니다.

      궁금한게 있는데요. 실행순서가 buy_bot 실행 후 바로 sell_bot을 실행하면 되는건가요? 간단한 수정 후 작동을 보려고 하니 sell_bot에서
      File "C:/Users/shin3/PycharmProjects/test/Upbit/trade_bot/sell_bot.py", line 191, in
      start_selltrade(sell_pcnt, dcnt_pcnt)
      File "C:/Users/shin3/PycharmProjects/test/Upbit/trade_bot/sell_bot.py", line 41, in start_selltrade
      target_items_comma = upbit.chg_account_to_comma(target_items)
      File "C:\Users\shin3\PycharmProjects\test\Upbit\trade_bot\module\upbit.py", line 778, in chg_account_to_comma
      rtn_data = rtn_data + ',' + accountDataFor['market']
      NameError: name 'accountDataFor' is not defined

      이런 오류가 떠서 rtn_data = rtn_data + ',' + accountDataFor['market'] 여기 부분에서 코드 입력을 별도로 해줘야 되는건지 궁금합니다. 아니면 매수 종목이 들어온 이후에 sell_bot을 실행시켜야 되는지요?

      갤러리

      You can't have a presumed fixed stop Loss for all trades.

      Depending on the MS, you need to vary it on each trade.

      Read about it above in the PDF.

      Master-Class on Stop Loss.

      No Exit Strategy= Bankruptcy.

      Learn how to avoid Bankruptcy.

      Read this PDF and Master the art of Invalidation and stop Loss.

      Read. S,hare. Learn.

      스탑로스에서 이 PDF를 다운로드한 사용자는 5000명밖에 없는데

      나머지는 로스를 막는데 전문가겠지? 그렇제 ? 그렇제 .

      Only 5000 people have downloaded this PDF on Stop Loss.

      So I assume the rest of you are experts in stop Loss.

      내 목표는 이 튜토리얼을 가능한 짧게 쓰는 것이다

      그래서 이론 0%, 실용적 개념만 100% 담았다

      이 문서를 다 읽고 나면 스탑로스에 숙달 될 것이다.

      My aim is to keep this tutorial as short as possible.

      Zero theory. Only 100% practical concepts.

      After you finish reading this whole document, you would have mastered.

      이것만 지킨다면 파산하지 않을 것임

      Probably never get bankrupt trading.

      1. 스탑로스SL 놓는 법

      Stop Loss placement.

      2. 스탑로스S: 계산하는 법

      Calculation of SL.

      3. 포지션 사이즈PS 계산하는 법

      Calculation of Position Size.

      포지션을 진입했을떄 어디서 트레이드를 포기해야할지 결정하려면 스탑로스가 필요하다.

      트레이드를 포기하는 이유는 가격구조물MS가 트레이더가 예상했던 것과는 반대 움직임을 보였을 때

      더 크게 반대방향으로 가서 손실이 커지는 것을 막기 위함이다.

      (역주. 가격구조물MS이 익숙하지 않으면 프라이스 액션PA으로 읽어도 됨)

      그러므로 스탑로스SL는 시장 구조물MS이 반대방향으로 계속될 확률이 더 높은 지역에 배치되어야 한다.

      We need stop Loss to determine where should we abandon the trade.

      We abandon the trade because the price structure starts showing an opposite move than we had anticipated

      and hence it should no longer make sense to ride in the opposite direction.

      Stop Loss is to be placed at that area where the market structure shows a higher probability to continue on the opposite direction.

      예를들어서 위에 그림을 참고 해보면

      상승트렌드에서 저점에서 신고점을 만들고 난 뒤 그 저점을 하방 돌파하면

      우리는 시장구조물MS이 깨지고 트랜드가 바뀌었다고 가정 할 수 있다.

      위의 시나리오를 가정하면 MS을 변경하는 레벨의 SL를 설정하는 것이 논리적이다.

      To illustrate, in an uptrend market as illustrated above,

      if the Low from which a new high is made, gets broken,

      we can assume that the market structure is broken and the trend has changed.

      If the above scenario happens, a SL at the level which changes the MS is logical.

      참고Note

      위의 트렌드는 비트코인의 64로의 움직임을 잘 보여준다

      나는 혼란을 피하기 위해 시장 구조물의 기술적인 용어를 사용한 적이 없다.

      The above trend is illustrative of Bitcoin's move to 64.

      I have not used any technical jarg,ons of Market Structure to avoid confusion.

      스탑로스가 필요하다 Stop Loss is necessary

      시장 구조가 바뀌는 영역을 찾으려고 시장 구조가 바뀔때 매매를 지속하는 것은 비논리적이다.

      1. MS가 바뀌는 영역을 찾으려고 MS가 바뀔 때 트레이드를 지속하는 것은 비논리적이다

      To find the area where the MS might change and hence it'll become illogical to keep a trade going whilst MS is pointing a move on the opposite direction.

      말이 좀 어려운데 추세전환/추세지속 판단이 애매한 구간에서

      예측으로 저점잡기, 고점잡기 하지 말라는 말 같음)

      2. 트레이드 할 포지션 사이즈를 계산한다

      이것은 많은 사람들이 무시하는 가장 중요한 SL의 사용법이다.

      SL 배치는 트레이드의 중추인 리스크 관리에서 가장 중요한 도구이다.

      To calculate the Position Size of the trade.

      This is the most important use of SL which many ignore.

      SL placement is the most important tool in Risk Management which is the backbone of trading.

      TO QUICKLY ILLUSTRATE.

      감당 가능한 리스크 설정

      총자본금: 총 자본금이 100K라고 가정해보자

      리스크 스톱로스 오더 설정: 우리는 자본금의 1% 즉 1000$만 걸려고 한다.

      Let's say the total Capital with us is 100K.

      We want to risk only 1% of our Capital i.e. 1000 dollars.

      손절 가격 폭 설정

      1계약 당 손실금액: 현재 가격과 MS가 변경할 가격 사이의 차이를 정한다. (예: SL을 배치하려는 위치는 4%)

      The distance between the current price and the price where the MS will change

      i.e. The place where we want to place our SL is 4%.

      포지션 사이즈 설정

      따라서 우리의 포지션 사이즈는 1000$를 4%로 나누어 구한다.

      그결과 25000$만큼의 포지션 사이즈를 잡을 수 있다. (1000 x 100 / 4)

      Hence our Position Size can be 1000 dollars divided by 4%

      Which gives a position size of 스톱로스 오더 25000 Dollars.

      레버리지 설정

      25000$의 포지션 사이즈로 진입해서 현재 가격의 4%에 SL를 올려놓으면 1000$만 손실이 난다.

      트레이딩시 많은 마진을 투입하는 것을 방지하기 위해 레버리지를 사용해 너무 많은 마진의 노출을 방지할 수 있다.

      예를들어서 트레이딩에서 마진을 1000$만 걸고 싶을 수도 있다

      이 MS의 포지션 사이즈는 25000$(1000$를 SL까지의 거리(4%)로 나눈 값)이다.

      이때 25K의 마진으로 포지션을 보유하는 대신 1K 마진과 25X 레버리지로 포지션을 열 수 있다.

      25K 마진과 1X의 레버리지 대신

      1K 마진과 25K의 레버리지를 사용하는 것이다.

      Once we enter a position with 25000 dollars and place our SL at 4% of the current price, we will only lose 1000 dollars.

      To preve nt having a so much of value on exchange, you can use leverage to preve nt having too much exposure.

      Eg. You know you only want to risk 1000 dollars in a trade.

      You know your position size is 25000 in this MS (1000 divided by the distance to SL i.e. 4%)

      So instead of having 25K of position on spot, you can use 1K as collateral and open a position with 25X 스톱로스 오더 leverage.

      레버리지 포지션에서 In a leverage Position,

      리스크 자본금 Capital at Risk = 1000

      포지션 사이즈 Position Size 25,000

      만약 가격이 반대로 4% 이동한다면 1K 포트폴리오의 오직 1% 손실만 난다

      If the Price moves in the opposite direction by 4%, you will only lose 1% of your portfolio that is 1K.

      SL를 사용해서 포지션 크기Position Size를 결정하는 방법과

      현금?Spot 및 레버리지Leverage를 사용하여 포지션을 관리하는 방법을 설명했다.

      SL의 기본적인 용도가 명확하기를 바란다.

      이제 이 마스터 클래스로 시작하겠다.

      I have explained how to use SL to determine Position Size and how to use Spot and Leverage to manage your positions.

      I hope the basic uses of SL are clear to you.

      Let's now begin with this Master-Class.

      BASICS LOSSBASICS OF STOP LOSS

      99%의 트레이더는 손실을 막아야한다는 것을 이해하지 못하기 떄문에 실패한다.

      청산 방지와 파산 방지에 있어 가장 중요한 주제는 '스탑로스StopLoss'이다.

      99% of the traders fail because they don't understand Stop Loss.

      StopLoss is the most important topic to prev,ent liquidation and avoiding bankruptcy.

      이것이 손실을 막기 위해 필요한 전부이다.

      This is all you need to master stop loss.

      트레이딩 중에 계정이 폭파되지 못하도록 하는 도구는 2가지 뿐이다.

      There are only 2 tools in trading which will preve,nt you from blowingup your account:

      1. 리스크 관리 Risk Management

      2. 스탑 로스 Stop Loss

      만약 규칙을 따르지 않으면 반드시 실패할 것이다.

      이 아티클에서는 Stop-Loss에 대해 자세히 설명한다.

      If you don't follow the rules of the above, YOU WILL FAIL. Period.

      Inthis article, we will master Stop-Loss, in detail.

      DIFFERENT SL DIFFERENT CHARTS = DIFFERENT SL

      서로 다른 SL 차트 = 서로 다른 SL

      트레이더의 가장 흔한 오류즁 하나는 스탑로스를 고정된 일정 비율로 설정하는 것이다.

      A common fallacy amongst traders is that Stop Loss has to be a certainfixed percent of loss.

      예를들어 고정 손실 방지 5%, 이것은 아주 나쁜 접근이다.

      스탑 로스는 TA(기술적분석)에만 근거로 해야한다.

      모든 셋업이 다르므로 고정된 SL를 잘 작동되지 않는다.

      Eg. Fixing Stop Loss at 5%. This is a very bad idea.

      Stop loss should be based on TA alone.

      Every setup is different and a fixed SL won't work.

      STOP LEVEL STOP LOSS = INVALIDATION LEVEL

      스탑레벨, 스탑로스 = 무효화 레벨

      해당 방향으로 기술적 분석TA으로 합리적인 이류를 가질 때만 진입한다.

      진입의 이유가 사라진다면 트레이드는 중단되어야 한다.

      진입의 이유가 사라지게 되는 사건(이벤 트, 구간)을 무효화 레벨invalidation level이라고 한다.

      Entry is made ONLY as per TA on a valid reason for a directional move.

      Once the reason for the entry has been lost, the trade must beexited.

      The ev,ent at which the reason for entry ceases to exist is the invalidation level.

      3. 하방돌파 컨펌(리테스트 캔들의 저점 아래의 다음 캔들, 숏진입)

      무효화 지점에 도달했으면 바로 튀셈!

      Invalidation Point reached? GET OUT!

      스탑 로스SL는 셋업이 무효화 지점에 도달하는 즉시 절대적으로 사용할 수 있는 도구다.

      트레이드를 시작하기 전에 항상 무효화 지점을 설정해라

      무효화 이벤 트가 사실로 바뀌면 생각할 필요도 없이 탈출해라

      Stop Loss is a tool to be ABSOLUTELY used as soon as the setup reaches an invalidation point.

      Always establish the invalidation point before entering a trade.

      As soon as the invalidation eve,nt turns true, EXIT without a second thought.

      진입 이유가 사라진다면, 더이장 진입에 대한 전제가 존재하지 않으므로, 스톱로스 오더 거래를 종료한다.

      Once the reason for the entry has been lost, exit the trade as the premise for the entry no longer exists.

      지지가 확인되어 진입을 했는데

      만약 지지대가 깨졌다면 진입의 이유가 더이상 존재하지 않는 것이므로

      그 구간에 스탑로스를 설정해 두어야한다

      If the entry was made because of a support being confirmed,

      but if thesupport gets broken, the reason for the entry no longer exists andhence, a stop loss must be entered

      몇 가지 예를 들어 스탑로스를 설명하겠다.

      단순하게 설명하기위해 지지/저항 진입 근거만 사용할 것이다.

      Let us understand placing the stop Loss with the help of few examples.

      I will only be using simple Support/Resistance reasons for entry tokeep it simple.

      1. 수렴 돌파중의 스탑로스 배치

      참고 나는 이것을 무효화 수준보다 약간 낮게 배치해 스탑헌팅을 방지한다.

      Placing SL during consolidation Break-out.

      Note I Place it a little below the invalidation level to prev,ent stop hunts.

      위의 예시에서는 거래량과 함께 수렴 돌파를 한 후에 진입했다.

      스탑로스는 수렴의 바닥부분에 놓여져 있다.

      나머지 사건들은 자기설명적이다?

      In the above example, the entry is made after a consolidation Breakout(with volume).

      The stop Loss is placed at the bottom of the consolidation.

      Rest of the eve,nts are self explanatory.

      중요 사항 Important Note.

      나는 스탑 로스 주문을 게시하지 않는다.

      무효화 수준에 도달하면 수동으로 종료한다.

      이렇게 하면 스캠 꼬리에 의한 헌팅을 방지할 수 있다.

      I don't post a stop Loss Order.

      I manually exit when the invalidationlevel is reached.

      This Prev,ents hunting by any scam wicks.

      스탑 로스 배치 Placing stop loss with

      매수 매도매물대 확인 Resistance Support Zone recognition

      리테스트 컨펌 Re-test Confirmation

      매도매물대 전환 Resistance Zone Flip

      돌파 컨펌 Break-out confirmation

      STOP HUNTINGSTOP HUNTING

      스탑로스는 매우 논란이 많은 주제이다.

      일부 트레이더는 스탑로스 주문을 사용하는 것을 좋아하지 않는다. 왜냐하면 그것이 스탑헌팅을 중단시킬 수 있기 때문이다.

      일부 트레이더는 진입하자마자 엄격하게 스탑로스 주문을 설정한다.

      Stop Loss is a very controversial topic as some traders don't like toplace a SL order as it could lead to stop loss hunting.

      Some traders swear by a strict stop loss order being placed as soon as an entry is placed.

      이 딜레마에 대한 해결책은 다음페이지에 설명되어 있다.

      The solution to this dilemma is discussed in the following pages.

      SL을 무효화 지점 아래에 배치해 SL의 꼬리를 방지한다.

      Place the SL BELOW the invalidation point to avoid SL hunting bywicks.

      스탑 헌팅을 피하기 위해 무효화가 컨펌된 뒤에 수동으로 포지션을 스탑한 다.

      Exit the trade on invalidation with using SL manually AFTER the invalidation is confirmed to avoid stop loss hunting.

      나는 개인적으로 스탑헌팅을 피하기 위해 무효화가 컨펌된후 수동으로 종료한다.

      I personally exit manually after invalidation is confirmed to prev,ent SLhunting

      1. SL는 시장 구조물의 셋업을 기반으로 하며, SL의 %는 모든 트레이드에 대해 다룬다.

      Stop Loss is based on Market Structure of the setup and the % of SL is different for every trade.

      2. SL는 MS가 변경될 가능성이 있는 곳에 배치된다. MS가 바뀌면, 우리는 정반대의 트레이드를 하게 될 것이다.

      스탑로스SL = 무효화 수준이다.

      Stop Loss is placed where the MS will probably change. If MS changes, we'll be rising the opposite trade.

      SL = Invalidation Level.

      3. SL은 차트인 TA만을 기반해야 한다. 다른 것은 없다.

      SL should be based only on TA, the chart. Nothing else.

      4. 트레이드에 들어가기 전에 SL을 찾고 그에 따라 포지션 크기를 선택한다.

      Find the SL before you enter a trade and choose your position sizebased on it.

      5. 스탑헌팅 꼬리를 방지하기 위해 SL를 수작업으로 종료한다. 그러나 컴퓨터 앞에 없는 경우 SL 주문을 할 수 있다.

      Exit with a SL manually to prev,ent SL hunting wicks. However if youaren't at your computer, you can place a SL order.

      추신P.S.

      손익분기점을 위해 서둘러 SL을 이동하지 말아라.

      이로인해 아무런 혜택 없이 시장에 참여하게 될 수도 있다.

      우리는 비트코인 마스터 클래스 거래의 이 개념 Part2에 대해 배울 것이다.

      Don't be in a rush to move your SL to break-even.

      This leads to yourmarket participation without any benefit.

      We will learn about this concept Part2 of Trading Bitcoin Master-Class.

      문서를 다시 읽고 지지/저항으로 연습한 후 SL을 무효화 위치에 배치해라

      .모든 셋업에는 고유한 SL이 필요하다, 차트를 읽고 다른 셋업에 맞춰서 적용해라. 연습, 연습, 연습

      스타로스 마스터 클래스를 마친다 이것을 다시 읽고 개념을 이해해라.

      Read the document again, Practise it with Support/ Resistance andplace SL at Invalidation.

      Every setup needs it's unique SL. Read the charts, adapt to different setups. Practice, Practice, Practice.

      This concludes the Master Class on Stop Loss. Read this again tounderstand the concepts.

      손실을 막으면 파산하는 것을 막을 수 있다.

      Stop Loss prev ents you from getting bankrupt.

      이 문서가 마음에 들었기를 바란다. 특히 차트와 삽화가 도움이 되기를 바란다.

      우리는 지속적으로 개선되고 있으며 좋은 교재를 전달하기 위해 노력하고 있다.

      I hope you liked this document and found it useful, especially thecharts and illustrations.

      We are constantly improving and working towards delivering go,odtutorials.

      파구정보 (PAGU Info)

      비트코인이 만9천불을 돌파하고, 리플은 3일만에 두배 가까운 상승을 보이는 등, 코인 가격들이 2017년 불장을 연상시키는 가운데, 바이낸스의 선물매매 기능 중 이런 상승장에 수익을 지키는 [Trailing Stop] 에 대해 설명 드리고자 합니다.

      Trail: 길게 나있는 자취/자국

      Trailing Stop 은 간단히 말해 가격을 따라가다 정해진 선에서 이익을 취하거나 손절하는 기능입니다.

      모바일에서는 [Limit] 을 누르면 드랍다운 메뉴에서 선택이 가능하고,
      PC에서는 [Stop Limit] 을 누르면 드랍다운 메뉴에서 선택이 가능합니다.

      바이낸스 트레일링 스탑 기능 Binance Trailing Stop 기능

      각 항목에 대해 설명을 드리자면,

      (Long 포지션의 경우)
      1. Callback Rate: Activation Price 기준 Callback Rate 의 퍼센티지 이하로 내려가면 포지션 정리 (Short 마켓 오더 발생)

      2. Activation Price: 해당 Trailing Stop 발동 기준 가격. 현재가가 해당 가격 이상일 경우 조건식이 발동하며, 빈칸일 경우 지금부터 발동.

      3. Trigger: Last Price / Mark Price 중 선택 가능. Last Price 는 실제 Order 체결 가격. Mark Price 는 PNL (Price aNd 스톱로스 오더 Loss) 표시를 위한 기준 가격
      * 청산 또한 Mark Price 기준으로 발생합니다.

      4. Reduce Only: 해당 옵션을 선택하면 현재 들고있는 포지션만 정리할 수 있습니다. (현재 포지션 이상 갯수를 입력해도 주문 체결이 안됨)

      바이낸스 Trailing Stop 기능

      한 가지 특이한 사항은, (Long 포지션일 경우에) Activation Price 이상으로 가격이 올라가면, 기준 가격은 직전 최고 가격으로 변경된다는 점입니다.

      아래 표를 기준으로 보면, Activation Price 가 $10,000 이고, 그 이후 $10500 으로 가격이 올랐다면, 5% Callback Rate 일 경우 $10,000 의 5%인 $9,500 이 아닌 $10,500 의 5% 인 $9,975가 되야 포지션을 정리한다는 것입니다.


      실제 예시를 들어 설명 하도록 하겠습니다.

      다음은 현재 제가 들고 있는 포지션과 Trailing Stop 조건 입니다.

      12배 마진으로 스톱로스 오더 $7.061 에 1700 ETC 의 Long 포지션을 보유하고 있고, Trailing Stop 은

      1. Activation Price: 가격이 $7.2 를 넘어가면
      2. Callback Rate: 그때부터 1% 이상 가격이 내려갈때
      3. Reduce Only: 내가 들고있는 포지션 중에서만, 1700 ETC를
      정리한다.

      4. Trigger: 가격 기준은 Mark Price 이다.

      이때 가격이 $8 이 되면, 1%인 $7.92아래로 떨어지면 포지션을 정리하고,
      $10 이 되면 $9.9가 되면 정리하는 조건 입니다.

      Short 포지션의 경우 반대입니다.

      1. Callback Rate: Activation Price 기준 Callback Rate 의 퍼센티지 이상으로 올라가면 포지션 정리 (Long 마켓 오더 발생)

      2. Activation Price: 해당 Trailing Stop 발동 기준 가격. 현재가가 해당 가격 이하일 경우 발동하며, 빈칸일 경우 지금부터 발동.

      3. Trigger: Last Price / Mark Price 중 선택 가능. Last Price 는 실제 Order 체결 가격. Mark Price 는 PNL (Price aNd Loss) 표시를 위한 기준 가격
      * 청산 또한 Mark Price 기준으로 발생합니다.

      4. Reduce Only: 해당 옵션을 선택하면 현재 들고있는 포지션만 정리할 수 있습니다. (현재 포지션 이상 갯수를 입력해도 주문 체결이 안됨)

      Trailing Stop 으로 Stop Loss 와 Take Profit 을 한번에 지정할 수도 있고, 지속 상승하는 장이라면, 좀 더 높은 가격에서 수익을 취할 수도 있을 것 같습니다.

      본 글은 해당 투자를 권유하는 글이 아닙니다.
      투자에 대한 판단은 본인의 책임이며,

      투자시 유의하시기 바랍니다.

      이 포스팅이 유익하셨다면,
      공감과 댓글 부탁 드립니다!

      더 빠른 소식을 원하신다면
      아래 링크로 들어와 주시기 바랍니다
      ▷ 파구정보 텔레그램방
      ▷ 파구정보 트위터


0 개 댓글

답장을 남겨주세요