웹스쿨

업비트(UPBIT) API - 손절기능 제작 본문

개인 프로젝트/업비트 자동매매 일지

업비트(UPBIT) API - 손절기능 제작

마스터욱 2023. 3. 31. 00:16
반응형

손익 매도 기능만 탑재되어 있고, 손절 기능이 현재 없는 관계로 손절 기능을 추가했습니다.

 

사실 손절에 대해서는 아주 많은 고민을 했습니다.

어느시점에 손절을 걸어야 잘걸었다는 소문이 날까...

 

처음에는 기준을 시간으로 두었습니다.

매수후에 30분안에 손익 매도를 못했다면, 현재가로 매도가를 변경해버리는 로직이었습니다.

하지만 30분이 지나서 갑자기 떡상을 하면 어떻하지? 라는 안일한 마인드의 도출로 인해 로직을 다시 변경했습니다.

 

매수가에서 5% 하락하면, 손절매도 루틴을 추가했습니다.

뭐가 정답인지는 모르겠습니다...

익절 3%, 손절 5% 로직이기 때문에,

익절 두번할동안 손절 1번하면 거의 수익이 쌤쌤이라고 봐도 될거 같아요~

그러니 익절 확률이 최소 66% 이상은 되어야 이득이 되네요~

어차피 테스트 단계니 이대로 ㄱㄱ싱

 

  1. //현재가격 가져오기
  2. $now_price_string = $this->lib['util']->get_curl(array(
  3.     "url" => $url
  4. ));
  5. $now_price_string_array = json_decode($now_price_stringtrue);
  6. //write_log("./log/cancel_now_price.txt", $now_price_string_array);
  7. /*
  8. Array
  9. (
  10.     [0] => Array
  11.         (
  12.             [market] => BTC-RADS
  13.             [candle_date_time_utc] => 2018-08-30T05:52:00
  14.             [candle_date_time_kst] => 2018-08-30T14:52:00
  15.             [opening_price] => 0.00022473
  16.             [high_price] => 0.00022474
  17.             [low_price] => 0.00022471
  18.             [trade_price] => 0.00022473
  19.             [timestamp] => 1535608379405
  20.             [candle_acc_trade_price] => 0.11144456297486
  21.             [candle_acc_trade_volume] => 495.92067668
  22.             [unit] => 1
  23.         )
  24.  
  25. )
  26. */
  27. $now_price = $now_price_string_array[0]['trade_price'];
  28. $buy_price_3per = $latest_buy['price_buy'] * 0.05;
  29. $buy_price_3per_minus = $latest_buy['price_buy'] - $buy_price_3per;
  30.  
  31. //매수가격보다 5% 떨어졌으면, 그냥 팔자~(손절)
  32. if($buy_price_3per_minus >= $now_price)
  33. {
  34.     //매도취소
  35.     $query = array("uuid"=>$latest_buy['uuid_sell']);
  36.     $string_cancel = $this->lib['util']->get_curl(array(
  37.         "url"       => $url,
  38.         "post_data" => $query,
  39.         "header"    => array("Authorization: Bearer ".$this->get_my_token($query)),
  40.         "method"    => "DELETE"
  41.     ));
  42.     //write_log("./log/cancel_sell_confirm.txt", $string_cancel);
  43.     /*
  44.     */
  45.  
  46.     // 테스트, 재매도는 시간지연이 필요한거 같아서 2018-08-30
  47.     sleep(3);
  48.  
  49.     //여기서 볼륨을 API에서 다시 가져와야 한다...(DB에서 땡겨오면 정확하지 않으니깐...)
  50.     //다시 매도걸기
  51.     $query = array(
  52.         "market"    => $latest_buy['market'],
  53.         "side"      => "ask",
  54.         "volume"    => $string_array['remaining_volume'],
  55.         "price"     => $now_price,
  56.         "ord_type"  => "limit"
  57.     );
  58.     write_log("./log/re_buy.txt"$query);
  59.     /*
  60.     Array
  61.     (
  62.         [market] => BTC-BLOCK
  63.         [side] => ask
  64.         [volume] => 16
  65.         [price] => 0.00081755
  66.         [ord_type] => limit
  67.     )
  68.     */
  69.  
  70.     $sell_string = $this->lib['util']->get_curl(array(
  71.         "url"       => $url,
  72.         "post_data" => $query,
  73.         "header"    => array("Authorization: Bearer ".$this->get_my_token($query))
  74.     ));
  75.     $sell_string_json = json_decode($sell_stringtrue);
  76.  
  77.     $sql = "
  78.         UPDATE  autobit_buy_list
  79.         SET     uuid_sell       = '".$sell_string_json['uuid']."',
  80.                 buy_time_end    = NOW(),
  81.                 log_sell        = '".$sell_string."'
  82.         WHERE   idx             = ".$latest_buy['idx']."
  83.    ";
  84.     $this->lib['db']->query($sql);
  85. }

이 게시글은
https://webschool.kr/?v=board_view&board_key=38&idx=631
에서 작성한 글입니다. 소스코드의 경우 해당 블로그에서 이뿌게 노출이 되지 않을 수 있사오니, 위 링크로 들어오셔서 보시길 바랍니다.

반응형