プログラミングでアイデアを具現化したい

仮説アルファを妄想するのが日課でアイデアを具現化するためにプログラミングを始めました。主な言語はC# 。

SSHでPostgresqlに接続した話

趣味プログラマーとして今までノーガード上等でやってきましたがちょっとした事情で
セキュリティを高める必要があって、DBサーバへSSH接続してDBサーバから情報を
クライアントアプリで取得するフローを構築したのでメモ書き。

クラウドにおいてるwinサーバ(DBサーバでもあるw)にOPENSSHをインストールしてサービス開始。
このサイトがわかりやすかった。
https://www.server-world.info/query?os=Windows_Server_2016&p=openssh


②クライアントアプリからのアクセスもSSHに対応させる為、SSH.NETというライブラリを使用。
言語はもちろんC#。なんだかんだで中途半端にC#しかできねぇ
サンプルコードはこのサイトがわかりやすかった。
http://shen7113.blog.fc2.com/blog-category-4.html


サンプルコード
※あくまでサンプルなので、SSHのコネクション閉じないのかとかそーゆう話は別でw

public List<独自クラス> Get独自データ(引数) {
    try {

        var connectionInfo = new PasswordConnectionInfo("winサーバIP", 22, "winサーバユーザ", "パスワード");
        var client = new SshClient(connectionInfo);
        client.Connect(); //SSH接続
       
        var forward = new ForwardedPortLocal("127.0.0.1(localhost)", 63333, "winサーバIP", postgresqlで使うport);
        client.AddForwardedPort(forward);
        forward.Start(); //ポートフォアード開始

        NpgsqlCommand cmd = new NpgsqlCommand("ストアドファンクション名", _connPostgre);
        cmd.Parameters.AddWithValue("ストアドの引数", 引数);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        _connPostgre.Open();
        var result = cmd.ExecuteReader();
        var hoges  = new List<独自クラス>();
        while (result.Read()) {
            var hoge = new 独自クラス() {
                Name = result.GetValue(0).ToString(),
                Age = result.GetValue(1).ToString(),
            };
            hoges  (hoge );
        }

        return hoges  ;

    }
    catch (Exception ex) {
        Program.logger.Error(ex);
        return new List<独自クラス>();
    }
    finally {
        if (_connPostgre != null)
            _connPostgre.Close();
    }
}


こーゆう実装は今までしたことなかったのでやってみて良かったかもしれない。

VSCodeでC#とPythonの開発環境を用意した

tos5511.hatenablog.com

転職先ではノートPCを配布され、基本的にはそれですべて仕事するスタンス。
プログラミングは仕事で必須ではないしシステムグループでもないから、
当然VisualStudioなんて決済が通らずいれてもらえない。申請してないけどw

ということで今更ながら、Visual Studio Code (VSCode)で開発環境を揃えてみることに。
結果、色々勝手にインストールされることは制限されているものの
VSCodeと.Net Core SDK、Python3系だけインストールしてもらって
あとはpip installでjupyterとVSCode拡張機能でそれなりの開発環境を準備することが出来た。

今までVisualStudioやAnacondaありきで趣味プログラマーしていたので、
エディターベースなのは色々違和感あったけど、慣れてきたせいか
今では基本VSCodeで書くようになってきた。

C#の簡単なプロジェクト作成からexe発行までのTIPS
プロジェクト作成
Ctrl+@ ターミナル起動「dotnet new console」-> プロジェクトが生成される。

ビルドして実行
Ctrl+@ ターミナル起動「dotnet run」

ビルドだけ
Ctrl+@ ターミナル起動「dotnet build」

ビルド済を実行
Ctrl+@ ターミナル起動「C:\Data>dotnet C:\data\test.dll」

Nuget
Ctrl+P コマンドパレット起動「>Nuget Package Manager Add Package」

  • >導入したいパッケージとバージョンを選択

EXE作成
Ctrl+@ ターミナル起動「dotnet publish -c Release -r win-x64」


あと、使ってみて重宝しそうな拡張機能「LocalHistory」
->これは都合上Gitなど連携できないのでバージョン管理どうしようかと迷っていたところ、
変更前との差分も見れるし、手軽で操作も直感的ですばらしい拡張機能だと思った。

以上!


たぶん年内ラストのエントリになると思います。
皆様良いお年を

アルゴリズム取引の正体


アルゴリズム取引の正体

アルゴリズム取引の正体」を読んだ。


目次
第1章 アルゴリズム取引とは
第2章 アルゴリズム取引の市場環境
第3章 市場取引におけるリターン、リスク、コスト、流動性
第4章 アルゴリズム取引概論
第5章 アルゴリズム取引戦略
第6章 HFT:高頻度取引
第7章 外国為替取引におけるアルゴリズム取引
第8章 アルゴリズム取引の環境の変化と投資家の取組み


2章、3章ではレイテンシー、コストとディーリングシステム構築に無視できない重要なポイントを抑えていたり4章以降では各種アルゴリズムを幅広く解説している。実際に機関ディーリングシステムに関わった事のある方なら目新しい情報はないかもしれないが、システムトレーダー、ディーリングシステム開発者なら目を通しておく教科書のような本だと思う。新入社員が配属されたらまず読ませたい本だ。


私も手元に置いておこうと思い、FIX入門以来かな?めずらしくkindle化されていない本を購入してしまいました。