仮想通貨自動売買システム ~注文編~

2021-04-19

仮想通貨自動売買システム ~注文編~

仮想通貨を自動売買するシステム構築に向けて構築していきます。 今回はとうとうAPIを使った注文を行います。 夢の不労所得システムを作るため今日も書いていきましょう。

関連する過去記事

過去の記事のコードをベースに機能を追加します。

bitFlyerのREALTIME APIを動かしてBitcoinの現在価格を取得する golangからbitflyer Lightning API呼び出して、保有資産の一覧を取得する

golangでiniファイルを読み込むとき用テンプレートプロジェクト golangでLogファイルを作成する方法

実装手順

ファイル構造

/
│  Config.ini
│  go.mod
│  go.sum
│  Trade.go
│─bitflyer
|   bitflyer.go
|   type.go
│─utils
|   logging.go
└─Config
    Config.go

type.go

過去記事で作り込んできたソースも随分膨らんできたので、ファイルに構造体を移動します。 過去定義した構造体に加え、注文に利用する構造体をコーディングします。

注文構造体

type Order struct {
    ID                     int     `json:"id"`
    ChildOrderID           string  `json:"child_order_id"`
    ProductCode            string  `json:"product_code"`
    Side                   string  `json:"side"`
    ChildOrderType         string  `json:"child_order_type"`
    Price                  int     `json:"price"`
    AveragePrice           int     `json:"average_price"`
    Size                   float64 `json:"size"`
    ChildOrderState        string  `json:"child_order_state"`
    ExpireDate             string  `json:"expire_date"`
    ChildOrderDate         string  `json:"child_order_date"`
    ChildOrderAcceptanceID string  `json:"child_order_acceptance_id"`
    OutstandingSize        int     `json:"outstanding_size"`
    CancelSize             int     `json:"cancel_size"`
    ExecutedSize           float64 `json:"executed_size"`
    TotalCommission        int     `json:"total_commission"`
    MinuteToExpire         int     `json:"minute_to_expire"`
    TimeInForce            string  `json:"time_in_force"`
}

注文の結果構造体

type ChildOrderAcceptanceOrder struct {
    ChildOrderAcceptanceID string `json:"child_order_acceptance_id"`
}

bitflyer.go

注文を行う関数を実装します。 内容としては過去記事と同じなので解説は割愛します。

func (api *APIClient) SendOrder(order *Order) (*ChildOrderAcceptanceOrder, error) {
    date, _ := json.Marshal(order)
    url := "me/sendchildorder"
    resp, _ := api.reqMessage("POST", url, map[string]string{}, date)
    var response ChildOrderAcceptanceOrder
    _ = json.Unmarshal(resp, &response)
    return &response, nil
}

Trade.go

まずはmain関数の全体像を書きます。

func main() {
    utils.LoggingSetting(config.Config.LogFile)
    apikey := config.Config.ApiKey
    secretKey := config.Config.ApiSecret
    productCode := config.Config.ProductCode
    apiClient := bitflyer.New(apikey, secretKey)

    order := &bitflyer.Order{
        ProductCode:    productCode,
        ChildOrderType: "LIMIT",
        Side:           "BUY",
        Price:          51,
        Size:           10,
        TimeInForce:    "GTC",
    }

    res, _ := apiClient.SendOrder(order)
    fmt.Println(res.ChildOrderAcceptanceID)
}

新規注文を出す Orderの内容はこちらを参考に設定します。

実行結果

このプログラムの実行するため、bitflyerに入金します。 入金が確認できたらこのプログラムを実行します。

注文前の状態 プログラムを実行した際にはこのように買い注文を入れることができていますね。

注文後の状態

まとめ

bitflyer Lightning APIを用いて仮想通貨の注文を出すことができました。 この調子で少しずつ不労所得システムを構築しましょう。