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でコードの書き方が違う。

注文の詳細を決める定数の順番は決まっている

最初にファイルを呼び出す作業が必要。用語忘れた

(● ˃̶͈̀ロ˂̶͈́)੭ꠥ⁾⁾私のTwitterはこちら

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です