ビットコインBOT バイトフライヤー公開

昨日は、公開が間に合わず申し訳なかったです。

ソースを提供するとなって見返したのですがあまりにも汚いので流石にって事で書き直したりしてました。そのおかげで新年会と被って間に合わず。遅くなってしまってすいませんでした。

さて、ついにビットコインBOT「バイトフライヤー」を公開します。BOTについては下のサイトに紹介を書きましたのでぜひご覧いただければ幸いです。

ビットコインBOTをはじめたい人や、BOTのロジックをソースから欲しい方はぜひ。

(バイトフライヤー)

f:id:miraaaman:20180120093913j:plain

f:id:miraaaman:20180120104734p:plain

あと、以前から言ってました、仮想通貨業者の発注クライアントもつくりました。ビットフライヤー限定ですが、裁量をやる人や今のWEBクライアントが使いづらい人にオススメです。

こちらは、一旦は、BOTのおまけとさせていただきます。

実は、制作途中で IP BAN ? のような状態になって作業が進まなかった事があって途中な部分もあったりします。発注などに関係のない箇所ですが、履歴が全部読見込めなかったり、若干手付かずのところはあります。今後アップデートによって改訂していきますのでよろしくお願いします。

(おまけ)

f:id:miraaaman:20180121081621p:plain

 

●バイトフライヤーの詳細はこちら

http://baitoflyer.hatenablog.com/entry/2018/01/20/102112

 

baitoflyer.hatenablog.com

 

 

 

bitFlyer からリアルタイムデータを取得する方法「C#編」Realtime API via PubNub

Python編はこちら

for .NET 4.5.2

Nuget
- PubNub
- Utf8Json

Add Reference
- Runtime.Serialization;

//Program.cs
using System;

namespace bf_PubNub
{
    class Program
    {
        static void Main(string[] args)
        {
            var api = new Apis();

            api.Subscribe<Tick>(api.TickerFxBtcJpy, OnReceive, OnConnect, OnError);

            Console.ReadKey();
        }

        static void OnConnect(string message)
        {
            Console.WriteLine(message);
        }

        static void OnReceive(Tick data)
        {
            Console.WriteLine(data);
        }

        static void OnError(string message, Exception ex)
        {
            Console.WriteLine(message);
            if (ex != null)
            {
                Console.WriteLine(ex);
            }
        }
         
    }
}

 

//Apis.cs
using System;
using System.Text;
using PubnubApi;
using System.Runtime.Serialization;
using Utf8Json;

namespace bf_PubNub
{
    public class Apis
    {
           
        private readonly Pubnub _pubnub;

        public string TickerFxBtcJpy = "lightning_ticker_" + "FX_BTC_JPY";
         
        public Apis()
        {
            var config = new PNConfiguration();
            config.SubscribeKey = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f";
            config.PublishKey = "";
            _pubnub = new Pubnub(config);
        }

        public void Subscribe<T>(string channel, Action<T> onReceive, Action<string> onConnect, Action<string, Exception> onError)
        {


            _pubnub.AddListener(new SubscribeCallbackExt(
                (pubnubObj, message) => {

                    if (message != null)
                    {

                        string json = message.Message.ToString();

                        T deserialized;
                        try
                        {
                            deserialized = JsonSerializer.Deserialize<T>(json);
                            onReceive(deserialized);
                        }
                        catch (Exception ex)
                        {
                            onError(ex.Message, ex);
                            return;
                        }
                    }


                },
                (pubnubObj, presence) => { },
                (pubnubObj, status) => {

                    if (status.Category == PNStatusCategory.PNUnexpectedDisconnectCategory)
                    {
                        onError("unexpected disconnect.", null);
                    }
                    else if (status.Category == PNStatusCategory.PNConnectedCategory)
                    {
                        onConnect("connected.");
                    }
                    else if (status.Category == PNStatusCategory.PNReconnectedCategory)
                    {
                        onError("reconnected.", null);
                    }
                    else if (status.Category == PNStatusCategory.PNDecryptionErrorCategory)
                    {
                        onError("messsage decryption error.", null);
                    }

                }
            ));


            _pubnub.Subscribe<string>()
                .Channels(new[] { channel })
                .Execute();

        }

    }

 
    public class Tick
    {
        [DataMember(Name = "product_code")]
        public string ProductCode { get; set; }

