BitMEX API で引数boolの場合 ToLower()で小文字にしないと無視されるよ

たとえば

https://testnet.bitmex.com/api/v1/trade/bucketed?symbol=XBTUSD&binSize=1h&partial=True&count=1&start=0&reverse=False

だと
partial / reverse が無視されてデフォルトになっちゃう。

https://testnet.bitmex.com/api/v1/trade/bucketed?symbol=XBTUSD&binSize=1h&partial=true&count=1&start=0&reverse=false

にしないとダメ。

Nugetでインストールできる Bitmex.NET はこのへんバグってるくさい。


C# による JSON 相互変換 (Json.NET 利用)

List<>とかの配列をjsonに変換

class Book
{
  public int Id { get; set; }
  public string Name { get; set; }
  public string Asin { get; set; }
}

...

using using System.Collections.Generic;
using using Newtonsoft.Json;
....
// 日本語ちゃんと出力されるようにしておく
Console.OutputEncoding = new UTF8Encoding();

// せっかくだからリスト構造を作ってみる
List<Book> books = new List<Book>
{
  new Book{ Id = 1, Name = "野望の王国 1", Asin = "B00M84FTOS"},
  new Book{ Id = 2, Name = "アカギ 1", Asin = "B00DVYTZ12"},
};

// 普通の JSON テキスト構築
Console.WriteLine("-------- normal json --------");
string jsonString = JsonConvert.SerializeObject(books);
Console.WriteLine(jsonString);

// インデント付きの JSON テキスト構築
Console.WriteLine("\n-------- formatted json --------");
string formattedJson = JsonConvert.SerializeObject(books, Formatting.Indented);
Console.WriteLine(formattedJson);

DomainModelからViewModelに詰め替える時には退屈だしエラー積み込むかもしれんからバカ正直にコード書かずにAutoMapperとか使おうぜ(超訳)

AutoMapperとは、その名の通り、オブジェクト同士を自動でマッピングしてくれるライブラリ

nugetでインストールして使おう

PM> Install-Package AutoMapper

Excel VBAでUnix Timestamp(ミリ秒付き)を取得する

Option Explicit


Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type


Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)


Private Function GetMillisecond() As Long
    Dim tSystem As SYSTEMTIME
    On Error Resume Next
    GetSystemTime tSystem
    GetMillisecond = tSystem.wMilliseconds
End Function


' (参考)http://d.hatena.ne.jp/KuroNeko666/20070821/1187689020
Public Function GetUnixTimestampWithMilliseconds() As Variant
    Dim ut As Variant
'    ut = ((Now - 25569) * 86400) - (3600 * 9) ' "- (3600 * 9)"は日本の時差を差し引いている。
'    ut = ut * 1000
'    ut = ut + GetMillisecond
    ut = (((Now - 25569) * 86400) - (3600 * 9)) * 1000 + GetMillisecond

    GetUnixTimestampWithMilliseconds = ut
End Function


Private Sub Test()
    Debug.Print "(Node.js) new Date().valueOf() === ", GetUnixTimestampWithMilliseconds
End Sub

C# で Thread.Sleepじゃなくて Task.Delay 使ったほうがよさげ

Thread.Sleep Method は、スレッドを止めるメソッドだから、スレッドがブロックされます。だから、この非同期処理が、メインと同じスレッドを使っているとしたら、メイン側のスレッドも停止します。

Task.Delay Method (TimeSpan, CancellationToken) こちらは特定の時間の後、Taskの実行が終了しますので、スレッドをブロックしません。

await か .Wait() は必要だよ