해당 모델은 과거에 일론머스크가 "DOGE"나 "Bitcoin(BTC)" 를 트위터에 언급하면 14% 가량 오르는 일이 있었다.
해당 방식을 바이낸스 자동 모델인 추적 손절매(내가 진입한 시점부터의 고점을 계속 갱신하여 고점 대비 n%가 하락하면 매도를 하는 방식)의 방법을 알게 되고 이것을 코드화 하였다.
그때 당시 차트를 구하고 싶은데 좀 오래되서 구하기 힘들다.. 아마 그때가 2021년도 일것이다 해당 코드가 2021년 6월에 작성되어 있었었다.
(바이낸스 선물을 이용)
주요 코드는
while True:
while True:
account = "@elonmusk"
statuses = twitter_api.GetUserTimeline(screen_name=account, count=10, include_rts=False, exclude_replies=True)
#30초이내에 트위터를 올렸고 , 도지란 단어를 포함하면 if 문 실행
if (len(statuses)!=0):
##상태 한번만 보여주는것.
clear_output(wait=True)
display(statuses)
##
# print(statuses[0].text)
if(statuses[0].text.lower().find("doge") != -1) and ((int(time.mktime(datetime.now().timetuple())) - statuses[0].created_at_in_seconds) < 30):
break
time.sleep(1)
######심볼명 교집합#####
# sim_name = list(set(bin_sym) & set(up_sym)) # @
sim_name = "DOGE"
#추적 손절매 %
Per = 4
##구매 시점
up_pre = pyupbit.get_current_price('KRW-' + sim_name) # 업비트 현재가 조회#리플이든 비트코인이든
print(up_asset, "업비트 자본(조정 후)")#업비트 유동자본
up_can_order_amout = up_asset
Decimal_rounding = UP_Minimum_Order_cash_Size(sim_name)
up_can_order_amout = (up_can_order_amout // Decimal_rounding) * Decimal_rounding
print(up_asset,up_can_order_amout)
#구매주문
ret = upbit.buy_market_order("KRW-" + sim_name, up_can_order_amout) # 있는현금만큼 구매#갯수로 구매가능하면..
pprint.pprint(ret) # 구매주문확인
point_buy_pre = up_pre #구매시점 가격@@이부분 바꾸기?
max_pre = 0
while True:
up_pre = pyupbit.get_current_price('KRW-' + sim_name) # 업비트 현재가 조회
print(up_pre,"현재가")
if (up_pre > max_pre):
max_pre = up_pre
print(max_pre,'max_pre',point_buy_pre,"구매가")
print(((1-(up_pre/max_pre))*100),"고점대비 얼마(%) 손해중인지 확인")#@나중에 시간되면 음수로 고쳐두 됨
if (((1-(up_pre/max_pre))*100)>Per):#손해보는 % 대비 고점
print(((1-(up_pre/max_pre))*100),"팔시점 나옴")
break
time.sleep(1)
#판매주문
up_simbol_balance = upbit.get_balance("KRW-" + sim_name)
res = upbit.sell_market_order("KRW-" + sim_name, up_simbol_balance)
pprint.pprint(res)#판매주문확인
#무한루프임.
매우 오래전에 작성한 코드라서 좀 바꿀 것이 많다
현재는 파이썬에서 twitter 패키지가 아니라 tweepy라는 패키지를 사용하는 모양이다..
그 때 당시에는 잘 적용 되었었어다.
해당 모델은 일론머스크의 트위터를 1초마다 확인하여 글을 올린지 30초 이내일 경우에만 실행하고 중복매수를 방지하기 위해 시간을 확인하였다.
그리고 추적 손절매가 포지션을 나오는것이 중간에 고점대비 n%이상 아래로 흔들고 다시 올라가버려서
한번 좀 일찍 익절이 나버렸었다.
그래서 모델을 조금 바꾸었다 2번 n%이상 아래로 흔드는것을 보고 나서 포지션을 청산하게 바꾸었다.
etc) per 을 조정하면 n%의 n을 조정할 수 있다
그 떄 당시 내 기억으로 BTC나 DOGE언급만 하면 급등하였는데 (14%이상) 두번 정도 부정적인 말을 한적이 있다.
비트코인을 채굴하면서 쓰는 전력들이 커서 환경에 악영향을 준다나 뭐라나,.. 주가 조작하려고 한것 같지만..
이 떄는 이런식으로 사용하면 큰 리스크가 있을 수 있다.
그래서 여기에 자연어 처리 모델로 긍/부정을 판단하여 긍정문이면 진입하게 바꾸어 보았다.
해당 코드는 만든지 얼마 안되어 슈도 코드로 작성하는점.. 양해 바랍니다
while True:
while True:
account = "@elonmusk"
statuses = twitter_api.GetUserTimeline(screen_name=account, count=10, include_rts=False, exclude_replies=True)
#30초이내에 트위터를 올렸고 , 도지란 단어를 포함하면 if 문 실행
if (len(statuses)!=0):
##상태 한번만 보여주는것.
clear_output(wait=True)
display(statuses)
##
# print(statuses[0].text)
if(statuses[0].text.lower().find("doge") != -1) and ((int(time.mktime(datetime.now().timetuple())) - statuses[0].created_at_in_seconds) < 30):
predictions = Sentiment_Analysis(statuses[0].text.lower(),tokenizer)
if predictions == 1 :
break
else:
time.sleep(30)
time.sleep(1)
######심볼명 교집합#####
# sim_name = list(set(bin_sym) & set(up_sym)) # @
sim_name = "DOGE"
#추적 손절매 %
Per = 4
##구매 시점
up_pre = pyupbit.get_current_price('KRW-' + sim_name) # 업비트 현재가 조회#리플이든 비트코인이든
print(up_asset, "업비트 자본(조정 후)")#업비트 유동자본
up_can_order_amout = up_asset
Decimal_rounding = UP_Minimum_Order_cash_Size(sim_name)
up_can_order_amout = (up_can_order_amout // Decimal_rounding) * Decimal_rounding
print(up_asset,up_can_order_amout)
#구매주문
ret = upbit.buy_market_order("KRW-" + sim_name, up_can_order_amout) # 있는현금만큼 구매#갯수로 구매가능하면..
pprint.pprint(ret) # 구매주문확인
point_buy_pre = up_pre #구매시점 가격@@이부분 바꾸기?
max_pre = 0
while True:
up_pre = pyupbit.get_current_price('KRW-' + sim_name) # 업비트 현재가 조회
print(up_pre,"현재가")
if (up_pre > max_pre):
max_pre = up_pre
print(max_pre,'max_pre',point_buy_pre,"구매가")
print(((1-(up_pre/max_pre))*100),"고점대비 얼마(%) 손해중인지 확인")#@나중에 시간되면 음수로 고쳐두 됨
if (((1-(up_pre/max_pre))*100)>Per):#손해보는 % 대비 고점
print(((1-(up_pre/max_pre))*100),"팔시점 나옴")
break
time.sleep(1)
#판매주문
up_simbol_balance = upbit.get_balance("KRW-" + sim_name)
res = upbit.sell_market_order("KRW-" + sim_name, up_simbol_balance)
pprint.pprint(res)#판매주문확인
#무한루프임.
이런식으로 구성하면 될것입니다.
사전학습된 긍부정 모델을 가져와 해당 모델이 사용한 토크나이저를 이용하여 긍부정을 판단한 후에 긍정문이면
무한루프에서 매수 주문을 들어가게 해두었습니다.
해당 깃허브 주소는 ~~~
이며 해당 코드는 슈도 코드로 작성되었습니다. (과거에는 사용 가능했지만 트위터 개발자 api유료화된 부분부터 .. 너무 할게 많아짐.)
'IT - 코딩 > 트레이딩 관련' 카테고리의 다른 글
무위험 차익거래 자동매매 프로그램 2.주요 이슈와 해결 내용. (0) | 2023.02.26 |
---|---|
무위험 차익거래 자동매매 프로그램 1.API허용 및 입출금 주소등록 (4) | 2023.02.26 |
원하는 로직의 검색기에 따라서 종목이 뜨면 텔레그램으로 알람을 보내는 프로그램 (0) | 2023.02.23 |
yes trader 데이터 전처리(with python)+인베스트 , 데이터 가이드 포함 (0) | 2022.07.22 |
데이터 가이드 데이터 전처리(with python)+인베스트 , yes trader포함 (0) | 2022.07.22 |