본문 바로가기
Coin Market Review/자동매매알고리즘탐구

원숭이 매매법 - 바이낸스 선물 API 자동거래

by 일등박사 2022. 4. 29.
728x90

 

단기적 주가를 예측하는것은 참 어렵습니다.

그 누구도 예측할수 없다는 이야기가 많습니다.

 

원숭이가 개미보다 심지어 펀드매니저 보다 수익율이 좋다

라는 이야기를 많이 들어보셨을것입니다!!

 

 

그래서 생각해보았습니다.

내가 원숭이가 되면어떨까???

 

이번 포스팅은 실제 원숭이 매매법을 기획해보고 실행에 옮겨보며 

이후 그 결과를 함꼐 공유하도록하겠습니다.

 

 


원숭이 매매법. 

 매시간 00분 아래 6가지 규칙으로 주사위가 던져집니다

 

  - 포지션 시작시간 선택 : 0 ~ 60분 중 하나 (1/60)

  - 포지션 유지시간 선택 : 0 ~ 60분 중 하나 (1/60)

  - 포지션 선택 :  롱 / 숏 / 홀드 중 하나 (1/3)

  - 코인 선택 : 선물 거래가 가능한 코인 중 하나 (1/ 코인개수)

  - 레버리지 선택 : 1 ~ 5 배 중 하나 (1/5)  

  - 금액 선택 : $10 ~ $30 중 하나 (1/3) 

   

 

파이썬 코드도 공유합니다!!

 

import random
import requests

## 1. 포지션 시작시간 선택
start_time = random.randint(1,60)
start_time


## 2. 포지션 유지시간 선택
holding_time = random.randint(1,60)
holding_time

## 3. 포지션 선택
position = random.randint(1,3)
position  # 1- long / 2 - short / 3 - hold

## 4. 코인 선택
result = requests.get('https://fapi.binance.com/fapi/v1/ticker/bookTicker')
target_coin = pd.DataFrame(json.loads(result.text))['symbol'].sample(1).iloc[0]
target_coin

## 5. 레버리지 선택
leverage = random.randint(1,5)
leverage

## 6. 금액 및 코인개수 선택
investing_usd = random.randint(1,3) * 10
coin_price = float(binance_client.futures_symbol_ticker(symbol=target_coin)['price'])
coin_count = investing_usd / coin_price
coin_count = round(coin_count,0)

 

 

이제 테스트 거래를 진행!!

MongoDB를 통하여 거래 이력을 남겨봅니다.

 

-파이썬 코드

if position_real == "HOLD":

    my_dict = {
            'TYPE': "HOLD",
             'timestamp': datetime.now().strftime("%Y%m%d-%H%M%S"),
               'key' : timeskey,
               'coin_nm' :  target_coin ,
               'coin_count' :  coin_count ,
              'position' : position_real,
              'investing_usd':   investing_usd,
              'leverage': leverage,
             "start_time" : start_time,
             "holding_time" : holding_time,
            "price" : 0,
             }

    mycol.insert_one(my_dict)
else:
    
    ## 실제 액션하기
    print("START WAITING")
    time.sleep(start_time * 60)
    binance_client.futures_create_order(
    symbol=target_coin,
    type='MARKET',
    side= position_real,
    quantity=coin_count * leverage
    )
    print("START MARKET position")
    ## 
    my_dict = {
            'TYPE': "START",
            'timestamp': datetime.now().strftime("%Y%m%d-%H%M%S"),
            'key' : timeskey,
             'coin_nm' :  target_coin ,
             'coin_count' :  coin_count ,
              'position' : position_real,
              'investing_usd':   investing_usd,
              'leverage': leverage,
             "start_time" : start_time,
             "holding_time" : holding_time,
                "price" : float(binance_client.futures_symbol_ticker(symbol=target_coin)['price']),
             }

    mycol.insert_one(my_dict)    
    print("START SAVING COMPLETE, sleeping")
    time.sleep(holding_time * 60)
    
    ## 포지션 청산
    print("START to FINISH position")
    position_end = "SELL" if position_real == 'BUY' else "BUY"
    
    ## 실제 액션하기
    binance_client.futures_create_order(
    symbol=target_coin,
    type='MARKET',
    side= position_end,
    quantity=coin_count * leverage
    )
    print("complete FINISHing position")
    ## 
    my_dict = {
            'TYPE': "END",
            'timestamp': datetime.now().strftime("%Y%m%d-%H%M%S"),
            'key' : timeskey,
             'coin_nm' :  target_coin ,
             'coin_count' :  coin_count ,
              'position' : position_end,
              'investing_usd':   investing_usd,
              'leverage': leverage,
             "start_time" : start_time,
             "holding_time" : holding_time,
            "price" : float(binance_client.futures_symbol_ticker(symbol=target_coin)['price']),
             }
    mycol.insert_one(my_dict)       
    
    ##

왜 랜덤인데 다 틀리는지,,,

 

이렇게 $1000 로 시작한 거래는 4번의 거래 후 -0.7%의 수익률을 기록하고있습니다!..

 

 

앞으로 과연 원숭이매매의 결과는 어떻게될까요!?

 

crontab을 통해 매시간 거래가 시작됩니다!!!

 

다음 포스팅은 즐거운 마음으로 쓸 수 있기를~~~!^^

 

 

728x90

댓글