TradingViewでFX自動売買をする方法[メール取得編]【GoogleAppsScript】

こんにちは、rockyです。

今回はTradingViewのアラートで送信されたメールの内容をGoogleAppsScript(GAS)で取得して、確認するところまで行いたいと思います。

全体図だと以下となります。

前回の振り返り

前回、TradingViewのアラートを設定し、移動平均線がゴールデンクロスした場合、以下の件名のメールが届くようになったと思います。

TradingViewアラート: request=ORDER,instrument=EUR_USD,units=10000,type=MARKET
※デッドクロスの場合はunits=-10000

アラートの設定ができていない人は前回の記事を参考にしてください。

TradingViewでFX自動売買をする方法[アラート設定編]【Pineスクリプトのサンプルあり】

この件名が注文内容になりますので、件名が想定外の場合は確認してください。

何を言っているかというと、OANDAで裁量トレードする場合は注文内容(新規・決済等)通貨ペアロット(枚数)注文方法(成行・指値等)を決めていると思います。

自動売買する場合でも、OANDA APIに以下のようなパラメータを渡すことで、どのような注文をするのかを決めることができます。

OANDA APIパラメータ

代表的なパラメータを記載しておきます。詳細はOANDAサイトで確認してください。
OANDA開発者サイト

  • 注文内容(request)
    • ORDER:(新規)注文
    • CLOSE:決済注文
  • 通貨ペア(instrument)
    • EUR_USD:ユーロドル
    • USD_JPY:ドル円
    • EUR_JPY:ユーロ円
    • AUD_JPY:豪ドル円
    • GBP_JPY:ポンド円
  • ロット(units)
    • 10000:10000通貨買い
    • -10000:10000通貨売り※マイナスで売り
  • 注文方法(type)
    • MARKET:成行
    • LIMIT:指値
    • STOP:逆指値

改めて件名を見ると、以下の注文内容がわかると思います。

(新規)注文ユーロドル10000通貨買い成行
request=ORDER,instrument=EUR_USD,units=10000,type=MARKET

つまり、アラートのメッセージ内容を変えれば、注文内容も変わるということです。

アラート設定をしたことで、メッセージ内容がメールの件名として届くので、今回はその件名の内容を取得していきたいと思います。

取得方法としてはGoogleAppsScript(GAS)を使います。メールはGmailを前提としているので、別のメールサービスを利用している人はGmailを利用してください。

GoogleAppsScriptを実際に書いてみよう

Googleにログインして、スプレッドシートを開いてください。

[ツール]ー>[スクリプトエディタ]をクリックするとGoogleAppsScriptのエディタ画面が開きます。

[無題のプロジェクト][コード.gs]が作られていると思います。

以下のコードをコピペして、保存してください。保存する際にプロジェクト名の入力を求められますが、何でもいいです。

//定数定義
var searchWord = "subject:(TradingViewアラート) OR subject:(TradingView Alert) from:noreply@tradingview.com";

/*
 * Tradingviewのアラートから届いたGmailの件名を取得して、最新メールの件名をログに出力する
 */
function getGmailSubject() {
  /* Tradingviewからのメール検索 */
  var threads = GmailApp.search(searchWord);//検索ヒット上限:50,000件
  Logger.log("searchWord:"+searchWord);
  /* 対象がなかったら、終了する */
  if(threads.length == 0){
    return false;
  }
  
  /*** Gmailから注文内容を取得 ***/
  for(var n in threads){
    var thread = threads[n];
    var msgs = thread.getMessages();
    var msg = msgs[msgs.length-1]; //最後(最新)のメールのみ取得
    var msgId = msg.getId(); //メッセージIDを取得
    
    var dt = Utilities.formatDate(msg.getDate(), 'JST', 'yyyy/MM/dd HH:mm:ss');
    var subject = msg.getSubject();
    Logger.log("subject:"+subject);
    
    /* 正規表現:[^,]は,以外の文字の一文字で、*で直前の文字の0回以上の繰り返し */
    request        = subject.match(/request=[^,]*/).toString().replace(/request=/, "");
    instrument     = subject.match(/instrument=[^,]*/).toString().replace(/instrument=/, "");
    units          = subject.match(/units=[^,]*/).toString().replace(/units=/, "");
    type           = subject.match(/type=[^,]*/).toString().replace(/type=/, "");
    Logger.log("request:"+request);
    Logger.log("instrument:"+instrument);
    Logger.log("units:"+units);
    Logger.log("type:"+type);
  }
}
紹介しているスクリプトは本番運用しているものを抜粋して、説明しやすいように修正しています。問題なく動きますが、本番運用には考慮不足のも箇所がありますので、十分テストしていただければと思います。今回で言うと、メールの取得範囲が未設定など。

保存ができたら早速スクリプトを実行してみます。

[実行]ー>[関数を実行]ー>「getGmailSubject」をクリックしてください。

以下のように「承認が必要です」と出てきますが、「許可を確認」さらに「許可」をクリックして実行します。今回はメールを取得するスクリプトを書いているのでメールについての確認内容が表示されます。

実行後、特にエラーが出なければ正常終了しています。想定通り、件名からそれぞれの情報が取得できたか確認してみましょう

[表示]ー>[ログ]をクリックします。

以下のように、request,instrument,units,typeに値が入っていれば問題ないです。

今回はここまでです。次回はOANDA APIを使って実際に注文してみたいと思います。

OANDAのデモ口座を申し込んでない人は準備しておいてください。

それではまた~







コメントを残す

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