FC2ブログ
現役プログラマー村健の、投資に役立つプログラムを作るための勉強ブログです。 自動売買、システムトレードに挑戦!します。 勉強と習得の成果を記録です。
本ブログについて
本ブログは、プログラマー観点で投資への対費用効果を上げるために何ができるか?を考えていくブログです。
基本的には、ツール作成・公開、投資に関わるプログラム情報、最終的には 完全なる自動売買を目指しています。

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
ゴールデンクロスを検出するプログラムを作りました。
ついでにデータの保持に可用性持たせるため、構造体ではなくListを使うように変更しました。

メイン処理の抜粋

'データの読み込み
Dim chartData As SortedDictionary(Of Date, Dictionary(Of String, Object)) = DataLoad()
If chartData Is Nothing Then
MsgBox("データ読み込みエラー")
Return
End If

'補助データの作成
'移動平均
_SetMovingAverage(chartData, 3) '3日平均
_SetMovingAverage(chartData, 25) '25日平均
_SetMovingAverage(chartData, 75) '75日平均
'ゴールデンクロス



'データ読み込み
Private Function DataLoad() As SortedDictionary(Of Date, Dictionary(Of String, Object))

'ダイアログを表示してファイルパスを取得
Dim filePath As String
Dim dialog As New OpenFileDialog
Dim result As DialogResult = dialog.ShowDialog()
If result = System.Windows.Forms.DialogResult.OK Then
filePath = dialog.FileName
Else
Return Nothing
End If

'ファイルを開いてCSVデータを取得する
Dim data As New SortedDictionary(Of Date, Dictionary(Of String, Object))
Using parser = New FileIO.TextFieldParser(filePath, System.Text.Encoding.GetEncoding("Shift-JIS"))
parser.Delimiters = New String() {","}
While Not parser.EndOfData
Dim lineData As New Dictionary(Of String, Object)
Dim fields() = parser.ReadFields()
With lineData
.Add(_DATANAME_OPEN_RATE, CDbl(fields(1)))
.Add(_DATANAME_HIGH_PRICE, CDbl(fields(2)))
.Add(_DATANAME_LOW_PRICE, CDbl(fields(3)))
.Add(_DATANAME_CLOSE_RATE, CDbl(fields(4)))
End With
data.Add(CDate(fields(0)), lineData)
End While
End Using

Return data

End Function



'移動平均線算出
Private Sub _SetMovingAverage(dailyData As SortedDictionary(Of Date, Dictionary(Of String, Object)), day As Integer)

Dim que = New Queue(Of Double)() '算出した平均値を一時的に格納
Dim dataColName As String = String.Format(_DATANAME_MOVING_AVERAGE, day)
For Each tmpDailyKey In dailyData.Keys

que.Enqueue((dailyData(tmpDailyKey))(_DATANAME_CLOSE_RATE))

'平均値算出日数に達していない場合
If que.Count < day Then
dailyData(tmpDailyKey).Add(dataColName, 0) 'この日のデータは0値として格納
Continue For
End If

dailyData(tmpDailyKey).Add(dataColName, que.Average)
que.Dequeue()
Next

End Sub



'ゴールデンクロス
'0:何もなし、1:ゴールデンクロス、-1:デッドクロス
Private Sub _SetGoldenCloss(dailyData As SortedDictionary(Of Date, Dictionary(Of String, Object)), minDay As Integer, bigDay As Integer)

'大小の関係がおかしければ
If minDay >= bigDay Then
Throw New Exception()
End If

Dim dataColName As String = String.Format(_DATANAME_GOLDENCROSS, minDay, bigDay)
Dim beforeMinDayPrice As Double = 0
Dim afterMinDayPrice As Double = 0
Dim beforeBigDayPrice As Double = 0
Dim afterBigDayPrice As Double = 0

For Each tmpDailyKey In dailyData.Keys

beforeMinDayPrice = afterMinDayPrice
beforeBigDayPrice = afterBigDayPrice

