코린이의 빗썸 API 이용해서 트레이딩 봇 만들기. 1

in #bithumb7 years ago (edited)

이오스 밋업이 있던 어느날.

코린이인 나는 처음으로 떡상의 짜릿함을 맛보았다. 

수년간 직장 생활을 해오고 있지만 

모은 재산이라고는 서울에 변변한 전세집 한칸 구하기도 힘든 수준이고 

부모님께 비빌 언덕 조차 없는 나는 그야말로 흙수저 오브 흙수저라고 할 수 있는데 하늘님께서 친히 이렇게 이오스를 점지해 주사 나에게 조금 더 윤택한 삶을 안내해 주시는구나. 


한참 들뜬 마음에 머릿속으로 격하게 핑크빛 미래를 설계하고 있던 도중 잇단 손절로 푸념을 늘어놓던 코린이 친구가 생각났다. 

이 친구는 사실 좀 더 잃어도 크게 지장 없는 유복하게 살아온 친구다. 하지만 나 혼자 벤츠 타고 다니면 이 친구는 얼마나 배가 아플까. 우린 전부 같이 잘나가야 했기에

친구에게 조금 늦은 감이 있지만 서둘러 오라고 했다. 에덴 동산으로

 (그때 1이오스 = 원화 25000)

그리고 그날 이후로 이오스는 단 한번도 그 가격에 얼씬도 하지 못했... 



정신 없이 떡락될때 자동으로 코인을 매도해 둔다면 자산을 온전히 지킬 수 있는거 아님?? 

내가 산 가격 대비 가치가 올라가면 팔고 낮아지면 사면 되는거 아니야? 


와! 이렇게 쉬운데 왜 계속 손해를 보고 있었지?? ㅋㅋ 


이 친구를 살려야겠다. 나도 살아야겠다. 

이날부터 매일 밤 무한 행복회로 뽕을 맞아 가며 퇴근 후 지친 몸을 이끌고 방구석 PC 전원을 켜기 시작했다. 


(대모험의 시작...)


기대를 안하고 찾아봤는데 상당히 대메뉴로 API를 제공해 주고 있었다. 

잦은 서버 다운, 결제 실패 이런것부터 좀 해결을 하고 외부에 API를 뚫어 주던가 하지 무슨 자신감으로 서비스의 근간을 무시하고 곁다리부터 펼치는지는 모르겠다만 

아무쪼록 제공 주셔서 감사합니다. 꾸벅 


일단 나는 nodejs를 좋아하니까 nodejs 샘플을 실행해보자.

뭔가 좀 이상한데? 

내가 전문가가 아니라 

잘은 모르겠지만...

sample은 만들다가 만 코드였다. (똥꼬가 막혀있어 결과를 볼 수 없음.)


샘플 코드를 약간 수정해서 임의로 콜백을 뚫어볼까? 

XCoinAPI.prototype.xcoinApiCall = function(endPoint, params, callback) {    var rgParams = {        'endPoint' : endPoint    };    if(params) {        for(o in params){            rgParams[o] = params[o];        }    }    var api_host = this.apiUrl + endPoint;    var httpHeaders = this._getHttpHeaders(endPoint, rgParams, this.api_key, this.api_secret);    this.request(api_host, 'POST', rgParams, httpHeaders, callback); }

XCoinAPI.prototype.request = function(strHost, strMethod, rgParams, httpHeaders, callback) {    var rgHeaders = {};    if(httpHeaders) {        rgHeaders = httpHeaders;    }    request({            method : strMethod,            uri : strHost,            headers : rgHeaders,            formData : rgParams        },        function(error, response, rgResult) {            if(error) {                console.log(error);                return;            }            var rgResultDecode = JSON.parse(rgResult);            callback(rgResultDecode);        }); }

api 호출 시 콜백 함수도 인자로 같이 넣어 주도록 하자. 

xcoinAPI.xcoinApiCall('/info/user_transactions', rgParams, function(data) {
   if (data && data.status == '0000') {
       var result = data.data;
       //console.log(result);[]  result["total_"+CURRENCY]
       ....
   }
}
);

어쨌거나 저쨌거나 private API가 잘 동작됨은 확인하였다. 

그런데 문제는 

xcoinAPI.xcoinApiCall("aaaa", ... , function(){
   ...
   xcoinAPI.xcoinApiCall("bbb", ... , function(){
   ...
       xcoinAPI.xcoinApiCall("ccc", ... , function(){
       ...
           xcoinAPI.xcoinApiCall("ddd", ... , function(){
           ...

           });
       });
   });
});

이 다중 콜백 문제를 어떻게 극복해야 할 것인가. 

그래서 선택했다. 

meteorjs 


2탄 : https://steemit.com/kr/@gaethug/api-2

Sort:  

이제 Reactive Programming의 세계로 오실 때가 되었군요.