30分で作るTradingViewのアラートで自動的に発注する仕組み
2018年9月17日 訂正
TwitterDMでのご指摘により、下記コードの末尾にセミコロンが足りないことに気が付きました。ご指摘ありがとうございます。
var sellCondition = 'subject:(【SELL_FXBTCJPY】)';
以上。
こんばんは、でめきん(@demekinnomimi)です。今日はTradingViewのアラートに反応して自動的にBitflyerで発注する方法を書きます。ちなみに今日もPythonは一切使いません。
必要なもの
・Googleアカウント
・TradingView無料アカウント(登録情報のEメールをGmailに設定済み)
本日のインスパイア元はこちら → https://life89.jp/gas_bitflyer_sendchildorder/
昨日のnoteの内容も使っています。
30分の制限時間に追われているので、GoogleScriptの細かい点は、昨日のインスパイア元( https://asatte.biz/gmail-line/#GmailLINE)を見てください。
早速、Google Scriptのソースコードを貼ります。
// APIkeyを設定
var key = 'API_KEY';
var secret = 'API_SECRET';
var buyCondition = 'subject:(【BUY_FXBTCJPY】)';
var sellCondition = 'subject:(【SELL_FXBTCJPY】)';
function getMail(){
//指定した件名のスレッドを検索して取得
var myThreadsBuy = GmailApp.search(buyCondition, 0, 10);
var myThreadsSell = GmailApp.search(sellCondition, 0, 10);
//スレッドからメールを取得し二次元配列に格納
var myMessagesBuy = GmailApp.getMessagesForThreads(myThreadsBuy);
var myMessagesSell = GmailApp.getMessagesForThreads(myThreadsSell);
for(var i in myMessagesBuy){
for(var j in myMessagesBuy[i]){
//スターがないメッセージのみ処理
if(!myMessagesBuy[i][j].isStarred()){
sendOrder('BUY',0.01);
//処理済みのメッセージをスターをつける
myMessagesBuy[i][j].star();
}
}
}
for(var i in myMessagesSell){
for(var j in myMessagesSell[i]){
//スターがないメッセージのみ処理
if(!myMessagesSell[i][j].isStarred()){
sendOrder('SELL',0.01);
//処理済みのメッセージをスターをつける
myMessagesSell[i][j].star();
}
}
}
}
function sendOrder(side, size){
var timestamp = Date.now().toString();
var method = 'POST';
var path = '/v1/me/sendchildorder';
var body = JSON.stringify({
product_code: "FX_BTC_JPY",
child_order_type: "MARKET",
side: side,
size: size
});
var text = timestamp + method + path + body;
var signature = Utilities.computeHmacSha256Signature(text, secret);
var sign = signature.reduce(function(str,chr){
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + (chr.length==1?'0':'') + chr;
},'');
var url = 'https://api.bitflyer.jp' + path;
var options = {
method: method,
payload: body, // ← GASの場合、payloadで送る
headers: {
'ACCESS-KEY': key,
'ACCESS-TIMESTAMP': timestamp,
'ACCESS-SIGN': sign,
'Content-Type': 'application/json'
}
};
//送信してレスポンス取得
var response = UrlFetchApp.fetch(url, options);
if( response != null ){
var obj = JSON.parse(response.getContentText());
Logger.log("child_order_acceptance_id(APIの受付ID): "+ obj.child_order_acceptance_id);
}
}
上記のコードを昨日と同じように、API_KEYとAPI_SECRETをご自身のものに書き加えてやって、Google Scriptに貼り付けて保存して、実行すると、
こんな感じで承認が必要ですって出て、
こんな許可を求められるので、許可してあげてください。
動くのだけは確認しました。これを昨日と同様に「現在のプロジェクトのトリガー」で設定してやって、TradingViewのアラートのメッセージに買いたい場合【BUY_FXBTCJPY】を、売りたい場合【SELL_FXBTCJPY】)を設定すれば、TradingViewのアラートにしたがって自動売買するBotの完成です。
動作確認してたら、30分過ぎてしまったので今日はここまで。