今までプログラミングのすすめ 第六歩、第七歩、第十歩 で取り上げてきました FX損益総計グラフですが、今回はこのプログラムをブラッシュ・アップして、もう少し使い易いものにして行こうと思います。
【paters】グラフ表示期間を指定出来るようにする
先ずは、グラフを表示する期間を指定できるようにします。そのためには、CSVファイルの各行の日付を判定して指定された期間のデータを抽出する必要があります。
CSVファイルの内容は以下のようになっています。プロパティ H10 の日付で期間を判定します。
PS C:\sumbyday\aug> Import-Csv KessaiFinal.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10
H1 : AUD/JPY
H2 : 売
H3 : 決済
H4 : 1
H5 : 93.873
H6 : 80
H7 : 0
H8 : 80
H9 : 2022/08/08 14:35:06
H10 : 2022/08/08 14:35:06
H1 : AUD/JPY
H2 : 売
H3 : 決済
H4 : 1
H5 : 93.835
H6 : 80
H7 : 0
H8 : 80
H9 : 2022/08/08 15:05:11
H10 : 2022/08/08 15:05:11
次の様なスクリプトを書きました。
この例では、Import-Csv で 項目10番目までを読み込んで、Where-Object でH10の値が “2022/08/12″ より大きく、”2022/08/15!” より小さい行を抽出しています。項目10番目は ”2022/08/15 10:42:57″ のように日付の後はスペース” ” ですので”!”を付け加えたた値と比較すると小さくなります。
# Select date
$StartDay = "2022/08/12"
$EndDay = "2022/08/19"
Import-Csv KessaiFinal.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10 |
Where-Object { $_.H10 -gt $StartDay -and $_.H10 -lt $EndDay + "!" } |
ConvertTo-Csv
実行結果
PS C:\sumbyday\aug> ./SelectDate.PS1
#TYPE System.Management.Automation.PSCustomObject
"H1","H2","H3","H4","H5","H6","H7","H8","H9","H10"
"CAD/JPY","売","決済","1","104.061","-5,780","0","-5,780","2022/08/12 01:21:10","2022/08/12 01:21:10"
"CAD/JPY","買","決済","1","104.276","-2,250","-146","-2,396","2022/08/15 10:42:57","2022/08/15 10:42:57"
スクリプトに日付を引数で渡し判定する。
会員数は国内最大級の180万人を突破!【paters】次は、スクリプトに期間の日付を引数で渡す方法です。
PowerShell のスクリプトに引数を渡すと $Args[] という変数に入ります。
渡す引数は、次のような形での日付で期間を表すものです。
- “08/09-08/20”
- “8/9-8/20”
- “8/3-26”
- “2022/12/1-1/10”
- “12/1-1/10”
- “12/1-2023/1/10”
- “2022/10/1-2023/11/30”
これらの表記をすべて正しく処理するために、次のようなスクリプトを書きました。
$Start_YYYYMMDD,$End_YYYYMMDD = $Args[0].Split("-")
$Start_Year = ""
$End_Year = ""
$End_Day = ""
if ( (($Start_YYYYMMDD.Split("/")).Count -1) -LT 2 ) {
$Start_Mon,$Start_Day = $Start_YYYYMMDD.Split("/") }
else {
$Start_Year,$Start_Mon,$Start_Day = $Start_YYYYMMDD.Split("/") }
if ( (($End_YYYYMMDD.Split("/")).Count -1) -LT 2 ) { {
$End_Mon,$End_Day = $End_YYYYMMDD.Split("/"); }
else {
$End_Year,$End_Mon,$End_Day = $End_YYYYMMDD.Split("/") }
if ( $End_Day.length -eq 0 ) {
$End_Day = $End_Mon ; $End_Mon = $Start_Mon }
if ( $Start_Mon.length -lt 2 ) {
$Start_Mon = "0" + $Start_Mon }
if ( $Start_Day.length -lt 2 ) {
$Start_Day = "0" + $Start_Day }
if ( $End_Mon.length -lt 2 ) {
$End_Mon = "0" + $End_Mon }
if ( $End_Day.length -lt 2 ) {
$End_Day = "0" + $End_Day }
if ($End_Year -eq "" ) { # 終了年 未指定
if ($Start_Year -ne "" ) { # 開始年は指定されている
if ($End_Mon -LT $Start_Mon) { # 終了月 < 開始月 年を跨ぐ
$End_Year = [Int]$Start_Year + 1 # 終了年を開始年 + 1 に
}
else { $End_Year = $Start_Year # 年を跨がない 終了年 = 開始年
}
}
else { $End_Year = Get-Date -Format "yyyy" # 開始年も終了年も指定なし 終了年を現在の年に
if ($End_Mon -LT $Start_Mon) { $Start_Year = [Int]$End_Year - 1 # 年を跨いでいる 開始年 = 終了年 - 1
}
else { $Start_Year = $End_Year # 年を跨がない 開始年 = 終了年
}
}
}
else { # 終了年 指定
if ($Start_Year.length -eq 0 ) { # 開始年 未指定
if ($End_Mon -LT $Start_Mon) { $Start_Year = [Int]$End_Year - 1 # 年を跨いでいる 開始年 = 終了年 - 1
}
else { $Start_Year = $End_Year # 年を跨がない 開始年 = 終了年
}
}
}
If ($Start_Year.Length -LT 3 ) { $Start_Year = "20" + $Start_Year }
If ($End_Year.Length -LT 3 ) { $End_Year = "20" + $End_Year }
Write-Output $("開始日 " + $Start_Year + "/" + $Start_Mon + "/" + $Start_day)
Write-Output $("終了日 " + $End_Year + "/" + $End_Mon + "/" + $End_Day)
$Start_YYYYMMDD,$End_YYYYMMDD = $Args[0].Split(“-“)
引数を”-” で区切って、開始月日と終了月日に分けます。
if ( (($Start_YYYYMMDD.Split(“/”)).Count -1) -LT 2 ) {
$Start_Mon,$Start_Day = $Start_YYYYMMDD.Split(“/”)
}
else {
$Start_Year,$Start_Mon,$Start_Day = $Start_YYYYMMDD.Split(“/”)
}
開始月日の中に ”/” が2個未満なら 年は指定されてないと判断して開始月日を”/”で区切って開始月と日に分けます。年が指定されていると判断した場合は、年、月、日 に分けます。終了月日も同じように処理します。
if ( $End_Day.length -eq 0 ) {
$End_Day = $End_Mon ; $End_Mon = $Start_Mon
}
終了月日の日にちの長さが0の場合、渡された引数が “8/3-26” のように終了月日の月の値が指定されていないので、文字列に “/”が一つしかなく、$End_Day には何も代入されません。その場合、$End_Mon に入っている ”26” の値が終了月日の日にちの値なので $End_Mon を $End_Day に代入し、終了月日の月は、開始月日の月と同じなので、$Start_Mon を $End_Mon に代入します。
if ( $Start_Mon.length -lt 2 ) {
$Start_Mon = “0” + $Start_Mon
}
値が一桁の場合は、頭に”0″を付けます。
if ($Start_Year -eq “” ) { $Start_Year = Get-Date -Format “yyyy” }
開始年が指定されていない場合は、現在の年を取得して代入します。
if ($End_Year -eq “” ) {
if ($Start_Mon -GT $End_Mon) { $End_Year = [Int]$Start_Year + 1 }
else
{ $End_Year = $Start_Year }
}
終了年が指定されていないときは、開始月>終了月の場合は年を跨ぐと判断し、開始年+1して終了年に代入します。そうでない場合は、終了年=開始年 とします。
if ($Start_Year.length -eq 0 ) { # 開始年 未指定
if ($End_Mon -LT $Start_Mon) { $Start_Year = [Int]$End_Year - 1 # 年を跨いでいる 開始年 = 終了年 - 1
}
else { $Start_Year = $End_Year # 年を跨がない 開始年 = 終了年
}
}
終了年が指定されていて、開始年が指定されていない場合です。年を跨いでいる場合は、開始年を終了年-1 にします。年を跨がない場合は、開始年 = 終了年 とします。
実行結果です。
PS C:\sumbyday\aug> ./testday.PS1 08/09-08/20
開始日 2022/08/09
終了日 2022/08/20
PS C:\sumbyday\aug> ./testday.PS1 8/9-8/20
開始日 2022/08/09
終了日 2022/08/20
PS C:\sumbyday\aug> ./testday.PS1 8/3-26
開始日 2022/08/03
終了日 2022/08/26
PS C:\sumbyday\aug> ./testday.PS1 2022/10/1-2023/11/30
開始日 2022/10/01
終了日 2023/11/30
PS C:\sumbyday\aug> ./testday.PS1 12/1-2023/1/10
開始日 2022/12/01
終了日 2023/01/10
PS C:\sumbyday\aug> ./testday.PS1 2022/12/1-1/10
開始日 2022/12/01
終了日 2023/01/10
これらをこちらで作成した FX_Trade_Chart.PS1 に組み込みます。
# Make Bar Chart Data
cat TradeRecordList*.csv | sls "決済" | sls JPY | Out-File OnlyKessai.csv
Import-Csv OnlyKessai.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10 | Sort-Object H10 | Export-Csv OnlyKessaiS.csv -Encoding UTF8
# ------ Prep $StartDay / $EndDay --------------------------------------------------------------------------------------------
$Start_YYYYMMDD,$End_YYYYMMDD = $Args[0].Split("-")
$Start_Year = ""
$End_Year = ""
$End_Day = ""
if ( (($Start_YYYYMMDD.Split("/")).Count -1) -LT 2 ) {
$Start_Mon,$Start_Day = $Start_YYYYMMDD.Split("/") }
else {
$Start_Year,$Start_Mon,$Start_Day = $Start_YYYYMMDD.Split("/") }
if ( (($End_YYYYMMDD.Split("/")).Count -1) -LT 2 ) { {
$End_Mon,$End_Day = $End_YYYYMMDD.Split("/"); }
else {
$End_Year,$End_Mon,$End_Day = $End_YYYYMMDD.Split("/") }
if ( $End_Day.length -eq 0 ) {
$End_Day = $End_Mon ; $End_Mon = $Start_Mon }
if ( $Start_Mon.length -lt 2 ) {
$Start_Mon = "0" + $Start_Mon }
if ( $Start_Day.length -lt 2 ) {
$Start_Day = "0" + $Start_Day }
if ( $End_Mon.length -lt 2 ) {
$End_Mon = "0" + $End_Mon }
if ( $End_Day.length -lt 2 ) {
$End_Day = "0" + $End_Day }
if ($End_Year -eq "" ) { # 終了年 未指定
if ($Start_Year -ne "" ) { # 開始年は指定されている
if ($End_Mon -LT $Start_Mon) { # 終了月 < 開始月 年を跨ぐ
$End_Year = [Int]$Start_Year + 1 # 終了年を開始年 + 1 に
}
else { $End_Year = $Start_Year # 年を跨がない 終了年 = 開始年
}
}
else { $End_Year = Get-Date -Format "yyyy" # 開始年も終了年も指定なし 終了年を現在の年に
if ($End_Mon -LT $Start_Mon) { $Start_Year = [Int]$End_Year - 1 # 年を跨いでいる 開始年 = 終了年 - 1
}
else { $Start_Year = $End_Year # 年を跨がない 開始年 = 終了年
}
}
}
else { # 終了年 指定
if ($Start_Year.length -eq 0 ) { # 開始年 未指定
if ($End_Mon -LT $Start_Mon) { $Start_Year = [Int]$End_Year - 1 # 年を跨いでいる 開始年 = 終了年 - 1
}
else { $Start_Year = $End_Year # 年を跨がない 開始年 = 終了年
}
}
}
If ($Start_Year.Length -LT 3 ) { $Start_Year = "20" + $Start_Year }
If ($End_Year.Length -LT 3 ) { $End_Year = "20" + $End_Year }
Write-Output $("開始日 " + $Start_Year + "/" + $Start_Mon + "/" + $Start_day)
Write-Output $("終了日 " + $End_Year + "/" + $End_Mon + "/" + $End_Day)
$StartDay = $Start_Year + "/" + $Start_Mon + "/" + $Start_day
$EndDay = $End_Year + "/" + $End_Mon + "/" + $End_Day
# -------------------------------------------------------------------------------------------------------------------------------
Import-Csv OnlyKessaiS.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10 | Where-Object { $_.H10 -gt $StartDay -and $_.H10 -lt $EndDay + "!" } | Export-Csv OnlyKessaiSS.csv -Encoding UTF8
cat OnlyKessaiSS.csv | gu | oss | sls JPY | out-file KessaiFinal.csv
Import-Csv KessaiFinal.csv -Header H1,H2,H3,H4,H5,H6 | Select-Object H6 | oss | sls "H6","--" -NotMatch | out-file SonEki.txt
$BarData = ""
cat SonEki.txt | % { $_.Replace(",","")} | ? { $_ -Match "[0-9]{2}" -Or $_ -Match "0" } | % { $BarData = $BarData + $_ + "," }
$BarData | Out-File BarChartData.txt
# Make Line Chart Data
function sumline {
Begin {
$LCD = 0
}
Process { % { $LCD = $LCD + [INT]$_ } { Write-OutPut $LCD
}
}
}
Cat SonEki.txt | ? { $_ -Match "[0-9]{2}" -Or $_ -Match "0" } | Sumline | Out-file KasanGaku.txt
$LineChartD = ""
Cat KasanGaku.txt | % { $LineChartD = $LineChartD + $_ + "," }
$lineChartD | Out-File LineChartData.txt
# Make Label Data
Import-Csv KessaiFinal.csv -header h1,h2,h3,h4,h5,h6,h7,h8,h9,h10 | Select-Object h10 | oss | ? {$_ -Match "[0-9]{4}"} | Out-File YakuteiDate.txt
cat YakuteiDate.txt | % { $_.Substring(5,5) } | % { $Label = $Label + "'" + $_ + "'" + "," }
$Label | Out-File LabelData.txt
# Make Mixed Chart HTML
$FileName = ".\MixedChartOfTrade.HTML"
if (Test-Path $FileName ) {
Remove-Item $FileName
}
Write-OutPut '<!doctype html>' | Add-Content $FileName
Write-OutPut '<html>' | Add-Content $FileName
Write-OutPut ' <head>' | Add-Content $FileName
Write-OutPut ' <title>Chart Sample</title>' | Add-Content $FileName
Write-OutPut ' <link rel="stylesheet" href="Chart.css">' | Add-Content $FileName
Write-OutPut ' <script src="\Windows\System32\node_modules\chart.js\dist\Chart.js"></script>' | Add-Content $FileName
Write-OutPut ' </head>' | Add-Content $FileName
Write-OutPut ' <body> ' | Add-Content $FileName
Write-OutPut ' <div id="wrapper">' | Add-Content $FileName
Write-OutPut ' <canvas id="myChart" width="" height=""></canvas>' | Add-Content $FileName
Write-OutPut ' </div>' | Add-Content $FileName
Write-OutPut '<script>' | Add-Content $FileName
Write-OutPut 'var canvas = document.getElementById(''myChart'');' | Add-Content $FileName
Write-OutPut ' canvas.width = wrapper.offsetWidth;' | Add-Content $FileName
Write-OutPut ' canvas.height = wrapper.offsetHeight;' | Add-Content $FileName
Write-OutPut 'const ctx = document.getElementById(''myChart'').getContext(''2d'');' | Add-Content $FileName
Write-OutPut 'const myChart = new Chart(ctx, {' | Add-Content $FileName
Write-OutPut ' data: {' | Add-Content $FileName
Write-OutPut ' //xxxLABEL ' | Add-Content $FileName
Write-OutPut ' labels: [ ' | Add-Content $FileName
cat LabelData.txt | Add-Content $FileName
Write-OutPut '],' | Add-Content $FileName
Write-OutPut ' datasets: [{' | Add-Content $FileName
Write-OutPut ' type: ''line'',' | Add-Content $FileName
Write-OutPut ' label: ''損益合計'',' | Add-Content $FileName
Write-OutPut ' //xxxLine Data ' | Add-Content $FileName
Write-OutPut ' data: [ ' | Add-Content $FileName
cat LineChartData.txt | Add-Content $FileName
Write-OutPut '], ' | Add-Content $FileName
Write-OutPut ' borderColor: [ ' | Add-Content $FileName
Write-OutPut ' ''rgba(255, 206, 86, 1)'']' | Add-Content $FileName
Write-OutPut ' },{ ' | Add-Content $FileName
Write-OutPut ' type: ''bar'',' | Add-Content $FileName
Write-OutPut ' label: ''損益/日'',' | Add-Content $FileName
Write-OutPut ' //xxxBar Data' | Add-Content $FileName
Write-OutPut ' data: [ ' | Add-Content $FileName
cat BarChartData.txt | Add-Content $FileName
Write-OutPut '],' | Add-Content $FileName
Write-OutPut ' backgroundColor: [' | Add-Content $FileName
Write-OutPut ' ''rgba(200, 99, 132, 1)''] }]' | Add-Content $FileName
Write-OutPut ' }, ' | Add-Content $FileName
Write-OutPut ' options: {' | Add-Content $FileName
Write-OutPut ' scales: {' | Add-Content $FileName
Write-OutPut ' y: { ' | Add-Content $FileName
Write-OutPut ' beginAtZero: true' | Add-Content $FileName
Write-OutPut ' }' | Add-Content $FileName
Write-OutPut ' }' | Add-Content $FileName
Write-OutPut ' }' | Add-Content $FileName
Write-OutPut '});' | Add-Content $FileName
Write-OutPut '</script>' | Add-Content $FileName
Write-OutPut '</body>' | Add-Content $FileName
Write-OutPut '</html>' | Add-Content $FileName
# Write Out Chart.css
if (Test-Path '.\Chart.css' ) {
Remove-Item '.\Chart.css'
}
Write-OutPut '#canvas{' | Add-Content .\Chart.css
Write-OutPut ' display: block;' | Add-Content .\Chart.css
Write-OutPut '}' | Add-Content .\Chart.css
Write-OutPut 'html, body, #wrapper{' | Add-Content .\Chart.css
Write-OutPut ' width: 95%;' | Add-Content .\Chart.css
Write-OutPut ' height: 95%;' | Add-Content .\Chart.css
Write-OutPut '}' | Add-Content .\Chart.css
# Display HTML file
$FileName | Out-File .\DispChart.ps1
.\DispChart.ps1
# Clean-Up Files
if (Test-Path '.\BarChartData.txt' ) {
Remove-Item '.\BarChartData.txt'
}
if (Test-Path '.\DispChart.ps1' ) {
Remove-Item '.\DispChart.ps1'
}
if (Test-Path '.\KasanGaku.txt' ) {
Remove-Item '.\KasanGaku.txt'
}
if (Test-Path '.\KessaiFinal.csv' ) {
# Remove-Item '.\KessaiFinal.csv'
}
if (Test-Path '.\LabelData.txt' ) {
Remove-Item '.\LabelData.txt'
}
if (Test-Path '.\LineChartData.txt' ) {
Remove-Item '.\LineChartData.txt'
}
if (Test-Path '.\OnlyKessai.csv' ) {
Remove-Item '.\OnlyKessai.csv'
}
if (Test-Path '.\OnlyKessaiS.csv' ) {
Remove-Item '.\OnlyKessaiS.csv'
}
if (Test-Path '.\SonEki.txt' ) {
Remove-Item '.\SonEki.txt'
}
if (Test-Path '.\YakuteiDate.txt' ) {
Remove-Item '.\YakuteiDate.txt'
}
期間指定で実行してみます。
PS C:\sumbyday\All_Data> ./FX_Trade_Chart.ps1 11/01-11/24
開始日 2022/11/01
終了日 2022/11/24
PS C:\sumbyday\All_Data> ./FX_Trade_Chart.ps1 09/15-10/15
開始日 2022/09/15
終了日 2022/10/15
すべてのデータを一か所に重複も気にせずにダウンロードして、期間指定でグラフを表示出来るようになりました。
期間指定が引数で指定されないケースを考慮
引数が渡されなかったケースも考慮しないといけません。
日付け判定のルーティンを If文で囲み、$Args[0] の長さが5桁以下の場合は、 $StartDay は、Null に $EndDay は、”All Period” にします。
# ------ Prepair $StartDay / $EndDay --------------------------------------------------------------------------------------------
If ($Args[0].length -gt 5) {
$Start_YYYYMMDD,$End_YYYYMMDD = $Args[0].Split("-")
$Start_Year = ""
:
:
:
$StartDay = $Start_Year + "/" + $Start_Mon + "/" + $Start_day
$EndDay = $End_Year + "/" + $End_Mon + "/" + $End_Day
}
else {
$StartDay = ""
$EndDay ="50"
}
HTMLをWebページ等からリンクして実行できるようにCDNのChart.jsを参照するように変更する。
老舗サイトのラブサーチ[18歳以上]今まで Chart.js は PCにパッケージをダウンロードして参照していましたが、WebページでHTMLを表示出来るように CDN の Chart.jsを参照するように変更します。
<script src="\Windows\System32\node_modules\chart.js\dist\Chart.js"></script>
|
V
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.0.1/dist/chart.umd.min.js"></script>
最新の CDN Chart.js の リンクはこちらにあります。
同じく、CSSを外部ファイルでリンクしていましたが、HTMLの <Head> の下に記述してリンクは外します。
# Write-OutPut ' <link rel="stylesheet" href="Chart.css">' | Add-Content $FileName
Write-OutPut ' <meta http-equiv="Content-Style-Type" content="text/css"> ' | Add-Content $FileName
Write-OutPut ' <style type="text/css"> ' | Add-Content $FileName
Write-OutPut ' #canvas{ ' | Add-Content $FileName
Write-OutPut ' display: block; ' | Add-Content $FileName
Write-OutPut ' } ' | Add-Content $FileName
Write-OutPut ' html, body, #wrapper{ ' | Add-Content $FileName
Write-OutPut ' width: 95%; ' | Add-Content $FileName
Write-OutPut ' height: 95%; ' | Add-Content $FileName
Write-OutPut ' } ' | Add-Content $FileName
Write-OutPut ' </style>' | Add-Content $FileName
変更後に実行しサーバーにアップした グラフ 11/01-26 です。
他のFX会社の約定履歴でも使えるように変更する
運用実績20年以上の信頼!安心のポイントサイト《ワラウ》今までDMM.FX の約定履歴で作ってきました。他のFX会社の約定履歴でも使えるように変更します。
外為どっとコム バーチャルFX の約定履歴がありましたので、先ずはこちらで使えるように変更を加えて行きます。
外為どっとコムの約定履歴 CSV出力データ
分かり易いように先頭の数行をスペースを入れて編集しています。Hx は追記しています。決済約定日時は、H1です。 損益金額はH20です。
期間,from,to,通貨ペア,約定区分,売買区分,
期間指定,22/11/01 00:00:00,22/11/26 23:59:59,全通貨,新規・決済,全売買,
決済約定日時,注文番号,ポジション番号,通貨ペア,両建区分,注文方式,約定区分,執行条件,指定レート,売買,Lot数,新規約定日時,新規約定値,決済約定値,pip損益,円換算レート,スポット損益,手数料,スワップ損益,取引損益,チャネル,
H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21
両建 注文 約定 執行 売 Lot
決済約定日時 , 注文番号 , ポジション番号, ペア ,区分,方式,区分,条件,指定レート,買,数 , 新規約定日時 , 新規約定値,決済約定値,pip損益,円換算レート,スポット損益,手数料,スワップ損益,取引損益,チャネル,
,2211472400032623,2211479300003903,AUD/JPY,なし,通常,新規,成行, ,売,1000,22/11/25 22:19:22, 93.823 , , , , , 0 , , ,GFX(iPhone),
22/11/25 22:19:05,2211472400032622,2211479300003892,AUD/JPY,なし,通常,決済,成行, ,買,10 ,22/11/25 22:18:52, 93.833 , 93.845 ,-12.000, 1.0000 , -120 , 0 , 0 , -120 ,GFX(iPhone),
,2211472400032621,2211479300003892,AUD/JPY,なし,通常,新規,成行, ,売,10 ,22/11/25 22:18:52, 93.833 , , , , , 0 , , ,GFX(iPhone),
22/11/25 22:18:35,2211472400032620,2211477700003730,AUD/JPY,なし,通常,決済,成行, ,売,1000,22/11/24 19:27:36, 93.170 , 93.835 ,665.000, 1.0000 , 665000 , 0 , 6400 , 671400,GFX(iPhone),
2211462600036261,2211477700003730,AUD/JPY,なし,通常,新規,指値, 93.170 ,買,1000,22/11/24 19:27:36, 93.170 , , , , , 0 , , ,GFX(iPhone),
22/11/17 22:01:20,2211462600035580,2211458700007258,AUD/JPY,なし,通常,決済,成行,,売,1000,22/11/10 23:51:03,93.129,93.277,148.000,1.0000,148000,0,46600,194600,GFX(iPhone),
,2211453300024928,2211458700007258,AUD/JPY,なし,通常,新規,成行,,買,1000,22/11/10 23:51:03,93.129,,,,,0,,,GFX(iPhone),
外為どっとコムの約定履歴データは、 GaitameTradex.csv で保管することとします。
決済履歴だけを抜き出す作業は、CSV ファイルのファイル名が GaitameTrade* に変わるだけです。
損益金額は、H20なので Import-Csvでは H20まで読み込むように変更し、H1 の約定日時で ソートします。
cat GaitameTrade*.csv | sls "決済" | sls JPY | Out-File OnlyKessai.csv
Import-Csv OnlyKessai.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20 | Sort-Object H1 | Export-Csv OnlyKessaiS.csv -Encoding UTF8
期間の抽出で問題が、外為ドットコムの決済約定日時の表記が下記のように 22/11/08 と 20 が省略されています。
"22/11/08 22:34:32","2211453300008461","2211455400000016","AUD/JPY","なし","通常","決済","指値","94.729","買","1000","22/11/08 07:55:38","94.929","94.729","200.000","1.0000","200000","0","0","200000"
"22/11/09 00:11:11","2211453500011159","2211455400002969","AUD/JPY","なし","通常","決済","指値","94.800","売","1000","22/11/08 22:37:35","94.756","94.800","44.000","1.0000","44000","0","0","44000"
"22/11/09 00:11:11","2211453500011166","2211455400002967","AUD/JPY","なし","通常","決済","指値","94.800","売","10","22/11/08 22:35:36","94.729","94.800","71.000","1.0000","710","0","0","710"
決済約定日時で抽出する前に、開始月日、終了月日を次のように頭の20を取り除きます。
$StartDay = $StartDay.Substring(2)
$EndDay = $EndDay.Substring(2)
期間の抽出は、決済約定日時がなので、H1を参照するように変更します。
Import-Csv OnlyKessaiS.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20 | Where-Object { $_.H1 -gt $StartDay -and $_.H1 -lt $EndDay + "!" } | Export-Csv OnlyKessaiSS.csv -Encoding UTF8
H20の損益金額だけを書き出します。
Import-Csv KessaiFinal.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20 | Select-Object H20 | oss | sls "H20","--" -NotMatch | out-file SonEki.txt
グラフのラベルは、H1の約定日時を抜き出します。4桁以上の数字の連続を日付と判断していたのを2桁以上に変更しました。
2022/11/01 だったので $_.Substring(5,5) を 22/11/01 になったので $_.Substring(3,5) に変更しています。
Import-Csv KessaiFinal.csv -header h1,h2,h3,h4,h5,h6,h7,h8,h9,h10 | Select-Object h1 | oss | ? {$_ -Match "[0-9]{2}"} | Out-File YakuteiDate.txt
cat YakuteiDate.txt | % { $_.Substring(3,5) } | % { $Label = $Label + "'" + $_ + "'" + "," }
以上の変更で、外為どっとコムの約定履歴からグラフが作成可能となりました。
PS >./FX_Trade_Chart_For_Gaitame.ps1 11/01-26
開始日 2022/11/01
終了日 2022/11/26
PS >
スイッチを設定
DMM.FX と 外為どっとコム の約定履歴を取り扱えるように 引数で スイッチを渡すようにします。 引数で -G を渡すと 外為どっとコム 引数なしは、ディフォルトで DMM.FX とします。
引数 “-G” があるとないとで CSV ファイルの名前、決済約定日時のヘッダー値、損益金額のヘッダー値、決済約定日時の中の月の始まり桁を、それぞれ変数に設定します。
# Parameter "-G" means Gaitame Dot Com otherwise DMM.FX
if ($Args[0] -eq "-G" -OR $Args[1] -eq "-G" ) {
$CSVFiles = "GaitameTrade*.csv"
$KessaiDate = "H1"
$SonEkiGaku = "H20" # 0123....
$MonSta = 3 # Start of Month data in KessaiDate of GaitameDotCom "22/01/01"
}
else {
$CSVFiles = "TradeRecordList*.csv"
$KessaiDate = "H10"
$SonEkiGaku = "H8" # 012345....
$MonSta = 5 #Start of Month data in KessaiDate of DMM.FX "2022/01/01"
}
Get-Content で取得するファイル名を変数 $CSVFiles で与えます。
決済約定日時でソートする際のヘッダー値を変数 $KessaiDate で与えます。
cat $CSVFiles | sls "決済" | sls JPY | Out-File OnlyKessai.csv -width 250
Import-Csv OnlyKessai.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20 | Sort-Object $KessaiDate | Export-Csv OnlyKessaiS.csv -Encoding UTF8
期間で抽出する際の開始月日と終了月日との比較対象のヘッダー値を 変数 $KessaiDate で与えます。
Import-Csv OnlyKessaiS.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20 | Where-Object { $_.$KessaiDate -gt $StartDay -and $_.$KessaiDate -lt $EndDay + "!" } | Export-Csv OnlyKessaiSS.csv -Encoding UTF8
損益金額を書き出す際の対象ヘッダーを 変数 $SonEkiGaku で与えます。
Import-Csv KessaiFinal.csv -Header H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,H14,H15,H16,H17,H18,H19,H20 | Select-Object $SonEkiGaku | oss | sls "$($SonEkiGaku)","--" -NotMatch | out-file SonEki.txt -width 250
グラフのラベルを書き出す際の対象ヘッダーを 変数 $KessaiDate で与えます。DMM.FX の約定日時は 2022/xx/xx と 2022 で始まっていたので 対象の行かどうかを ? {$_ -Match “[0-9]{4}”} と数字の連続が4桁以上かどうかを見ていましたが、 ? {$_ -Match “[0-9]{2}”} 2桁以上かどうかで判断するように変更しています。
決済約定月日の中から月日を書き出す際、何桁目から書き出すかを 変数 $MonSta で与えています。
Import-Csv KessaiFinal.csv -header h1,h2,h3,h4,h5,h6,h7,h8,h9,h10 | Select-Object $KessaiDate | oss | ? {$_ -Match "[0-9]{2}"} | Out-File YakuteiDate.txt -width 250
cat YakuteiDate.txt | % { $_.Substring($MonSta,5) } | % { $Label = $Label + "'" + $_ + "'" + "," }
コメント