2020/05/16

MetaTrader4 設定情報取得スクリプト

MetaTrader4 で、口座情報、証拠金状況情報、時刻情報、マーケット情報、商品情報を取得するスクリプトを作りました。

AccountXxx() や MarketInfo() を使って情報を取得するスクリプトはけっこうあちこちで見掛ける、珍しくもなんともないものなのですが、一応いくつか特徴があります。

  • コード値を返すものは、その意味が分かるようなメッセージにしている
  • 日付・時刻はフォーマットしている
  • サーバ時刻とローカル時刻の時差を計算している
  • 単位のある数値は、単位を表記するようにしている
    • point とか % とか
    • 例えば JPY 口座で USDCHF の情報を見ているときに、各種金額が JPY なのか USD なのか CHF なのかを明示している
  • おそらく MetaTrader5 由来だと思うのですが、AccountInfoXxx() や SymbolInfoXxx() でしか拾えない情報があるので、それらも表示するようにしている

2020/05/06

R Version 4.0 リリース

4/24、R Version 4.0 がリリースされました。主要な変更点を説明します。

2020/05/05

日付処理 - 月末日を計算する

月末日を求めたいときは、だいたい月で条件分岐しますよね。1, 3, 5, 7, 8, 10, 12月なら31日、4, 6, 9, 11月なら30日、2月なら閏年判定をやって28か29日。

でも今回は、計算式で月末日を算出してみたいと思います。

日付処理 - MetaTrader - ニューヨークサマータイム判定 (第n日曜日以降判定)

ニューヨークのサマータイム期間は、以下のようになっています。

  • 2006年以前
    • 4月第1日曜日~10月最終日曜日
  • 2007年以降
    • 3月第2日曜日~11月第1日曜日

ある日がサマータイム期間に入っているかどうかを判定するためには、第n日曜日以降なのかどうかを調べる必要があります。
Java ならこうするだけなのですが、今回は MetaTrader での実現を考えました。MetaTrader ではサマータイム情報を持っていないため、算出してみようという話です。

Blogger - 本ブログのテーマ等の変更


いくつか理由があって、本ブログのテーマや、記事の構造などを変更してみました。1つは、トップページに表示される記事が少ないと思ったこと。他に、Google のインデックス登録が進まないのが、レスポンスが悪いせいではないかと思ったことや、Blogger テーマの XML の構造が複雑で管理しにくいと思ったことなどです。
ざっと、どんなことをやったか書いておきたいと思います。


2020/05/02

日付処理 - Java - ニューヨークサマータイム判定

JRE がちゃんとアップデートされていて、2007年のサマータイム開始・終了日の変更に対応していれば、これでOK。

Java - Generics のワイルドカードについて

Java 総称型における、型パラメータのワイルドカードを正しく理解しましょう。上限境界、下限境界についても説明します。Capture helper idiom についても触れています。

Java - Proxy でプロパティアクセスログを取る

java.lang.reflect.Proxy は、動的プロキシを生成するためのクラスです。
ここで言うプロキシとは、オブジェクトを包み込むような形で、かつ元のオブジェクトの型を維持したオブジェクトです。プロキシはメソッド呼び出しを代理で一旦受け取り、何らかの処理を追加できます。型は維持されるので、呼び出し元からはプロキシを介していることをあまり意識する必要がありません。

動的プロキシのサンプルとして、getter/setter へのアクセスをロギングするようなプロキシを生成するユーティリティクラスを作ってみました。

Java - 赤ちゃんに動画を見せているときに PC/Mac を操作されるのを防止する

昔 (8年ほど前)、娘に PC で DVD を見せているときに、キーボードをいじってしまっていろんなことが起きるのを防ぐために作成した Babyproof という Java アプリケーションです。
当時は Java 6 の時代で、Windows での使用しか想定していませんでしたが、今回は Java 14 ベースの Mac 版にリライトしてみました。Windows でも動くんじゃないかと思いますが、未確認です。

Java - 割り込み可能な反復処理スレッドを作る

Java にはスレッドに対する割り込み機構があります。
スレッドからスレッドに interrupt シグナルを送って、割り込みたいという意思を伝える仕組みです。しかし、どんなスレッドでも interrupt を送れば割り込める、というような簡単なものではなく、割り込まれる側のスレッドが、interrupt シグナルを受け取ったときの処理を正しく実装していなければ、割り込むことはできません。
具体的には、InterruptedException や Thread.interrupted() のハンドリングを正しく行う必要があります。
今回はサンプルとして、繰り返し処理をし続けるスレッドを割り込み可能として作るためのちょっとした基底クラスを用意しましたので、見ていきたいと思います。

2020/05/01

Java の文字列連結の変遷とベンチマーク

Java で文字列を連結するときは、+ 演算子ではなく StringBuffer や StringBuilder を使え、ということがよく言われてきました。
しかし、そうしなければならない理由や、しなくてもいいケース、あるいは + 演算子の方が良いケースもあることが、正しく理解されていないように思います。ベンチマークも交えて詳しく説明します。

2020/04/30

Java のショートサーキット演算子の評価順序

ショートサーキット演算子 (&&, ||) の結合優先順位は && が先で || が後です。
でも、評価順序はどうなっているのでしょう? a || b && c という式で試してみました。

Java の演算子の処理時間

演算命令1回の処理時間は極めて短かく、タイマの精度よりも大幅に小さいです。1回の処理時間を直接測定することはできません。それを極力正確に測定することを試みました。

AtCoder 用 Java テンプレート (剰余演算編)

I/O編に引き続いて、剰余演算編。
AtCoder では、素数を法とした剰余類環上で答えを出す問題がちょいちょい出るようです。剰余類環の性質を知っているかどうかを試したいというよりは、巨大数計算で困らせたくないという親切心のようなので、よく使う性質はコードテンプレートに入れておこうかと思い、作ってみました。

2020/04/29

AtCoder 用 Java テンプレート (I/O編)

Twitter でなぜか競技プログラミングクラスタにつながったようなので、ちょっと AtCoder をやってみたり。競技プログラミングは初めてです。あ、大昔に SuperCon '95 や PSC 98 に出ましたが、TopCoder 系のは初めて。

ぶっつけ本番でやってみましたが、けっこう難しいし、Java で参戦したんですが、I/O 系のコードがめんどくさい。ちょっとテンプレートを用意してみることにしました。

MacOS Catalina で MetaTrader4 を動かす

MacOS Catalina (10.15.x) では、32ビットアプリケーションが動作しなくなりました。
そのため、様々な FX 業者で MT4 for Mac として配布している、MacOS 上の Wine を使って MT4 を動かしているようなものは、軒並動作しなくなってしまいました。

そこで、別のアプローチで動かしてみましたので、ご紹介します。

2020/04/26

2020/04/22

Blogger と AdSense

このブログは Blogger を使っています。

最初、Google sites で考えていたのですが、AdSense 広告が載せられないということで、断念しました。
次に考えたのが Drupal で、AWS 上に EC2 + RDS Aurora で Drupal 8 環境を作ってみたのですが、あまりに高コストで、やはり断念。

結局、Blogger に落ち着きました。

で、Blogger で AdSense を使う場合、管理画面の収益メニューから、AdSense に申し込めるようになったら申し込む、という手筈らしいので、がんばって記事を書きつつ、申し込めるようになるのを待ってました。
でもなかなかならない。一説には半年くらいはかかるとのこと。そこまで待ちたくないですね。

でも、ちょっと変わった手順で、AdSense が有効になりました。
  1. AdSense 側で、このブログのドメインを登録する
  2. AdSense 管理画面から自動広告を有効にする
Blogger 管理画面からは AdSense が使えないように見えていますし、AdSense ウィジェットは機能しないのですが、AdSense 側でドメインの審査が通れば、自動広告が有効にできることが分かりました。

AdSense 管理画面から、このドメインの見積もり収益が見えるようになったので、ちゃんと機能しているようです。

2020/04/21

Lombok を使って本質的なコーディングに集中しよう

Lombok を使えば、いわゆるボイラープレート (言語仕様上しかたなく書くコード) を減らすことができます。

Blogger コンテンツに自動的に関連記事を掲載する

Blogger コンテンツに自動的に関連記事を掲載するために、テーマに手を加えます。