楽天マーケットスピード2を自動で起動・ログインして、楽天RSSを組み込んだ自動売買エクセルを立ち上げるPythonスクリプト
兼業で投資をしている方で、トレードのアイデアを持っている人は、自動売買をしたいと思っているのではないかと思います。
私もその一人です。大儲けはできないけど損はしなさそうなルールを設けて、楽天RSSを利用して自動売買を行っています。
今までのところ狙い通り、大儲けはしていませんが、損はしていません。
ただ自動売買をしていると、自動売買をスタートさせるまでの手動の作業がどんどん煩わしくなっていきます。時間にするとおよそ数分なのですが。
そこでネットの記事やAIの力を借りながら、楽天マーケットスピード2を自動で起動・ログインして、自動売買のロジックをあらかじめ組んだエクセルを立ち上げるまで、を自動化するPythonスクリプトを作りました。
皆さんのお役に立てればと思い公開します。
import os
import time
import pyautogui
import subprocess
import pygetwindow as gw
def wait_for_window(window_title, timeout):
"""
指定したウィンドウが存在するまで待機する関数
:param window_title: ウィンドウのタイトル
:param timeout: タイムアウト時間(秒)
:return: ウィンドウが存在する場合はTrue、存在しない場合はFalse
"""
start_time = time.time()
while (time.time() - start_time) < timeout:
windows = gw.getWindowsWithTitle(window_title)
if windows:
return True # ウィンドウが見つかった
time.sleep(1) # 1秒待機して再チェック
return False # タイムアウト
pyautogui.hotkey("win","m")
# 作業ディレクトリを変更
os.chdir(r'C:\Users\*************\AppData\Local\MarketSpeed2\Bin')
# 楽天マーケットスピードのアプリケーションを起動
market_speed = subprocess.Popen("MarketSpeed2.exe") # 実際のアプリケーションの名前を指定
LoginWindowTitle = 'MARKETSPEED II ログイン'
if wait_for_window(LoginWindowTitle, 30):
print("アプリケーションが起動しました")
else:
print("アプリケーションの起動に失敗しました")
time.sleep(3)
# マウスを使ってログインフォームの位置に移動
# ここでは、実際の画面の位置に応じて座標を調整してください
pyautogui.click(x=888, y=623) # ユーザー名の入力フィールドの位置
pyautogui.write("ユーザー名") # ユーザー名を入力
pyautogui.click(x=855, y=661) # パスワードの入力フィールドの位置
pyautogui.write("パスワード") # パスワードを入力
pyautogui.click(x=1159, y=668) # ログインボタンの位置をクリック
MktSpdWindowTitle = 'MarketSpeed2'
if wait_for_window(MktSpdWindowTitle, 30): # ウィンドウタイトルを適切に指定
print("マーケットスピードが起動しました")
else:
print("マーケットスピードが起動に失敗しました")
# ログイン後の処理
time.sleep(3) # ログイン処理を待機
print("ログインしました")
# 自動売買エクセルを開いてRSSを設定する処理
if not gw.getWindowsWithTitle('エクセルファイルのウィンドウ名') :
excel_file_path = r'C:\Users\*******************\sample_trade.xlsm'
subprocess.Popen(['start', 'excel.exe', excel_file_path], shell=True)
else :
print("エクセルファイルが起動しています")
# エクセルが起動するまで待機
ExcelFileTitle = 'エクセルファイルのウィンドウ名'
if wait_for_window(ExcelFileTitle, 30): # ウィンドウタイトルを適切に指定
print("エクセルファイルが起動しました")
else:
print("エクセルファイルの起動に失敗しました")
time.sleep(3)
# エクセルウィンドウをアクティブにする
excel_windows = gw.getWindowsWithTitle('エクセルファイルのウィンドウ名') # ウィンドウタイトルを指定
if excel_windows:
excel_window = excel_windows[0] # ウィンドウが存在する場合
excel_window.activate()
else:
print("指定したウィンドウが見つかりませんでした。1")
# RSSの接続と発注機能のオンオフをあらかじめクイックアクセスツールバーに登録しておく。インデックスは各人の登録場所による。
# ここでは、09の位置にRSSの接続メニュー、08の位置に発注機能のオンオフメニューが登録されているとする。
# クイックアクセスツールバーのボタンをAltキーと数字でクリック
pyautogui.hotkey('alt', '0', '9')
time.sleep(10)
if excel_windows:
excel_window = excel_windows[0] # ウィンドウが存在する場合
excel_window.activate()
else:
print("指定したウィンドウが見つかりませんでした。2")
pyautogui.hotkey('alt', '0', '8')
time.sleep(5)
#ウィンドウ名がわからない場合は、すべてのウィンドウの名前取得用の以下のスクリプトを走らせて確認する。
#for window in gw.getAllTitles():
# print(window)
注意点
自動売買エクセルファイルのパスやマーケットスピードのアプリケーションへのパスは、実際に使用するファイル・環境のパスに置き換えてください。
免責事項
本記事の内容はあくまでも参考情報であり、自動売買による損失やトラブルに対する責任は負いかねます。自動売買を行う際は、十分にリスクを理解した上で、自己責任で行ってください。