今回は為替分析を行うにあたって、必要なデータを収集、加工する方法を紹介していきます。
為替レートの価格データはPythonでも簡単に取得できますが、スワップデータについては長期のデータをなかなか取得する方法がないので、
今回はくりっく365から取得することにしました。
できればPythonでURLからCSVファイルを自動でダウンロードしたいところですが、Javascriptで操作が必要なので、Pythonの場合Seleniumを使う必要があります。
Seleniumでブラウザ操作を行ってもよいのですが、MicrosoftのPower Automateを使うともっと簡単にデータを取得できそうなので、今回はそちらを使います。
Power Automateのインストール
Windows10以上の環境でインストール可能です。
アップストアで「Power Automate」と検索するかこちらからインストールします。
新しいワークフローの追加
今回の取得データはチェックボックスをチェックして、期間を指定(最大1年)して、CSVダウンロードのボタンをクリックする必要があります。
この流れをPower Automateに入力していきます。
左上の新しいフローをクリックします。
適当にフロー名を入力して作成をクリックします。
作成すると下記のようなフロー編集画面になります。
一つ一つアクションを登録してもいいのですが、面倒なので、mainの下のスペース部分に以下のコードを貼り付けると自動でフローを入力できます。
WebAutomation.LaunchEdge.LaunchEdge Url: $'''https://www.tfx.co.jp/historical/fx/''' WindowState: WebAutomation.BrowserWindowState.Normal ClearCache: False ClearCookies: False WaitForPageToLoadTimeout: 60 Timeout: 60 BrowserInstance=> Browser
WebAutomation.ExecuteJavascript BrowserInstance: Browser Javascript: $'''function ExecuteScript() {
document.querySelectorAll(\"input[type=checkbox][id^=historicaldata-product-]\").forEach((e)=>e.checked=true)
}'''
WebAutomation.SetCheckboxState.SetCheckboxStateNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['取得項目 \'ALL\''] State: WebAutomation.CheckboxState.Checked
WebAutomation.SelectRadioButton.SelectRadioButtonNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定from']
WebAutomation.SetDropDownListValue.SetDropDownListValueByIndexNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定from月'] OptionsIndeces: 2
WebAutomation.SetDropDownListValue.SetDropDownListValueByIndexNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定from日'] OptionsIndeces: 2
WebAutomation.SelectRadioButton.SelectRadioButtonNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定to']
WebAutomation.SetDropDownListValue.SetDropDownListValueByIndexNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定to月'] OptionsIndeces: 13
WebAutomation.SetDropDownListValue.SetDropDownListValueByIndexNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定to日'] OptionsIndeces: 32
WebAutomation.ExecuteJavascript BrowserInstance: Browser Javascript: $'''function ExecuteScript() {
return document.querySelectorAll(\"#historicaldata-period-start-year>option\").length
}''' Result=> YearLen
LOOP LoopIndex FROM YearLen + 0 TO 2 STEP -1
WebAutomation.SetDropDownListValue.SetDropDownListValueByIndexNoWait BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定from年'] OptionsIndeces: LoopIndex
WebAutomation.SetDropDownListValue.SetDropDownListValueByIndex BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['期間指定to年'] OptionsIndeces: LoopIndex WaitForPageToLoadTimeout: 60
WebAutomation.Click.Click BrowserInstance: Browser Control: appmask['Web Page \'https://www.tfx.co.jp/historical/fx/\'']['Anchor \'csvダウンロード\''] ClickType: WebAutomation.ClickType.LeftClick MouseClick: True WaitForPageToLoadTimeout: 60 MousePositionRelativeToElement: WebAutomation.RectangleEdgePoint.MiddleCenter OffsetX: 0 OffsetY: 0
WAIT 3
END
# [ControlRepository][PowerAutomateDesktop]
{
"ControlRepositorySymbols": [
{
"IgnoreImagesOnSerialization": false,
"Repository": "{\r\n
\"Screens\": [\r\n
{\r\n
\"Controls\": [\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Label\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"取得項目 'ALL'\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"div[Id=\\\"wrapper\\\"] > section > div > form > div > div > div > label[Text=\\\"ALL\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"label\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Label\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定from\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"#historicaldata-period-start-type-date\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"label\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Select\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定from月\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"select[Id=\\\"historicaldata-period-start-month\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"select\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Select\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定from日\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"select[Id=\\\"historicaldata-period-start-day\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"select\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Label\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定to\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"#historicaldata-period-end-type-date\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"label\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Select\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定to月\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"select[Id=\\\"historicaldata-period-end-month\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"select\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Select\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定to日\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"select[Id=\\\"historicaldata-period-end-day\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"select\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Select\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定from年\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"select[Id=\\\"historicaldata-period-start-year\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"select\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Select\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"期間指定to年\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"select[Id=\\\"historicaldata-period-end-year\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"select\",\r\n
\"ScreenshotPath\": null\r\n
},\r\n
{\r\n
\"AutomationProtocol\": \"uia3\",\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Anchor\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"Anchor 'csvダウンロード'\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \"a[Class=\\\"csv_download_submit\\\"][Text=\\\"csvダウンロード\\\"]\",\r\n
\"Elements\": [],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"a\",\r\n
\"ScreenshotPath\": null\r\n
}\r\n
],\r\n
\"ScreenShot\": null,\r\n
\"ElementTypeName\": \"Web Page\",\r\n
\"InstanceId\": null,\r\n
\"Name\": \"Web Page 'https://www.tfx.co.jp/historical/fx/'\",\r\n
\"SelectorCount\": 1,\r\n
\"Selectors\": [\r\n
{\r\n
\"CustomSelector\": \":desktop > domcontainer\",\r\n
\"Elements\": [\r\n
{\r\n
\"Attributes\": [],\r\n
\"CustomValue\": \"domcontainer\",\r\n
\"Ignore\": false,\r\n
\"Name\": \"Web Page 'https://www.tfx.co.jp/historical/fx/'\",\r\n
\"Tag\": \"domcontainer\"\r\n
}\r\n
],\r\n
\"Ignore\": false,\r\n
\"IsCustom\": true,\r\n
\"IsWindowsInstance\": false,\r\n
\"Order\": 0,\r\n
\"Name\": \"Default Selector\"\r\n
}\r\n
],\r\n
\"Tag\": \"domcontainer\",\r\n
\"ScreenshotPath\": null\r\n
}\r\n
],\r\n
\"Version\": 1\r\n
}",
"ImportMetadata": {
"DisplayName": "ローカル コンピューター",
"ConnectionString": "",
"Type": "Local",
"DesktopType": "local"
},
"Name": "appmask"
}
],
"ImageRepositorySymbol": {
"Repository": "{\r\n \"Folders\": [],\r\n \"Images\": [],\r\n \"Version\": 1\r\n}",
"ImportMetadata": {},
"Name": "imgrepo"
},
"ConnectionReferences": []
}
これを実行することで、自動で、1年ごとのデータをダウンロードできます。