SSブログ
FIX メッセージ ブログトップ

FIX メッセージ ~ Header(ヘッダフィールド) ~ [FIX メッセージ]

こんばんは!!キキです。

今回は長いので前置きなしでいってみよう!!



今日はHeader(ヘッダフィールド)を説明します

いつも説明しているFIX メッセージを見ていきましょう
見やすいようにメッセージフィールド毎に分けています。
本来は1行です。@は0x01(SOH)を表しています

8=FIX.4.4@
9=91@
35=A@
34=1@
49=testusr4109@
52=20101124-20:27:25.000@
56=OANDA@
98=0@
108=300@
141=Y@
554=Passw0rd@
10=133@

上のFIXメッセージを確認するとHeader(ヘッダフィールド)は

次の7つになります

8=FIX.4.4@
9=91@
35=A@
34=1@
49=testusr4109@
52=20101124-20:27:25.000@
56=OANDA@

7つのうち順番が決まっているのは

8=FIX.4.4@
9=91@
35=A@

になります

仕様書P12にも書いてありますが簡単に説明していきます

1番目 ・・・ 8=FIX.4.4@

FIXメッセージでは最初に指定しなければなりません。

OANDAではFIX.4.2とFIX.4.4(FIXのバージョン)が指定できますが

私のブログではFIXは4.4のバージョンで実装していきますので

常にFIX.4.4指定します

2番目 ・・・ 9=91@

タグ10、フィールド名Checksumフィールドに転送されるメッセージの長さ(バイト)。

FIXメッセージでは常に2番目のフィールドになります

