#논리연산자
#and : 조건을 모두 만족해야한다.
symbol = "DOGE/KRW"
price = 150
if symbol == "DOGE/KRW" and price < 200:
print("도지코인이 200원보다 작다")
#or : 하나만 만족시키면 실행
if symbol == "DOGE/KRW" or price < 130:
print("도지코인이 200원보다 작다")
#not : 논리의 반대/부정
name = "jeck"
if not name =="jack":
print("jack이 아니다!")
age = 20
if not age <= 19:
print("성인!")


upbit 홈페이지 -> my -> Open API관리 -> 필요한 기술 선택 -> IP 입력 -> Open Api key 발급
->access key, secret key 알아두기
import ccxt
upbit = ccxt.upbit()
access_key = "@@@@@@@@@@@@@@@"
secret_key = "@@@@@@@@@@@@@@@"
upbit.apiKey = access_key
upbit.secret = secret_key
#시장가 주문 : 업비트, 최소 주문금액 5000원
upbit.create_market_order("REP/KRW", "buy", 5000, 1) #(종목, buy, 금액, 비용(1))
upbit.create_market_order("REP/KRW", "sell", 0.6) #(종목, sell, 금액이 아닌 갯수)
#지정가 주문
upbit.create_limit_order("REP/KRW", "buy", 10, 7400) #(종목, buy, 구매 수량, 지정 금액)
upbit.create_limit_order("REP/KRW", "sell", 10, 7500)

import ccxt
upbit = ccxt.upbit()
access_key = "@@@"
secret_key = "@@@"
upbit.apiKey = access_key
upbit.secret = secret_key
try:
#에러(없는 종목)
upbit.create_market_order("ASD/KRW", "buy", 10000, 1)
except Exception as e:
print("예외 발생: 없는 종목!")
print(e)
print("예외처리완료")
- 실행 중 에러가 발생하면 프로그램이 종료되기 때문에 이를 방지하기 위해 예외처리를 한다.
- 기본 형태 : [try: ~ except:]
- Exception을 통해 예외처리의 이유를 알 수 있다.
import my_upbit #방법1 :모듈 전체를 호출
try:
#에러(없는 종목)
my_upbit.upbit.create_market_order("ASD/KRW", "buy", 10000, 1)
except Exception as e:
print("예외 발생: 없는 종목!")
print(e)
print("예외처리완료")
import my_upbit : 모듈의 기능 전체를 호출한다.
from my_upbit import upbit #방법2 : 모듈 내 upbit만 호출
try:
#에러(없는 종목)
upbit.create_market_order("ASD/KRW", "buy", 10000, 1)
except Exception as e:
print("예외 발생: 없는 종목!")
print(e)
print("예외처리완료")
from my_upbit import upbit : 모듈 내 필요한 기능만 호출한다.
#기본형 : 입력, 출력이 없는 함수
def hi():
print("hi")
hi()
#입력은 없지만 출력은 있는 함수
def hi2():
return "hi"
a = hi2()
print(a)
#입력과 출력 둘 다 가능한 함수
def add(n1, n2):
return n1 + n2
print(add(1, 3))
#가격 확인하다 매수하는 함수
from my_upbit import upbit
def watch_and_order():
print("가격을 감시하다 매수를 하는 함수")
infos = upbit.fetch_ticker("XRP/KRW")
price = infos["close"]
percent = infos["percentage"]
rounded_percent = round(percent, 2) #소수점 두자리까지(세번째에서 반올림)
print(f"현재 코인의 가격은 {price}원이고 전일대비 {rounded_percent}%입니다.")
if percent < 3:
upbit.create_market_order("XRP/KRW", "buy", 10000, 1)
while True: # 3%이하일때 무한 매수
watch_and_order()

age = 19 #전역변수
def plus_age():
age = age + 1 #지역변수
print(f"오늘부터{age}살입니다!")
plus_age()
- 첫번째 age는 전역변수 : 전체 프로그램에 영향
- 함수 안의 age는 지역변수 : 함수 내에서만 영향
- 이를 해결하기 위해 global 사용
import ccxt
upbit = ccxt.upbit()
access_key = "@@@"
secret_key = "@@@"
upbit.apiKey = access_key
upbit.secret = secret_key
is_buy = False #무한 반복을 피하기 위해 추가
def watch_and_order():
global is_buy
infos = upbit.fetch_ticker("XRP/KRW")
price = infos["close"]
percent = infos["percentage"]
rounded_percent = round(percent, 2) #소수점 두자리까지(세번째에서 반올림)
print(f"현재 코인의 가격은 {price}원이고 전일대비 {rounded_percent}%입니다.")
if percent < 3 and not is_buy: #3%보다 작을때 그리고 사지 않으면 반복
upbit.create_market_order("XRP/KRW", "buy", 10000, 1)
is_buy = True
- 반복을 피하기 위해 is_buy 활용
- 전역변수 is_buy를 함수 안에서 global로 선언
전일대비 등락폭이 3%보다 작고 is_buy가 만족하지 않는다면 반복, 만족한다면(거래체결시) is_buy는 참이되어 프로그램 종료if percent < 3 and not is_buy:
#가격 확인하다 매수하는 함수
from my_upbit import upbit, watch_and_order
while True: # 3%이하일때 무한 매수
watch_and_order()
- 위 코드를 모듈화 하면 다음 추가적 코딩에 수월하다.
- 객체(instance)를 만들어내기 위한 틀
- 새로운 함수를 추가할 경우를 대비할 수 있으며 코드를 간결하게 작성할 수 있고 특정기능 또는 특정 변수에만 적용하는 함수를 쉽게 유지, 보수할 수 있는 장점이 있다.
- 메서드(method) : class안의 함수
import ccxt
upbit = ccxt.upbit()
access_key = "@@@"
secret_key = "@@@"
class Myupbit():
#생성자 : 초기에 딱 한번 설정을 해주는 역할
def __init__(self):
print("딱 한번만!")
self.upbit = ccxt.upbit()
self.upbit.apiKey = access_key
self.upbit.secret = secret_key
self.is_buy = False
def watch_and_order(self):
## global is_buy : class 로 모두 공유하여 삭제
infos = self.upbit.fetch_ticker("XRP/KRW")
price = infos["close"]
percent = infos["percentage"]
rounded_percent = round(percent, 2) #소수점 두자리까지(세번째에서 반올림)
print(f"현재 코인의 가격은 {price}원이고 전일대비 {rounded_percent}%입니다.")
if percent < 3 and not is_buy: #3%보다 작을때 그리고 사지 않으면 반복
self.upbit.create_market_order("XRP/KRW", "buy", 10000, 1)
is_buy = True
myupbit = Myupbit()

import ccxt
upbit = ccxt.upbit()
class Myupbit():
#생성자 : 초기에 딱 한번 설정을 해주는 역할
def __init__(self, key, secret):
print("딱 한번만!")
self.upbit = ccxt.upbit()
self.upbit.apiKey = key
self.upbit.secret = secret
self.is_buy = False
def watch_and_order(self):
infos = self.upbit.fetch_ticker("XRP/KRW")
price = infos["close"]
percent = infos["percentage"]
rounded_percent = round(percent, 2) #소수점 두자리까지(세번째에서 반올림)
print(f"현재 코인의 가격은 {price}원이고 전일대비 {rounded_percent}%입니다.")
if percent < 3 and not is_buy: #-3%보다 작을때 그리고 사지 않으면 반복
self.upbit.create_market_order("XRP/KRW", "buy", 10000, 1)
is_buy = True
access_key = "@@@"
secret_key = "@@@"
jack_upbit = Myupbit(access_key, secret_key)
jack_upbit.watch_and_order()
- 이전 코드는 api key가 고정되어 있어 자신만 사용가능
- 생성자 파라미터에 key와 secret을 추가해서 다른 api가 추가되더라도 사용할 수 있게 변경
- jack_upbit : 추가되는 api의 구별을 위해 api key값을 새로운 함수에 저장
import ccxt
upbit = ccxt.upbit()
class Myupbit():
#생성자 : 초기에 딱 한번 설정을 해주는 역할
def __init__(self, key, secret):
print("딱 한번만!")
self.upbit = ccxt.upbit()
self.upbit.apiKey = key
self.upbit.secret = secret
self.is_buy = False
def watch_and_order(self, symbol, money, watch_percent):
infos = self.upbit.fetch_ticker(symbol)
price = infos["close"]
percent = infos["percentage"]
rounded_percent = round(percent, 2) #소수점 두자리까지(세번째에서 반올림)
print(f"현재 {symbol}의 가격은 {price}원이고 전일대비 {rounded_percent}%입니다.")
if percent < watch_percent and not self.is_buy: #3%보다 작을때 그리고 사지 않으면 반복
self.upbit.create_market_order(symbol, "buy", money, 1)
self.is_buy = True
access_key = "@@@"
secret_key = "@@@"
jack_upbit = Myupbit(access_key, secret_key)
while True: #아래 종목 중 특정 퍼센티지에 도달한 종목이 거래 체결되면 self.is_buy에 걸려 프로그램 종료
jack_upbit.watch_and_order("종목", "금액", "퍼센티지")
jack_upbit.watch_and_order("종목", "금액", "퍼센티지")
jack_upbit.watch_and_order("종목", "금액", "퍼센티지")
jack_upbit.watch_and_order("종목", "금액", "퍼센티지")
- 최대한 범용적으로 사용할 수 있도록 고정된 값을 입력 받을 수 있게 변경
- .watch_and_order: 여러 종목을 동시에 탐색하고 매수거래체결 가능
- symbol : 종목
- price : 가격
- watch_percent : 퍼센티지
- while True: 아래 종목 중 조건에 맞은 종목의 거래가 체결됐을 시 self.is_buy에 걸려 프로그램 종료
from my_upbit2 import Myupbit
access_key = "@@@"
secret_key = "@@@"
jack_upbit = Myupbit(access_key, secret_key)
while True:
jack_upbit.watch_and_order_many("DOGE/KRW", 10000, 0)
jack_upbit.watch_and_order_many("BTC/KRW", 10000, 0)
jack_upbit.watch_and_order_many("XRP/KRW", 10000, 0)
jack_upbit.watch_and_order_many("APT/KRW", 10000, 0)
jack_upbit.watch_and_order_many("ETH/KRW", 10000, 0)
- watch_and_order를 추가한 클래스를 import한 후 조건문만 작성한다면 이렇게 간단하게 새로운 결과값을 구할 수 있다.
class.py를 복붙 -> main.py로 변경 -> cmd에서 실행