Tradingviewのウォッチリストに自動で銘柄を追加する方法
使用する道具は以下
・スプレッドシート
・ドキュメント
・GAS
・UWSC
まず、以下のサイトでUWSCをダウンロードします。
ダウンロードした後は、「すべて展開」をする(圧縮ファイルの状態でダウンロードされます)。
次に、tradingviewのショートカットを作成します。
※ブラウザの動作確認はChromeでしかしていないので、Chromeのブラウザをデフォルトにしてください。
ショートカットを作成したら右クリックをしてプロパティを開きます。
(作成したショートカットの上で右クリックすれば見つかります。)

赤枠のショートカットキーの欄でCtrlとAltを押しながらHを押して右下にある適用をクリックして設定を完了してください。

※このとき、ショートカットキーを入力したらTradingviewのチャート画面がいきなり表示されることを確認してください。
下のスプレッドシートを開いてファイルをコピーしてください。

このとき、コピーしたスプレッドシートのシートIDを使います。
次に、googleドキュメントを新規作成してください(このとき新規作成したドキュメントIDを使います)。
ドキュメントIDとシートIDはこの後使います。
スプレッドシートの方にウォッチリストに追加する銘柄のティッカーシンボルを入れておきましょう(アルファベットのみ対応しています。数字で入力する必要がある日本株は対応できていません。もし、おむすびの方で、欲しい方がいたら、別途作成します。おむすびのグルチャの方にご連絡ください「最適化チャンネル(FIRE最適化チャンネル)」という名前で配信中です)。
「google aps script」と検索して、新しいスクリプトファイルを開いたら、以下のコードをコピペしてください。
function myFunction() {
//ドキュメントID
const docId = '~~'; //~~にドキュメントIDを入力する
var sheetId = '>>'; //>>にシートIDを入力する
//これより下は変更しない
//ドキュメントを取得する
const doc = DocumentApp.openById(docId);
//ドキュメントの内容を取得する
const body = doc.getBody();
//シートオブジェクトの取得
var sheetName = '変更しないシート'; //シート名を入力する
//var sheetName2 = '変更しないシート2'; //シート名を入力する
var sheetName3 = '変更しないシート3'; //シート名を入力する
var sheetName0 = '銘柄入力'; //シート名を入力する
var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName); //変更はしない
//var sheet2 = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName2); //変更はしない
var sheet3 = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName3); //変更はしない
var sheet0 = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName0); //変更はしない
//配列へシート全体を読み込む
var startspel = sheet.getDataRange().getValues(); //変更はしない
Logger.log(startspel[0]); //変更はしない
//var startspel2 = sheet2.getDataRange().getValues(); //変更はしない
//Logger.log(startspel2[0]); //変更はしない
var startspel3 = sheet3.getDataRange().getValues(); //変更はしない
Logger.log(startspel3[0]); //変更はしない
var startspel0 = sheet0.getDataRange().getValues(); //変更はしない
Logger.log(startspel0[0]); //変更はしない
//ドキュメントの内容を削除する
body.clear(); // 全消去
//ドキュメントへの書き込み開始
for (var i = 0; i < startspel.length; i++) {
body.appendParagraph(''+startspel[i]);
}
for (var j = 0; j < startspel0.length; j++){
body.appendParagraph('KBD(VK_SHIFT,DOWN,1031)');
body.appendParagraph('KBD(VK_T,CLICK,47)');
body.appendParagraph('KBD(VK_SHIFT,UP,15)');
body.appendParagraph('KBD(VK_BACK,CLICK,1172)');
body.appendParagraph('KBD(VK_SHIFT,DOWN,657)');
//
text = ""+startspel0[j];
let splitText = text.split("");
for (var i = 0; i < splitText.length; i++) {
body.appendParagraph('KBD(VK_'+splitText[i]+',CLICK,469)');
}
//
//
for (var i = 0; i < startspel3.length; i++) {
body.appendParagraph(''+startspel3[i]);
}
//
}
//ドキュメントの内容を削除する
//body.clear(); // 全消去
//ドキュメントにテキストを書き込む
//body.appendParagraph('テキストを書き込む');
//body.appendParagraph('テキストを書き込む2');
}
上記のコードの最初の3行目あたりにシートIDとドキュメントIDを入力する場所があるので、先ほどのIDをそれぞれ入力してください。
const docId = '~~'; //~~にドキュメントIDを入力する
var sheetId = '>>'; //>>にシートIDを入力する
以上すべて完了したら、「実行」ボタンを押してください。
すると、ドキュメントIDを入力したドキュメントファイルにUWSCのコードが書き込まれています。
次に、そのドキュメントファイルをダウンロードします。txtファイルとしてダウンロードしてください。

ダウンロードしたファイルの拡張子を「.txt」から「.UWS」に変更してください。
これをUWSCを起動して、読み込みます。
読み込んだら、実行する前にChromeの新しいウィンドウを立ち上げて検索窓をクリックした直後にUWSCの実行ボタンをおしてください。
※自動入力が終了するまで、マウスやキーボードには一切触らないでください。誤作動してしまいます。
以降は、
スプレッドシートに銘柄を入力
→ google aps script 実行
→ ドキュメントダウンロード
→ ダウンロードしたファイルの拡張子を「.UWS」に変更
→ UWSCに読み込む
→ 実行する前にChromeの新しいウィンドウを立ち上げて検索窓をクリックした直後にUWSCの実行ボタンを押す。
という手順で自動入力できます。
ちょっとだけ便利になりました。(2023/2/12)
(ここからは購入してくださった方に向けて、ちょっと便利な方法をお伝えします。)
まず、以下のスプレッドシートを開いて、コピーを作成してください。
コピーを作成しましたら、拡張機能をクリックして

Apps Scriptを開きます。(今回は必ずこの手順でGASを起動させてください)

以下のコードをGASにコピペします。
function onOpen() {
// スプレッドシートを開いたときに実行される関数
// UIの取得
const ui = SpreadsheetApp.getUi()
// メニューの表示名
const menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('ドキュメントに出力する', 'myFunction');
// メニューを画面に追加する
menu.addToUi();
}
function myFunction() {
// UIを取得
const ui = SpreadsheetApp.getUi();
// ドキュメントのURLを入力させる
const response = ui.prompt('ドキュメントのURLを入力してください', ui.ButtonSet.OK_CANCEL);
// キャンセルが押されたらスクリプトを終了する
if (response.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// 入力された文字(ドキュメントのURL)を取得する
const docURL = response.getResponseText();
// ドキュメントIDのみを取り出す
const docId = docURL.replace("https://docs.google.com/document/d/","").replace("/edit","");
//ドキュメントID
//const docId = '~~'; //~~にドキュメントIDを入力する
//var sheetId = '>>'; //>>にシートIDを入力する
//これより下は変更しない
//ドキュメントを取得する
const doc = DocumentApp.openById(docId);
//ドキュメントの内容を取得する
const body = doc.getBody();
//シートオブジェクトの取得
var sheetName = '変更しないシート'; //シート名を入力する
//var sheetName2 = '変更しないシート2'; //シート名を入力する
var sheetName3 = '変更しないシート3'; //シート名を入力する
var sheetName0 = '銘柄入力'; //シート名を入力する
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); //変更はしない
//var sheet2 = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName2); //変更はしない
var sheet3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName3); //変更はしない
var sheet0 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName0); //変更はしない
//配列へシート全体を読み込む
var startspel = sheet.getDataRange().getValues(); //変更はしない
Logger.log(startspel[0]); //変更はしない
//var startspel2 = sheet2.getDataRange().getValues(); //変更はしない
//Logger.log(startspel2[0]); //変更はしない
var startspel3 = sheet3.getDataRange().getValues(); //変更はしない
Logger.log(startspel3[0]); //変更はしない
var startspel0 = sheet0.getDataRange().getValues(); //変更はしない
Logger.log(startspel0[0]); //変更はしない
//ドキュメントの内容を削除する
body.clear(); // 全消去
//ドキュメントへの書き込み開始
for (var i = 0; i < startspel.length; i++) {
body.appendParagraph(''+startspel[i]);
}
for (var j = 0; j < startspel0.length; j++){
body.appendParagraph('KBD(VK_SHIFT,DOWN,1031)');
body.appendParagraph('KBD(VK_T,CLICK,47)');
body.appendParagraph('KBD(VK_SHIFT,UP,15)');
body.appendParagraph('KBD(VK_BACK,CLICK,1172)');
body.appendParagraph('KBD(VK_SHIFT,DOWN,657)');
//
text = ""+startspel0[j];
let splitText = text.split("");
for (var i = 0; i < splitText.length; i++) {
body.appendParagraph('KBD(VK_'+splitText[i]+',CLICK,469)');
}
//
//
for (var i = 0; i < startspel3.length; i++) {
body.appendParagraph(''+startspel3[i]);
}
//
}
//ドキュメントの内容を削除する
//body.clear(); // 全消去
//ドキュメントにテキストを書き込む
//body.appendParagraph('テキストを書き込む');
//body.appendParagraph('テキストを書き込む2');
}
実行したら、スプレッドを開いてください。
以下のようにスクリプトを実行という項目が追加されています。

ドキュメントに出力するをクリックしてください。

下のような画面が出てきますので、ここに、出力先であるドキュメントのURLをコピペしてください。(今回はURL全体をそのままコピペしてください)

以上で完了です。URL先のドキュメントに出力されているはずです。
これにより、ドキュメントIDを探す手間を省くことができました。