파이썬 예시 / 자동매매 / 변동성 돌파전력 + 특정시간 매매

2022. 1. 12. 20:21Python/Python 예시 - 주식코인 자동매매

반응형

안녕하세요

 

COLAB을 통해 비트코인 매매에 대한 거래금액 경향을 파악해 보면 최근 200시간의 경향이 아래와 같습니다.

 

이때, 00-03시, 14-17시 에는 매매가가 오르는 경향이 있고,

 

이를 자동매매 코드에 같이 적용해보겠습니다.

 

변동성 돌파전략과 함께, 특정 매매 시간을 적용하면, 상승장에는 변동성 돌파전략으로 매수를 하고,

하락장에는 변동성 돌파전략으로는 매수가 일어나지 않으니,

 

특정시간 매매 기능을 통해, 하락장에서도 매수를 통한 차익을 기대해 볼 수 있겠습니다

(물론 투자와 관련한 책임과 판단은 본인에게 있습니다 ^^;, 저는 코드만 공유합니다)

 

 

아래 코드를 참고해 주세요.

 

파이썬 SCHEDULE 기능을 구현해 보았습니다. (업비트 기준입니다)

import schedule 
import time
import pyupbit
import datetime
import requests   #slack

access = "ddd"
secret = "ddd"
myToken = "ddd"     #slack ##api.slack.com 에서 확인


def post_message(token, channel, text):
    """슬랙 메시지 전송"""
    response = requests.post("https://slack.com/api/chat.postMessage",
        headers={"Authorization": "Bearer "+token},
        data={"channel": channel,"text": text}
    )

def get_target_price(ticker, k):
    """변동성 돌파 전략으로 매수 목표가 조회"""
    df = pyupbit.get_ohlcv(ticker, interval="day", count=2)
    target_price = df.iloc[0]['close'] + (df.iloc[0]['high'] - df.iloc[0]['low']) * k
    return target_price

def get_start_time(ticker):
    """시작 시간 조회"""
    df = pyupbit.get_ohlcv(ticker, interval="day", count=1)
    start_time = df.index[0]
    return start_time

def get_ma5(ticker):
    """5일 이동 평균선 조회"""
    df = pyupbit.get_ohlcv(ticker, interval="day", count=5)
    ma5 = df['close'].rolling(5).mean().iloc[-1]
    return ma5

def get_balance(ticker):
    """잔고 조회"""
    balances = upbit.get_balances()
    for b in balances:
        if b['currency'] == ticker:
            if b['balance'] is not None:
                return float(b['balance'])
            else:
                return 0
    return 0

def get_current_price(ticker):
    """현재가 조회"""
    return pyupbit.get_orderbook(ticker=ticker)["orderbook_units"][0]["ask_price"]


# 로그인
upbit = pyupbit.Upbit(access, secret)
print("autotrade start")


# 시작 메세지 슬랙 전송
post_message(myToken,"#stock", "autotrade start")
post_message(myToken,"#stock", get_balance("KRW-BTC"))
post_message(myToken,"#stock", get_balance("KRW"))
BTC_price = pyupbit.get_current_price("KRW-BTC")
post_message(myToken,"#stock", BTC_price)


# 00~07시 특정시간 매매
def buy_function(): 
    now = datetime.datetime.now()
    post_message(myToken,"#stock", "buy time : " +str(now)) #Slack
    BTC_price = pyupbit.get_current_price("KRW-BTC")
    post_message(myToken,"#stock", "buy price : " +str(BTC_price)) #Slack
    krw = get_balance("KRW")
    buy_result = upbit.buy_market_order("KRW-BTC", krw*0.9995)
    post_message(myToken,"#stock", "buy result : " +str(buy_result)) #Slack    

def sell_function(): 
    now = datetime.datetime.now()
    post_message(myToken,"#stock", "sell time : " +str(now)) #Slack
    BTC_price = pyupbit.get_current_price("KRW-BTC")
    post_message(myToken,"#stock", "sell price : " +str(BTC_price)) #Slack
    btc = get_balance("BTC")
    sell_result = upbit.sell_market_order("KRW-BTC", btc)
    post_message(myToken,"#stock", "sell result : " +str(sell_result)) #Slack


#특정시간 매매
schedule.every().day.at("00:01").do(buy_function)
schedule.every().day.at("03:00").do(sell_function)

schedule.every().day.at("14:00").do(buy_function)
schedule.every().day.at("17:00").do(sell_function)


##반복문 시작
while True:
    try:
        schedule.run_pending()
        now = datetime.datetime.now()
        start_time = get_start_time("KRW-BTC")
        end_time = start_time + datetime.timedelta(days=1)
        if start_time < now < end_time - datetime.timedelta(seconds=10):
            target_price = get_target_price("KRW-BTC", 0.003)   #변동폭 k (최적값 확인 )
            ma5 = get_ma5("KRW-BTC")
            current_price = get_current_price("KRW-BTC")
            if target_price < current_price and ma5 < current_price:
                krw = get_balance("KRW")
                if krw > 5000:
                    buy_result = upbit.buy_market_order("KRW-BTC", krw*0.9995)
                    post_message(myToken,"#stock", "BTC buy : " +str(buy_result)) #Slack
        else:
            btc = get_balance("BTC")
            if btc > 0.00008:   
                sell_result = upbit.sell_market_order("KRW-BTC", btc)
                post_message(myToken,"#stock", "BTC buy : " +str(sell_result))  #Slack
        time.sleep(1)
    except Exception as e:
        print(e)
        post_message(myToken,"#stock", e)  #Slack
        time.sleep(1)

 

자료가 도움이 되셨다면, 아래 유튜브 오냐TV로 구독과 좋아요~ 꼭 부탁 드려요~!!

https://www.youtube.com/channel/UCKEjO6sQJjlyzbHGeqd3hKg

 

ONYA TV 오냐TV

오늘의 인터뷰 오냐TV 입니다. 벤처 또는 신규 기업, 새롭고 다양한 것을 생생하게 인터뷰 하는 오냐TV 채널 입니다. 새로운 상품이나 서비스 등 소개를 '유튜브'에서 전달하고 있고, "오냐TV" 영상

www.youtube.com

 

Passive income으로 소소한 허니게인 income을 있으니 아래 내용도 같이 확인해 보세요~^^

(추천인이 $5를 받는 건 아니니니 꼭 본인 혜택을 위해서 눌러서 해보세요. )

https://r.honeygain.money/OLIVE47A16

 

Passive Income - Effortlessly | Honeygain

Honeygain is the first-ever app that allows users to make money online by sharing their internet connection.

www.honeygain.com

 

Copyright 2021. beauty886699.tistory.com

반응형