        [DataMember(Name = "timestamp")]
        public DateTime Timestamp { get; set; }

        [DataMember(Name = "tick_id")]
        public long TickId { get; set; }

        [DataMember(Name = "best_bid")]
        public double BestBid { get; set; }

        [DataMember(Name = "best_ask")]
        public double BestAsk { get; set; }

        [DataMember(Name = "best_bid_size")]
        public double BestBidSize { get; set; }

        [DataMember(Name = "best_ask_size")]
        public double BestAskSize { get; set; }

        [DataMember(Name = "total_bid_depth")]
        public double TotalBidDepth { get; set; }

        [DataMember(Name = "total_ask_depth")]
        public double TotalAskDepth { get; set; }

        [DataMember(Name = "ltp")]
        public double LatestPrice { get; set; }

        [DataMember(Name = "volume")]
        public double Volume { get; set; }

        [DataMember(Name = "volume_by_product")]
        public double VolumeByProduct { get; set; }
         

        public override string ToString()
        {
            return Encoding.UTF8.GetString(JsonSerializer.Serialize(this));
        }
    }

}

 

   
参考サイト
GitHub : bitFlyer HTTP APIs Client Library for .NET (C#)
PubNub C# V4 SDK 4.0.12.0
bitFlyer Lightning API Documentation
 

 

bitFlyer からリアルタイムデータを取得する方法「Python編」Realtime API via PubNub

C#編はこちら

for Python 3.6

pip install tornado
pip install pubnub
# coding: utf-8
from pubnub.callbacks import SubscribeCallback
from pubnub.enums import PNStatusCategory
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub_tornado import PubNubTornado
from pubnub.pnconfiguration import PNReconnectionPolicy

c = PNConfiguration()
c.subscribe_key = 'sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f'
c.reconnect_policy = PNReconnectionPolicy.LINEAR
pubnub = PubNubTornado(c)

from tornado import gen
@gen.coroutine

def main(channels):
    class Callback(SubscribeCallback):
        
        def message(self, pubnub, message):
            print(message.message)

    s = Callback()
    pubnub.add_listener(s)
    pubnub.subscribe().channels(channels).execute()

if __name__ == '__main__':
    channels = [
        'lightning_ticker_FX_BTC_JPY',
        
    ]
    main(channels)
    pubnub.start()

 

 

参考サイト
ビットコインxシストレ
PubNub Python V4 SDK 4.0.13
bitFlyer Lightning API Documentation

安定の BTC

f:id:miraaaman:20171205202436p:plain

正直いうと最初はそこまで期待していなかったんですよねBTC。というのも以前から言っているように、相当乗り遅れた感があってポジションを持った4000ドルあたりから、どうせここから折り返すんでしょ!?くらいにしか思っていませんでした。

だって、ビットコインがまだカス同然で1円以下だった頃を知っている自分としては、相当高値をつかんだ気がしてましたからね。しかも持ったころはスプは広いし、こんなに利益が出ないもんなんだな(FXと比較して)思っていたんですよ。

しかし、いまや超安定通貨となってしまって、下がれば上がる、下がったら買えば儲かるという確変パターンです。ツイッターで見かけた人は20回くらい下で拾って、3回しか負けてないとか。こんなのありえないですからね普通。

まぁ上げてるうちは流れに任せればいいのかな。もうバブルですな。最後はやられるにしても、ある程度下で持っていれば、逃げどきを間違えなければ大損はしないかもね。

現在、7000ドルくらいの利益ですが、まぁジンバブエ基準なら!?、1万5千ドルは堅いので、まだガチホしようと思ってます。