afterMinDayPrice = (dailyData(tmpDailyKey))(String.Format(_DATANAME_MOVING_AVERAGE, minDay))
afterBigDayPrice = (dailyData(tmpDailyKey))(String.Format(_DATANAME_MOVING_AVERAGE, bigDay))

'0値は無効としてスルー
If beforeMinDayPrice = 0 OrElse afterMinDayPrice = 0 OrElse beforeBigDayPrice = 0 OrElse afterBigDayPrice = 0 Then
dailyData(tmpDailyKey).Add(dataColName, 0)
Continue For
End If

'ゴールデンクロス
'デッドクロス
If afterMinDayPrice >= afterBigDayPrice AndAlso beforeMinDayPrice < beforeBigDayPrice Then
dailyData(tmpDailyKey).Add(dataColName, 1)
ElseIf afterMinDayPrice <= afterBigDayPrice AndAlso beforeMinDayPrice > beforeBigDayPrice Then
dailyData(tmpDailyKey).Add(dataColName, -1)
Else
dailyData(tmpDailyKey).Add(dataColName, 0)
End If

Next

End Sub

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
スポンサーサイト



移動平均線用に計算します。

データ格納用の構造体です。

'移動平均線データ
Public Structure MovingAverageData

Dim day As Date '日付
Dim rate As Double '平均値

End Structure


算出するのは以下のロジックです。
前回作成した日足データを渡します。
日数毎で平均値を求めます。

'移動平均線算出
Private Function getMovingAverage(dailyData As List(Of DailyChartData), day As Integer) As Dictionary(Of Date, Double)

Dim averageData As New Dictionary(Of Date, Double) '日ごとの平均値を格納
Dim que = New Queue(Of Double)() '算出した平均値を一時的に格納
Dim averageDateData(day - 1) As Double '平均値の計算用

For Each tmpDailyData In dailyData

que.Enqueue(tmpDailyData.closeRate)

'平均値算出日数に達していない場合
If que.Count < day Then
averageData.Add(tmpDailyData.day, 0) 'この日のデータは0値として格納
Continue For
End If

averageData.Add(tmpDailyData.day, que.Average)
que.Dequeue()
Next

Return averageData

End Function


以下でそれぞれの平均値を作成します。

'補助データの作成
Dim averageData_3 As Dictionary(Of Date, Double) = getMovingAverage(chartData, 3) '3日平均
Dim averageData_25 As Dictionary(Of Date, Double) = getMovingAverage(chartData, 25) '25日平均
Dim averageData_75 As Dictionary(Of Date, Double) = getMovingAverage(chartData, 27) '75日平均


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
日足データを使ったバックテスト用ツールを作成します。

https://www.m2j.co.jp/market/historical.php
から、USD/JPYの日足データのCSVをダウンロードします。

1行目はデータに関係ないので、テキストエディタで消します。

ダイアログでファイルを選択し、CSVファイルから読み込んで内部変数に取得するプログラムです。

データを格納する構造体は以下になります。

'日足データ
Public Structure DailyChartData

Dim day As Date '日付
Dim openRate As Double '始値
Dim highPrice As Double '高値
Dim lowPrice As Double '安値
Dim closeRate As Double '終値

End Structure


データを取得するメソッドは以下になります。

Private Function DataLoad() As List(Of DailyChartData)

'ダイアログを表示してファイルパスを取得
Dim filePath As String
Dim dialog As New OpenFileDialog
Dim result As DialogResult = dialog.ShowDialog()
If result = System.Windows.Forms.DialogResult.OK Then
filePath = dialog.FileName
Else
Return Nothing
End If

