ぬるぽを見かけたら 全力でぶっ叩くのみ


by Denullpo Smasher Hammerson
カレンダー
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

タグ:プログラミング ( 8 ) タグの人気記事

Makefile革命

ぶっちゃけ、makefileってめんどい。
…というきっかけから、いろんな派生品が生まれたわけではありますが、
どれも使い勝手は今ひとつ。

その理由は、
・従来のmakefileの記法を踏襲しつつ
・中途半端に高度な機能を盛り込んでて
・拡張機能を覚え直すのに手間かかる割に
・めんどいという点があまり改善されてない
というところにある。

自分がmakefileに求める要件とは
・動的にコマンドを生成して実行する
・依存関係を考慮してコマンドの実行順序を決める
・依存元が更新されたときだけコマンドが実行される
ぐらいか。ならば、先に挙げた不満な点とは全く無関係なので、
単純にその逆をいくのが理想だ。

・従来のmakefileの記法は全く無視して
・便利な機能をとことん追求し
・わざわざ拡張機能覚え直す必要なくて
・めんどさを徹底的に解消する

一見無理難題に見えるが、これは既存の汎用的なスクリプト言語を
ベースにするだけで一通り解決できる。
ここではPHPを使っているが、別にRubyでもPythonでもいい。
汎用的スクリプト言語なら、中途半端な拡張機能特有の仕様不備に
悩まされることなく自前でとことん機能を強化できるし、機能強化の
ために独自の言語体系を覚え直す必要もない。

…ということで、これを実現したらどうなるかのデモ目的で
サンプル付きβ版を公開してみる。
[ymk.zip](YMk's Makefile killerの略…かどうかは謎)
なお、今のところはWindows依存なので悪しからず。

まずは、てけとーに展開
[PR]
by denullpo | 2011-11-19 01:16 | こっち関係
PHPで複数のプロセスを並列動作させるとき、proc_open‍()を使うというところ
までは容易に調べられるであろう。
(プレビューでopen‍()の部分が引っかかった。なんか面倒な仕様になったもんだ。)
が、実際これで並列動作させるコード書いてみると、大抵ある箇所で壁にぶち当たる。
サブプロセスのstdoutやstderrから結果を拾ってこようとすると、その結果が
得られるまで動作が止まってしまい、非同期処理が実現できなくなる。
この問題を解決する模範解答は存在する(stream_select()デスヨ)のだが、
フレームワーク的に面倒なものがある。

そんなわけで別ルート。
"stdoutやstderrから結果を拾ってくるときに動作が止まる"
という現象さえ回避できれば解決なのだ。
動作が止まるのは、stdoutやstderrに書き込まれた量より多くの出力を得ようとして
指定量に達するまで待ってしまうことにある。即ち、書き込み済みのstdoutやstderrの
量を捕捉できさえすれば、そのぶんだけ指定することで待ち時間をなくすことができる。

そのためには、stdoutやstderrの出力をファイルに書き出せばよい。
そうすればファイルサイズから書き込み済みの量が判明する。
で、PHPにはtmpfile()という便利なファンクションがある。
・重複しない適当な名前でファイルを生成してくれる
・このファイルを読み書き両用でopenしてくれる
・サブプロセスに書き込ませながら結果を読み出すことができる
・用済みになったら自動的にファイルを消してくれる
要件ぴったし。

サンプルコード
[PR]
by denullpo | 2011-01-27 03:42 | こっち関係
システムトレードにおける自動売買の基本スタイルってのは、とてもシンプル。
移動平均線の位置にひたすら逆指値仕掛けておくだけ。単純計算では
この方法で必ず利益が出ることは数学的にも証明できるですよ。

ただし


これが成り立つのは、スプレッド,手数料,スリッページが一切ない場合に限る。
実際の取引では"一切なし"なんてあり得ないところがミソ。
この戦法は移動平均線あたりをゴニョゴニョ上下し続ける動きに弱い。
このあたりのスレショルドをうまく調整してやらないと、損失が積もってしまう。

この問題は、スプレッドが狭く且つ値動きの激しい通貨ペアを選べば比較的
ゴニョゴニョの頻度は少ない。GBP/USDなんかがお勧めですね。

ただし


値動きの激しい通貨ペアはスリッページが起こりやすい罠がある。
さらに、週末なんかで取引できない隙に大きく動くことも多々あるんですな。
FXCMJって週明け直後の取引に何故か参加できない罠があったけど、
今はどうだか知らんぬ。(←ノーポジで1年以上口座放ったらかし)

他にも、大きな天災,人災や要人の発言なんかが引き起こすサプライズで
スリッページってレベルじゃないぐらい一気に動くこともある。
こんな状況でポジション入れた位置が移動平均線から大きく離れてしまう
ようなケースの場合は、決済する位置を修正して損失を減らす方針で。
特に、ちょっとしたテロのような一時的な災難の場合は、一気に動いた後で
大きく戻す可能性が高い。こゆ動きで移動平均線まで待ってたら損失でかいよ。

あと、一番大事なのは、組みたてのアルゴリズムをぶっつけ本番で使わないこと。
必ずデモ取引で試して検討あれ。

FXCMジャパン:新次元システム「らくちんFX」提供
[PR]
by denullpo | 2008-11-28 01:08 | 為替
[過去記事]
[壹] [弐] [参]

変数に相対的な計算を重ねていくと誤差が嵩むわけで、その対策として
リフレッシュ処理が要る。具体的にどーすりゃいーのかっつーと、誤差が嵩んで
きそーなところで精度を改善してやればいい。
前回で例示した2D回転ベクトル(c,s)を加法定理で回していく場合、誤差により
"回転ベクトル"としての要件を満たさなくなる可能性がある。
この要件ってのは、cとsの関係が成す法則。任意の回転角に対して cos と sin を
求めたとき、両者にはどんな関係が成り立っているのか?

c2+s2=12

が正解。
(1じゃなくて12なのは、2乗された値であることを強調しているん)

で、誤差が嵩むとこの式が成り立たなくなるんですよ。
回転させているうち、渦巻き状に狭まっていくかもしれないし、逆に広がるかも
しれない。この問題を防ぐには、前述の式が成り立つように修正してやればよい。
特に、単位ベクトル,単位マトリクスを回転したものに対してこの手のリフレッシュを
行うことはノーマライズといって、ベクトルやマトリクスを扱うときの基本技だったり。

More
[PR]
by denullpo | 2008-04-19 21:27 | こっち関係
[過去記事]
2D,3Dプログラミング向け我流数学 其之壹
2D,3Dプログラミング向け我流数学 其之弐

今回は、実践的なところで。

[お題]
平面上の任意点を原点周りでひたすら回転し続けるプログラムを考えるべし

普通に考えるなら、回転角を変数として変化させつつ、その都度回転公式を通して
いけばよい。以下の例では、ループの度に回転後の値が x2 と y2 に格納される。

x=INPUT_X;
y=INPUT_Y;
r=0.0; // 回転角
while(1){
    // 回転角のcos,sinを求める
    c=cos(r);
    s=sin(r);

    // 回転後の位置を求める
    x2=c*x-s*y;
    y2=s*x+c*y;

    // 回転角をずらす
    r+=0.1;
    }


…とまあ、こんな感じになるのだが、この例は処理効率の点でボツ。

More
[PR]
by denullpo | 2008-04-16 23:33 | こっち関係
[過去記事]
2D,3Dプログラミング向け我流数学 其之壹

ベクトルとマトリクスの乗算はベクトルをどちら側に置くかでマトリクスの意味合いが
変わってくるが、プログラミングにおいてはそれだけではなく、さらに重要な違いが
顕れる。それはハードウェアの性質に起因する要素であり、どう扱うかで計算効率が
大きく変わる。3DCGみたいに大量のベクトル演算を要する場合、これらを考慮して
設計しなければならない。

法則1: データをメモリ上に置くときは、何次元のデータだろうと必ず1次元に展開される
例えば、2次元であるマトリクスをメモリ上に置くときは通常、行単位でまとめられ、
それを1次元に並べ直した状態となる。
a0101404_0415245.gif

はメモリ上に
xx xy xz xw yx yy yz yw zx zy zz zw wx wy wz ww
と配置される。

一方、ベクトルはどっちでも内部構造的には変わらない。数学的には表記が変わって
くるものだが、1次元に展開しちゃえば(X,Y,Z,W)が X Y Z W の順に連続して置かれる
のは一緒。

More
[PR]
by denullpo | 2008-04-08 00:58 | こっち関係
2D,3D問わず、画像を動的に処理するためには座標等の計算、即ちベクトルや
マトリクスを使いこなすことが肝要。
このうち、ベクトルについては特に説明なくてもどんなものかすぐ理解できると思う。
単なるスカラ値の集合だかんね。座標とか向きとか、位置関係を表す何か。
或いは、色のRGB値とか。単純明快。

では、マトリクスとは何か。
ベクトル値の集合であることと、計算方法ぐらいは高校数学で教わるものだが、
実際に何を意味しているのかまで理解している御仁は意外と少なげ。

その答えは、ベクトルとマトリクスの乗算にある。
ベクトルにマトリクスをかけると、計算結果はベクトルで表れる。
例えば、位置ベクトルに回転マトリクスを乗算して、回転後の位置を得る。
つまり、ここでの両ベクトルは入力と出力の関係であり、マトリクスはベクトルを
処理する何かという位置付けになる。
で、大事なのはここから。

More
[PR]
by denullpo | 2008-04-06 01:28 | こっち関係
ちょいと、考えさせられる内容
プログラミングのカルト宗派

今時の優れたプログラマってぇのに、進歩的であることという要素があるです。
昔と今では技術も環境も全然違うかんね。だから、保守的であることは大きな足枷。
とはいえ、こういった特性をもったプログラマがそれぞれ得意とする分野において
誰よりも優れたコードを書くということも否めない。
特に多人数のプロジェクトでは、各メンバーの個性を殺すことはできれば避けたいこと。

・経験カルト
新しいことに対して慎重になるのは、大事なことです。
無闇に突っ走るとデスマーチを招く。
かといって、新しいことを忌避するのはダメダメですけどね。
如何にして新しいことを取り込み、身につけていくかが神髄なわけで。

More
[PR]
by denullpo | 2008-01-05 23:35 | こっち関係