最初はここの設定する値がわかりませんでした。(;^_^A

最後に設定する値を説明します

3番目 ・・・ 35=A@

具体的なメッセージタイプ

FIXメッセージでは常に3番目のフィールドになります

Aはログオンを意味します。

今のところメッセージタイプごとに記事を書いていく予定です。

たくさん定義されていますがOANDAで使用できるのは割と少ないですね。

仕様書P51でOANDAがサポートしているメッセージタイプが

確認できます。

上記以外はどの順番で指定しても問題ないのかな?と思っていますが

確認はしていません。<(_ _)>

さて、残りの4つも続けて説明していきます

34=1@

整数のメッセージ・シーケンス番号

この値はクライアントからサーバーに送信するたびに

1増やした値を指定すればOKです

初めのFIXメッセージを送信するとき、

すなわちログオンするときは1を指定して、次は2、3と指定します

49=testusr4109@

メッセージの送信者を識別するために付与される値。

ここは常にログインユーザーIDです。

OANDAからもらったユーザーIDを指定してください

52=20101124-20:27:25.000@

メッセージ送信の時刻(常にUTC(協定世界時、または ‘GMT’ )で表示

と書いていますが、ちょっと前はUTCを指定したのですが

現在は日本時間を指定すればいいみたいです

56=OANDA@

メッセージの送信先を識別するために付与される値。

ここは常に"OANDA"を指定します。

さて、仕様書には

タグ57、フィールド名TargetSubIDが残っていますが

こいつもついでに説明しておこうかなと思いましたが

実際に使う時になったら説明します。

自分にとってはこのフィールドが曲者でした・・・。

わかってしまえば、「なんじゃーい。それでいいんかい!」

と簡単なんですけどね。^^

スポンサーリンク

~ 重要 ~

タグ9、フィールド名BodyLengthに設定する値について

この値は簡単に説明すると、

FIXメッセージ3番目のフィールド(タグ35、フィールド名MsgType)

からタグ10、フィールド名CheckSumの1つ前までの文字列の長さを指定すれば

OKです。(≧∇≦)b

わからなかったら下のソースを見ていただいた方が

はやいです。

Header(ヘッダフィールド)をC#で実装してみよう!!

private void button1_Click(object sender, EventArgs e)
{
    var sb = new StringBuilder();
    // 3番目のフィールドから作成するのがポイントです
    sb.Append("35=A" + Convert.ToChar(0x01));
    sb.Append("34=1" + Convert.ToChar(0x01));
    sb.Append("49=testusr4109" + Convert.ToChar(0x01));
    sb.Append("52=" + DateTime.Now.ToString("yyyyMMdd-HH:mm:ss.fff") + Convert.ToChar(0x01));
    sb.Append("56=OANDA" + Convert.ToChar(0x01));
    sb.Append("98=0" + Convert.ToChar(0x01));
    sb.Append("108=300" + Convert.ToChar(0x01));
    sb.Append("141=Y" + Convert.ToChar(0x01));
    sb.Append("554=Passw0rd" + Convert.ToChar(0x01));
    // ここまでのsbの文字列の長さをタグ9に設定します

    sb.Insert(0, "9=" + sb.Length.ToString() + Convert.ToChar(0x01));
    sb.Insert(0, "8=FIX.4.4" + Convert.ToChar(0x01));
    // 先頭に追加することで
    // 1番目 タグ8、フィールド名BeginString
    // 2番目 タグ9、フィールド名BodyLength
    // 3番目 タグ35、フィールド名MsgType
    // と順番になりました

    // チェックサムの計算は最初から最後までのフィールド
    // が対象です
    sb.Append("10=" + CheckSum(sb).ToString("000") + Convert.ToChar(0x01));
    using (var fs = new FileStream(@"result.bin", FileMode.Create))
    {
        fs.Write(Encoding.ASCII.GetBytes(sb.ToString()), 0, sb.Length);
    }
}

これを実行すれば 9=91@ と出力されます。

※CheckSumメソッドは前回の記事に載せています

前回と似ていますが、タグ9、フィールド名BodyLengthがあるので

少し変更されています。

ログオンに関してはユーザーIDとパスワードを変更すれば

そのまま動作しそうですね ^^

次回はFIXからいったん離れて、

まずはサーバーへ接続してみよう!!です。

少し長いな・・・。ふ~っ、疲れた(。´-д-)
タグ:fix OANDA header
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:マネー

FIX メッセージ ~ Trailer(トレーラフィールド) ~ [FIX メッセージ]

こんばんわ!!キキです。

FXの取引勝ってますか?

私はダウ理論で少し勝つことができたのですが

2か月経てば負けてしまったので

ダウ理論を使うのも諦めようと思っていたのですが

1か月間は勝つことができたんだ!!

と、いうことに自信を持って

ダウ理論とインジケーターを組み合わせた手法で

やっていくことにしました!!

そして、この3日間の成績は

なんと!!



+8.7pips



-0.1pips



+14.1pips







といい感じの結果になりました!!v(≧∇≦)v イェェ~イ♪

最終目標は1日+10pipsで考えています!!

もうこれ以上は望みません。

メンタル崩壊しないように、ただただ同じことを

延々としていくだけでいいのだ!!

FXがつまらなくなった時が1人前の証だ!!

うぉー!!w( ▼o▼ )w オオォォ!!

(1人気合いが入ってます…)






え~、さて、気を取り直してと・・・。

それでは、Trailer(トレーラフィールド)について説明します

Trailer(トレーラフィールド)はFIX メッセージの終わりに

出てこなければなりません。

タグの値は10、フィールド名はCheckSumです

※いつも説明しているFIX メッセージ
見やすいようにメッセージフィールド毎に分けています。
本来は1行です。@は0x01(SOH)を表しています

8=FIX.4.4@
9=91@
35=A@
34=1@
49=testusr4109@
52=20101124-20:27:25.000@
56=OANDA@
98=0@
108=300@
141=Y@
554=Passw0rd@
10=133@

OANDAの仕様書を確認すると

「3バイトの単純チェックサムがメッセージの終りの区切り文字

として(トレーリング(SOH)とともに)機能する。

常に3文字で定義される。」

と書いてあります。

難しいことはよくわかりませんがチェックサムの値を設定すると

言うことです

ところで、チェックサムとは?

私が説明するよりもググってもらった方が詳しい説明が

載っていますので各自で調べてみてください(^ ^)



~ 重要 ~

チェックサム計算対象はFIX メッセージのうち

Trailer(トレーラフィールド)を除いたメッセージで計算します

この時点ではチェックサムの値がわからないから当たり前か。f(^_^)

CheckSum(チェックサム)をC#で計算してみよう!!

端が切れているかもしれませんがコピーはちゃんと

できるみたいです。

コピペして実行してみてください。

private int CheckSum(StringBuilder sb)
{
    var sum = 0;
    for (var i = 0; i < sb.Length; i++)
    {
        sum += Convert.ToInt32(sb[i]);
    }

    return sum % 256;
}

private void button1_Click(object sender, EventArgs e)
{
	var sb = new StringBuilder();
	sb.Append("8=FIX.4.4" + Convert.ToChar(0x01));
	sb.Append("9=91" + Convert.ToChar(0x01));
	sb.Append("35=A" + Convert.ToChar(0x01));
	sb.Append("34=1" + Convert.ToChar(0x01));
	sb.Append("49=testusr4109" + Convert.ToChar(0x01));
	sb.Append("52=20101124-20:27:25.000" + Convert.ToChar(0x01));
	sb.Append("56=OANDA" + Convert.ToChar(0x01));
	sb.Append("98=0" + Convert.ToChar(0x01));
	sb.Append("108=300" + Convert.ToChar(0x01));
	sb.Append("141=Y" + Convert.ToChar(0x01));
	sb.Append("554=Passw0rd" + Convert.ToChar(0x01));
	sb.Append("10=" + CheckSum(sb).ToString("000") + Convert.ToChar(0x01));

	using (var fs = new FileStream(@"result.bin", FileMode.Create))
	{
	    fs.Write(Encoding.ASCII.GetBytes(sb.ToString()), 0, sb.Length);
	}
}

これを実行すると 10=133@ と出力されます。

期待どおりの結果になりましたね。

よかった、よかった。ε-(^∇^;)ホッ

次回はFIX メッセージのHeader(ヘッダフィールド)について説明します
タグ:fix OANDA

FIX メッセージ② [FIX メッセージ]

おはようございます。キキです

突然ですが、最近のFXの成績はどうですか?

いろいろと試行錯誤して頑張ってるけど

一向によくならん!!

順調に負け続けてます。



最初は、インジケーターをいじくりまわして

聖杯探しの旅に出かけ、聖杯はないってことに気づき

じゃ、どうする?ってなった時にダウ理論に出会いました

ダウ理論自体は前から知っていたけれどそれをトレードに

使ったことはなかったので、

「もう、これしかない!!」ってことで最近はダウ理論

メインで取引していました。

すると日単位でだんだんと勝てるようになってきて

月単位で初めてプラスになり、「やっと、きたのか?」

と思っていたら、次の月はマイナスになってしまいました…。

ダウ理論もダメなのか~。

と、現在はまたインジケーターでの取引に戻そうかなと考えています



早く俺の時代こないかな~。(T T)


スポンサーリンク



皆さん、前回の続きは覚えていますか?

FIX メッセージは複数個のメッセージフィールドからできている

ということです

まだの人はこちらから前回の記事を読んでください



さて、ここからが前回の続きになります



FIX メッセージは

・ヘッダー(header)

・ボディ(body)

・トレーラー(trailer)

からできており

FIX メッセージ = header + body + trailerという順番で構成されています

これを前回使用したFIX メッセージで説明すると

※前回のFIX メッセージ
8=FIX.4.4@9=91@35=A@34=1@49=testusr4109@52=20101124-20:27:25.000@56=OANDA@98=0@108=300@141=Y@554=Passw0rd@10=133@

・ヘッダー(header)
8=FIX.4.4@9=91@35=A@34=1@49=testusr4109@52=20101124-20:27:25.000@56=OANDA@

・ボディ(body)
98=0@108=300@141=Y@554=Passw0rd@

・トレーラー(trailer)
10=133@

上記の3つに分かれます

詳細はオアンダのFIX仕様書P12、P14を参照してください



サーバーに送信するFIX メッセージは

FIX メッセージ = header + body + trailerとなっており

bodyの内容はheader内のタグ35(フィールド名はMsgType)の値に

よって変わります。

前回のFIX メッセージでは35=A@の部分ですね。

これはAはログオンメッセージと定義されています

タグ、メッセージ一覧はサイドバーのマイカテゴリー

から見ることができます

今後必要になるので1度確認してください



次回はtrailerについて説明する予定です。

なぜ、header、body、trailerの順に説明しないのか?と言うと

trailerはメッセージフィールドが1つだけで説明しやすいので

先にtrailerから説明して、次にheaderを説明する予定です。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:マネー

FIX メッセージ① [FIX メッセージ]

こんにちは!!キキです。

雨ばかり続いて、晴れたと思ったら少し寒くなってきましたね

季節の変わり目は体調を崩しやすいので皆さん気をつけましょう





まぁ、言ってる本人が少し風邪気味なんですが…





さて、FIX メッセージの説明をしていきます

OANDA FIX 仕様説明書(日本語ドキュメント 最終更新日:2015年1月8日)の

6ページ目にのっているFIX メッセージを例として説明します

※OANDAではスペースとなっているところをわかりやすくするため

@に置き換えています。

8=FIX.4.4@9=91@35=A@34=1@49=testusr4109@52=20101124-20:27:25.000@56=OANDA@98=0@108=300@141=Y@554=Passw0rd@10=133@

※もしかしたら折り返されて表示されているかもしれませんが1行表示です



1つずつ順番に説明していきます。

FIX メッセージは複数のメッセージフィールドからできています。

メッセージフィールドは、8=FIX.4.4@や9=91@のことです。

簡単に言えば@の次から、次の@までです。下で詳しく説明します。

メッセージフィールドの終わりは 0x01となっています。

例では0x01を表すのに@を使用しています。

他のサイトを見ると、|(パイプ)やスペースを指定しているものも見られます

OANDAの仕様書にはSOHと説明されている部分ですね。

SOHはstart of headerの略です。



FIX メッセージを分解すると

8=FIX.4.4@

9=91@

35=A@

34=1@

49=testusr4109@

52=20101124-20:27:25.000@

56=OANDA@

98=0@

108=300@

141=Y@

554=Passw0rd@

10=133@

と、12個のメッセージフィールドからできていることがわかります

スポンサーリンク


さらにメッセージフィールドの中身を詳しく見てみましょう

メッセージフィールドの中身は「=」で区切られていて

TAG=VALUE@となっています

例として、8=FIX.4.4@を分解すると

TAGは8

VALUEはFIX.4.4

@はSOH(メッセージフィールドの終わりを表します)

になります。





~おまけ~

メッセージフィールド9=91@をC#で表してみよう!!

var messageField = new byte[] { 0x39, 0x3D,0x39, 0x31, 0x01};

になります。

次回も続けてFIX メッセージの説明をしていきます
タグ:fix C# OANDA
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:マネー
FIX メッセージ ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。