FX自動売買ブログ プログラミング勉強1回目
このブログは自動売買に関するプログラミングの知識を付けたい20代がノートのように投稿していくものです。※このカテゴリーのコードはChatGPTで作成されたものを元に、学習用として掲載しています。動作保証や商用利用はしていません。

【この記事はこんな人が書いてます】デリバティブ取引は2021年8月から。週次最高120万円、月次最高ROI13,000%、月最高損40万のアマチュアトレーダー。仮想通貨/為替/ゴールドを取引。PythonとMQL4を勉強中。
とりあえず作りたいもの(自動売買のコード)をどのような要素からできているのか勉強していこうと思います。面倒くさいが泥臭くまずは頑張ります。
例1.9時にドル円買うBOT
1.メインスクリプトファイル
import time
from datetime import datetime
from trade_module import execute_trade
from time_module import is_trade_time
def main():
last_trade_date = None
while True:
current_time = datetime.now()
if is_trade_time(current_time, last_trade_date):
if execute_trade("USDJPY", "buy", 1.0):
last_trade_date = current_time.date()
time.sleep(60) # 1分ごとにチェック
if __name__ == "__main__":
main()
使われているデータ型と役割、関数
時刻を表す型
datetime.time
メイン処理関数
def main()
main()
関数を呼び出すイベントハンドラ
2取引実行
def execute_trade(symbol, action, lot_size):
"""
指定されたシンボルに対して取引を実行します。
:param symbol: 通貨ペア(例: 'USDJPY')
:param action: 'buy' または 'sell'
:param lot_size: 取引ロットサイズ
:return: 取引成功時はTrue、失敗時はFalse
"""
# ここに取引APIを呼び出すコードを実装
print(f"Executing {action} order for {symbol} with lot size {lot_size}")
# 実際の取引処理をここに実装
return True
取引を実行する関数
def execute_trade(symbol, action, lot_size)
現在の時間が取引時間かどうかを判定する関数
def is_trade_time(current_time, last_trade_date)
例2.9時に買って17時に決済するBOT
パッケージのインストール
pip install MetaTrader4
#ログイン情報
account = "your_account_number" # 例: "12345678"
password = "your_account_password"
server = "your_server_address" # 例: "demo.mt4broker.com"
account,password,server:string
#MT4に接続
def initialize_mt4():
if not mt4.initialize(account=account, password=password, server=server):
print("MT4 Initialization failed.")
return False
return True
mt4にログインする関数、成功でtrue。mt4.initialize()で口座情報を入力
initialize_mt4()
#USDJPY購入
def buy_usd_jpy(lot_size=1):
symbol = "USDJPY"
price = mt4.symbol_info_tick(symbol).ask # 現在のask価格を取得
slippage = 10 # スリッページ設定
deviation = 20 # 最大許容変動
指定LOTでUSDJPYを買う関数
buy_usd_jpy(lot_size)
今のaskまたはbid価格を確認する関数
mt4.symbol_info_tick()
#注文の詳細
order = {
"action": mt4.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot_size,
"type": mt4.ORDER_TYPE_BUY,
"price": price,
"slippage": slippage,
"deviation": deviation,
"magic": 234000, # 任意のマジックナンバー
"comment": "Python Auto Buy",
"type_filling": mt4.ORDER_FILLING_IOC,
"type_time": mt4.ORDER_TIME_GTC
}
#注文実行
result = mt4.order_send(order)
if result.retcode != mt4.TRADE_RETCODE_DONE:
print("Buy order failed:", result)
else:
print(f"Buy order executed: {result}")
実際に注文を送信する関数
mt4.order_send()
#決済注文関数
result = mt4.order_send(order)
if result.retcode != mt4.TRADE_RETCODE_DONE:
print("Buy order failed:", result)
else:
print(f"Buy order executed: {result}")
#決済注文の詳細
order = {
"action": mt4.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot_size,
"type": mt4.ORDER_TYPE_BUY,
"price": price,
"slippage": slippage,
"deviation": deviation,
"magic": 234000, # 任意のマジックナンバー
"comment": "Python Auto Buy",
"type_filling": mt4.ORDER_FILLING_IOC,
"type_time": mt4.ORDER_TIME_GTC
}
注文実行を示す定数
mt4.TRADE_ACTION_DEAL
注文の即時執行を示す定数
mt4.ORDER_FILLING_IOC
GoodTillCancelldが有効なことを示す定数
mt4.ORDER_TIME_GTC
#決済注文の実行
result = mt4.order_send(order)
if result.retcode != mt4.TRADE_RETCODE_DONE:
print("Sell order failed:", result)
else:
print(f"Sell order executed: {result}")
#特定時間に取引を行うメイン関数
def trade_at_specified_time():
if not initialize_mt4():
return
while True:
current_time = datetime.datetime.now()
ループ内のコードを無限に繰り返す
while True:
#9時に買い
if current_time.hour == 9 and current_time.minute == 0:
print("Placing buy order at 9:00")
buy_usd_jpy(lot_size=1)
time.sleep(60) # 1分間待機(重複実行を防ぐ)
#17時に決済
if current_time.hour == 17 and current_time.minute == 0:
print("Placing sell order at 17:00")
sell_usd_jpy(lot_size=1)
time.sleep(60) # 1分間待機(重複実行を防ぐ)
#60秒待機
time.sleep(60)
指定秒数だけプログラムを停止する関数
#全スクリプトの実行
if __name__ == "__main__":
trade_at_specified_time()
メモ
データ型と関数、定数、イベントハンドラ(特定のことが起きた時に処理されるもの)、=とか()と改行で構成されているっぽい。
かっこの使い方が漢文の上下点に似てるし、大枠と小枠で形を変えないといけないぽい。
pythonとMQL4でコードの書き方が違う。
注文の詳細を決める定数の順番は決まっている
最初にファイルを呼び出す作業が必要。用語忘れた