'ファイルを開いてCSVデータを取得する
Dim data As New List(Of DailyChartData)
Using parser = New FileIO.TextFieldParser(filePath, System.Text.Encoding.GetEncoding("Shift-JIS"))
parser.Delimiters = New String() {","}
While Not parser.EndOfData
Dim lineData As New DailyChartData
Dim fields() = parser.ReadFields()
With lineData
.day = CDate(fields(0))
.openRate = CDbl(fields(1))
.highPrice = CDbl(fields(2))
.lowPrice = CDbl(fields(3))
.closeRate = CDbl(fields(4))
End With
data.Add(lineData)
End While
End Using

Return data

End Function


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
FX関係のツールを作ろうと思い、日足の過去データが取得できるサイトを探してみました。

https://www.tfx.co.jp/historical/fx/
https://www.m2j.co.jp/market/historical.php

ここでCSV形式でダウンロードできました。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
最近はプログラムによるトレードは行っていませんが、積立投資、確定拠出年金で、年末のトランプ相場のおかげもあり、順調に資産は増えています。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
プログラムからのIE操作で、スレッドにより複数タブの制御を行っているのですが、「objIE.Document.ParentWindow」へのアクセス部分でキャストの例外(InvalidCastException)が発生しました。
調べてみると、スレッドでSTAではなくMTAでアクセスした場合に、本現象が発生するようです。
現状の実装がBackgroundWorkerを使っているため、MTAとなっていました。
以下コードで検証し、MTAだとダメでSTAだとOKになるのを確認できました。

テストコードはこちら

http://social.msdn.microsoft.com/Forums/ja-JP/ac4ae328-a700-4404-8c8f-e72fb22753ce/exception-occurs-when-ihtmlwindow2-window-thedocparentwindow?forum=ieextensiondevelopment
http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/6d122f94-7533-4daa-98de-b31fe4f5794f/backgroundworkerrpcecallrejected?forum=csharpgeneralja

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
年末年始に実家に戻りました。
母が投資信託を買ったというので見てみると、豪ドル債券ファンド(毎月決算型)を買っていました。
大手銀行で進められたとのことで、500万円分を購入しているのですが、
・購入手数料が約13万円(2.625%)
・毎年の管理費用が6万(1.3125%)
です。
毎月決算型なので、毎月約3万円ずつ振込はありますが、その分元本が激減りしています。
計算すると、10ヶ月位で約40万のマイナスになっていました。

他にも色々調べてみると、
使いもしないゴールドのクレジットカード(年会費1万円)を契約させられていたり、満期日繰り上げ特約の預金をしていたり、、、と、銀行の言いなりになっていました。

無知な老人から手数料などをふんだくる銀行はムカつきますが、理解できないまま契約してしまう方も問題ありです。
解約できるものは解約して、リスクが少なく手数料が低いものに買い直してもらいます。
あーもったいない。

何を買ってはダメとか、どんなものを買えばよいのかは、下記本がお勧めです。


ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
Webの自動操作ツール「Webree」のバージョン1.4.0をリリースしました。
・ジャンプ機能を追加
・メニュー等の表示を変更

Webree

このバージョンより、「待機」「コメント」のデータフォマットが変わっているので、
これらを使用した前バージョンまでに作成した設定ファイルを読み込むと、エラーになります。

これらデータを含んだ設定ファイルを引き続き使用したい場合、設定ファイルをテキストエディタで開いて、
のタグを消去して、新しいバージョンで開いてください。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
Webの自動操作ツール「Webree」のバージョン1.3.0をリリースしました。
・BASIC認証のあるサイトの表示機能を追加
・メニュー等の表示を変更

ご意見いただければ反映していきたいと思います。

そういえば、「iP! 2013年12月号」の「フリーウエアライブラリ」に掲載されました。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
Webの自動操作ツール「Webree」のバージョン1.2.0をリリースしました。
・設定ファイルから、VB.NET用のプログラムコードを出力する機能を追加
・進む・戻るの履歴操作の機能を追加
・バグ修正

まだ作りたてで、使い方の説明がまとまっておらず、バグや使いにくい箇所などあります。
ご意見いただければ反映していきたいと思います。
Webree

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング