アメリカのGoogleを英語で検索する

よく利用するのでメモ。URLは下記。

アメリカのGoogleを英語で検索するURL

https://www.google.com/webhp?gl=us&hl=en&gws_rd=cr&pws=0

※ブックマークで利用可能です

日本からgoogle.comへアクセスするとgoogle.co.jpにリダイレクトされてしまいます。webhpにパラメータを付与することでリダイレクトを防ぐことができます。


Develop Extensions 日本語訳

英語とChromeExtensionsの勉強がてら日本語訳を載せてみました。

英語初心者なのでところどころ間違ってるかもしれません。

元URL(英語)はこちら

拡張機能を開発する

拡張機能のユーザーインターフェイスをカスタマイズする
ブラウザアクションツールバーにアイコン、ツールチップ、バッジ、そしてポップアップを追加する
コマンドアクションのトリガーとなるキーボードショートカットを追加する
コンテクストメニューGoogle Chromeのコンテキストメニューに項目を追加する
オムニボックスアドレスバーにキーワード機能を追加する
ページアクションツールバーに動的にアイコンを表示する

拡張ユーティリティを構築する
アクセシビリティ(a11y) 拡張機能を障害ある人が使えるようにする
バックグランドスクリプト何か面白いことが起こった時に、検知し反応する
国際化言語とロケールに対する作業を行う
身元OAuth2アクセストークンを入手する
管理 インストール、そして実行されている拡張機能を管理 する
メッセージ受け渡し コンテンツスクリプトから親エクステンションへ、またはその逆に通信します
オプションページユーザーが拡張機能をカスタマイズできるようにする
許可拡張機能の権限を変更する
ストレージデータを保存および取得する

クロームブラウザを変更して観察する
ブックマークブックマークを作成、整理、および操作する
データ閲覧ユーザーのローカルプロファイルから閲覧データを削除する
ダウンロードプログラムでダウンロードを開始、監視、操作、および検索する
フォント設定Chromeのフォント設定を管理する
ヒストリーブラウザの訪問ページの記録と対話する
プライバシーChromeのプライバシー機能を制御する
プロキシChromeのプロキシ設定を管理する
セッションブラウジングセッションからタブとウィンドウを照会、復元する
タブブラウザでタブを作成、変更、および並べ替える
トップサイト最も訪問したURLにアクセスする
外観ブラウザ全体の外観を変更する
ウインドウブラウザでウィンドウを作成、変更、および並べ替える

ウェブを変更して観察する
アクティブタブ<all_urls>のホスト許可に関するほとんどの必要性を取り除き、Webサイトに安全にアクセスする
コンテンツ設定Cookie、JavaScript、およびプラグインなどのWebサイトの機能をカスタマイズする
コンテンツスクリプトWebページのコンテキストでJavaScriptコードを実行する
クッキーブラウザのCookieシステムを調べて変更する
クロスオリジンXHRXMLHttpRequestを使用して、リモートサーバーとデータを送受信する
宣言型コンテンツ許可を必要なしでページのコンテンツに対してアクションを実行する
デスクトップキャプチャ画面、個々のウィンドウ、またはタブの内容をキャプチャする
ページキャプチャタブのソース情報をMHTMLとして保存する
タブキャプチャタブメディアストリームと対話する
ウェブナビゲーション実行中のナビゲーションリクエストのステータス更新する
ウェブリクエストトラフィックを観察して分析する。遮断する、または実行中の要求を修正する

パッケージ化、デプロイ、更新
自動更新拡張子を自動的に更新する
ホスティングGoogleまたは指定されたサーバーで拡張機能をホストする
その他配置オプション指定されたネットワーク上、または他のソフトウェアと一緒に内線番号を配布する
パッケージングChromeウェブストアの外部に拡張子を配布するための.crxファイルを作成する

Chrome DevToolsを展開する
デバッガネットワークの相互作用を計測し、JavaScriptをデバッグ、DOMとCSSを変更する
デブツールChromeデベロッパーツールに機能を追加する

元URL(英語)はこちら

よく使うVisual Studio Codeのショートカット一覧(windows版)

私はPythonの開発にはエディタの「Visual Studio Code」を利用しています。
よく使うショートカットをメモとして記載します。

ショートカット一覧(windows版)

ショートカットコマンド一覧表示

Ctrl+K→S

Ctrlは押したままK、Sの順に押します。これがあれば、他のいれない?
「Ctrl+K→○」系のコマンドはこの他にも複数存在します。探ってみてください。

マルチカーソル

Ctrl+Alt+↓

下の行にも有効なカーソルを出します。複数の列を一気に編集したい時に使います。

矩形選択

Shift+Alt+ドラッグ

矩形(くけい)と読みます。縦横を指定して、四角の形に選択できます。上記のマルチカーソルと用途によって使い分けるといい感じです。

複数単語選択

Ctrl+D

複数の単語を一気に編集したい時に使います。

次の同一単語へジャンプ

Ctrl+K→D

Ctrlは押したままK、Dの順に押します。複数単語選択より、よく利用するかも。

表示幅をウインドウ幅に変更

Alt+Z

csvファイルなど横に長いファイルをウインドウ幅で折り返してくれます。

ウインドウ分割

Ctrl+(1~8)数字

開いてるウインドウ数+1で新規のウインドウを表示します。

ウインドウ移動

Ctrl+(1~8)数字

開いていないウインドウへは移動できません

分割したウインドウの配置変更

Shift+Alt+0(数字のゼロ)

分割したウインドウが列レイアウトと行レイアウトで切り替えられます。

タブ移動(ウインドウ内の履歴から移動)

Ctrl+Tab:

表示中のタブの開いた履歴からタブを移動

Ctrl+Shift+Tab:

上の逆順でタブを移動

タブ移動

Ctrl+PgUp:

開いているタブを右に移動します。

Ctrl+PgDn:

開いているタブを左に移動します。

※ウインドウを跨いで移動ができます。

ウインドウを移動させる

Ctrl+K→→

Ctrlは押したままK、→の順に押します。

タブを違うウインドウへ移動させる

Ctrl+ALT+→

ウインドウが2画面の時に、隣のウインドウへ移動できます。

 

PythonでbitFlyer、Bitcoinの移動平均線(SMA)を計算、表示する

Pythonでビットフレイヤーのビットコイン終値を元にSMAを計算し、表示します。

PythonでbitFlyer、Bitcoinの移動平均線(SMA)を計算、表示

サンプルプログラムでは取引所は”bitFlyer”、通貨は”btcfxjpy”です。

SMAを計算する為の過去の価格データは”CryptoWatch”から取得します。

足は1時間(60分)、SMAは期間10と期間30の2つを計算、表示します。

Pythonのコード

CryptoWatchからbitFlyer、btcfxjpyのohlcを取得します。
pythonのモジュールなし、pandasモジュールを用いた2種類の計算方法でSMAを取得します。
取得した終値とSMAを計算し、グラフに表示します。

コンソールの表示

SMA10          : 472119.00
SMA10 (pandas) : 472119.00
SMA10 (time)   : 2018-11-29 19:00:00
SMA10 compare  : True
SMA30          : 469217.77
SMA30 (pandas) : 469217.77
SMA30 (time)   : 2018-11-29 19:00:00
SMA30 compare  : True

Matplotlibの表示画面

 

解説

SMAを計算する(モジュールなし)

# SMAを計算する
# ClosePrice の順番
CLOSE = 4 
def _sma(_ohlcv, _length):
    total = 0
    for i in range(_length):
        total += _ohlcv[-i-1][CLOSE] # クローズを追加
    sma = total / _length # 数で割って平均を算出
    return sma

上記の関数では、モジュールなしでSMAを計算しています。
第1引数では取得した過去データ(ディクショナリ型)
第2引数ではSMAの期間 を指定します。

「for i in range(_length)」でSMAの足の期間分処理を繰り返し行います。
CryptoWatchから取得した価格データは古い順に並んでいるので
「_ohlcv[-i-1]」のマイナス指定で、後ろから1行の価格データを取得し、
「[CLOSE] 」で価格データの中から終値を取得しています。
※終値は価格データの5番目にならんでいるので、CLOSE=4(0からカウントされるので4を指定)で指定する。

「total += _ohlcv[-i-1][CLOSE]」でSMAで指定した期間の終値を合算し、
「sma = total / _length」で期間の数で割ることで平均値を計算しています。
 

SMAを計算する(pandas)

import pandas as pd
# cryptowatchのデータ配列名
OHLCV_LIST = ['CloseTime', 'OpenPrice', 'HighPrice', 'LowPrice', 'ClosePrice', 'Volume', 'FumeinaAtai']

# ohlcvを配列型からデータフレーム型に変換
df_ohlcv = pd.DataFrame(data=ohlcv, columns=OHLCV_LIST)


# SMAを計算する(by pandas)
def _sma_pandas(_df_ohlcv, _length):
    sma = pd.DataFrame()
    # SMAを取得
    sma['SMA'] = _df_ohlcv['ClosePrice'].rolling(_length).mean()
    # UnixTimeをデータタイム形式に変換
    sma['CloseTime'] = _df_ohlcv['CloseTime'].apply(lambda x: datetime.datetime.fromtimestamp(x))
    return sma

上記の関数では、pandasモジュールを利用してSMAを計算しています。
第1引数では取得した過去データ(データフレーム型)※先に紹介した関数とは別の型です
第2引数ではSMAの期間 を指定します。

「import pandas as pd」でpandasモジュールをインポートしています。
「df_ohlcv = pd.DataFrame(data=ohlcv, columns=OHLCV_LIST)」で
ディクショナリ型のデータをpandasのDataFrame型に変更します。
データ元はCryptoWatchから取得した過去データ(ohlcv)、
カラムは「OHLCV_LIST」を設定します。
※カラムはデータにアクセスする際に利用します

「_df_ohlcv[‘ClosePrice’].rolling(_length).mean()」の1行でSMAを取得しています。
「_df_ohlcv[‘ClosePrice’]」で終値データ(列)を取得します。
※ここで設定したカラム名で対象データを取得します
「rolling(_length)」で列から対象の行を取得し、「mean()」で平均値を計算しています。

「_df_ohlcv[‘CloseTime’].apply(lambda x: datetime.datetime.fromtimestamp(x))」
確認用に設定した時間は、元々UnixTimeだった時間をデータタイム型に変更しています。

 

終値、SMAのチャートを表示する

from matplotlib import pyplot as plt
    plt.plot(df_ohlcv['ClosePrice']) # 終値
    plt.plot(sma10_p['SMA']) # SMA10
    plt.plot(sma30_p['SMA']) # SMA30
    plt.show() # グラフ表示

matplotlibというモジュールを利用して終値、SMAのチャートを表示します。
「from matplotlib import pyplot as plt」でmatplotlibモジュールをインポートします
「plt.plot(df_ohlcv[‘ClosePrice’])」で終値を設定
「plt.plot(sma10_p[‘SMA’])」でSMAを設定
「plt.show()」でグラフを表示しています。
 

トレーディングビューの投信戦略テスターでBitfinexのLong、Shortのボリューム増減でエントリーする

Bitfinexのロング、ショートのボリュームを監視して、BitMEXでエントリーを行う投資戦略テスターのPineスクリプトです。

投資戦略テスターの内容

Bitfinex、BTCUSDのロング、ショートのボリュームの増減を監視して
BitMEXのXBTUSDを売買する投資戦略テスターです。
下記の銘柄、時間で検証しています。

銘柄:BITMEX:XBTUSD
時間:1時間

以下、エントリー条件です。

・エントリー

ロング条件:ロングのボリュームがしきい値より下がる かつ ショートのボリュームがしきい値より上がる
ショート条件:ロングのボリュームがしきい値より上がる かつ ショートのボリュームがしきい値より下がる

・クローズ

ロング、ショート条件:トレイルストップ

投資戦略テスターのイメージ画像

投資戦略テスターの設定 入力

Pineスクリプトのコード

解説

入力値

long_symbol = input("BITFINEX:BTCUSDLONGS", type=symbol, title="ロング 通貨")
short_symbol = input("BITFINEX:BTCUSDSHORTS", type=symbol, title="ショート 通貨")
per = input(0.3, type=float, step=0.1, title="%(ボリュームの何%をしきい値とするか)")
trail = input(30, type=float, title="トレイル幅")
tick = input(10, type=float, title="ティック幅")

input()で入力する項目を指定します。以下の項目を指定します。
ロング通貨:ロング対象の通貨
ショート通貨:ショート対象の通貨
%:ボリュームがこの%以上、増減したらエントリー
トレイル幅:ドル
ティック幅:XBTUSDは0.1ドル刻みのため、10倍する(あってる?)

ロング、ショートボリュームの習得

// 計算 ------------------------------------
long = security(long_symbol, period, close)
short = security(short_symbol, period, close)

security()でロング銘柄とショート銘柄の値を習得します。

ロング、ショートのしきい値計算

// ロング・ショートしきい値(ボリュームの何%か)
long_th = long / 100 * per
short_th = short / 100 * per

現在のボリュームから入力値で指定した%がしきい値となります。

ロング・ショート判定

// 売買判定
// ロング条件(ロングがしきい値より下がる かつ ショートがしきい値より上がる かつ ポジションなし)
is_long = change(long, 1) < -long_th and change(short, 1) > short_th and pos == 0
// ショート条件(ロングがしきい値より上がる かつ ショートがしきい値より下がる かつ ポジションなし)
is_short = change(long, 1) > long_th and change(short, 1) < -short_th and pos == 0

change()で一つ前の足との差分を習得します。
ロングのエントリー条件:ロングが指定%以上減る かつ ショートが指定%以上増える かつ ポジションなし
ショートのエントリー条件:ショートが指定%以上増える かつ ショートが指定%以上減る かつ ポジションなし

売買箇所

// 売買 ------------------------------------
// テスト期間の判定
if is_test_period()
    // エントリー
    strategy.entry("L", strategy.long, when=is_long)
    strategy.entry("S", strategy.short, when=is_short)
    // クローズ(トレイルストップのみ)
    strategy.exit("Exit L", "L", trail_points=trail * tick, when=pos > 0)
    strategy.exit("Exit S", "S", trail_points=trail * tick, when=pos < 0)

strategy.entry()でロング、ショートのエントリー条件がTrueの場合、エントリーが行われます。
strategy.exit()でクローズします。
条件はトレイル金額 かつ 前の足でポジションをもっている
です。

トレーディングビューの投信戦略テスターでドンチアンチャンネル+トレンドポートフォリオフィルターでエントリー、クローズする

ドンチアン・チャネル・ブレイクアウト(donchian channel breakout)とトレンド・ポートフォリオ・フィルタ(trend portfolio filter)を利用した投信戦略テスターのサンプルコードです。

ラインの色や濃さなどはPineスクリプトがわからなくても設定のスタイルから変更可能です。

投資戦略テスターの内容

・ドンチアン・チャネル・ブレイクアウトとは

価格が過去の期間の高値を上抜けした場合、ロングを入れ、過去の期間の安値を下抜けした場合、ショートをいれます。

・トレンド・ポートフォリオ・フィルタとは

短期SMAと長期SMAを用いており、短期SMAが長期SMAより高い位置にいる場合のみロングを行い、短期SMAが長期SMAより低い位置にいる場合のみショートを行います。

つまり、長期トレンドの方向と一致した方向にブレイクが発生した場合に売買を行います。

まとめると、ロング、ショートの条件は下記となります。

ロングエントリー条件
過去の高値ライン(エントリー用)<終値
+
短期SMAが長期SMAより上
ショートエントリー条件
過去の安値ライン(エントリー用)>終値
+
短期SMAが長期SMAより下
ロングクローズ条件
過去の安値ライン(クローズ用)>安値
ショートクローズ条件
過去の高値ライン(エントリー用)<高値

クローズ判定ではSMAは対象から除外しています。また、エントリー時は終値と比較していましたが、クローズ時は高値、安値と比較しています。
 

投資戦略テスターのイメージ画像

投資戦略テスターの設定 入力


確認用に表示されている高値、安値ラインとSMAの表示は非表示は切り替え可能となっています。

Pineスクリプトのコード

解説

入力値

// 入力値 ------------------------------------
entry_ch_len = input(18, type=integer, title="ブレイク本数 エントリー")
close_ch_len = input(12, type=integer, title="ブレイク本数 クローズ")

sma_src = input(close, title="SMA ソース")
short_len = input(10, type=integer, title="短期 SMA 期間")
long_len = input(20, type=integer, title="長期 SMA 期間")

SHOW_SMA = input(true, title="SMA 表示/非表示")
SHOW_ENTRY = input(true, title="Enty用 高値、安値 表示/非表示")
SHOW_CLOSE = input(true, title="Close用 高値、安値 表示/非表示")
「ブレイクする本数」に指定した数の足の中から最高値、最安値を取得します。
エントリーとクローズで足の長さを変更できます。
「SMA ソーズ」と短期、長期SMAの期間を指定します。
「表示/非表示」は確認用に表示しているSMA、高値ライン、安値ラインの表示制御に利用します。
 

高値、安値の取得

// 高値、安値
entry_up_bound = highest(high[1], entry_ch_len)
entry_down_bound = lowest(low[1], entry_ch_len)
close_up_bound = highest(high[1], close_ch_len)
close_down_bound = lowest(low[1], close_ch_len)

高値、安値を一つ前の足の高値、安値を基準に取得します。
※現在の足を除外したいため
highest()は与えられた過去のバーで最も高い値を返却します。
lowest()は最も安い値を返却します。
エントリーとクローズの高値、安値は指定本数が異なります。

SMAの取得

// SMA
short_sma = sma(sma_src, short_len)
long_sma = sma(sma_src, long_len)

sma()でSMAの値を計算します。

エントリー、クローズ判定

long_entry = entry_up_bound < close and short_sma > long_sma
short_entry = entry_down_bound > close and short_sma < long_sma
long_close = close_down_bound > low
short_close = close_up_bound < high

上から
ロングエントリー:高値ライン(エントリー)<終値 かつ 短期SMA>長期SMA
ショートエントリー:安値ライン(エントリー)>終値 かつ 短期SMA<長期SMA
ロングクローズ:安値ライン(クローズ)>安値
ショートクローズ:高値ライン(クローズ)<高値
となっています。

エントリー、クローズの売買

// 売買 ------------------------------------
// テスト期間内か判定する
if is_test_period()
    // ロング
    strategy.entry("L", strategy.long, when=long_entry)
    strategy.close("L", when=long_close)
    // ショート
    strategy.entry("S", strategy.short, when=short_entry)
    strategy.close("S", when=short_close)

strategy.entry()でエントリーを行っています。
パラメータは先頭から、1.id、2.ロングかショートか、3.いつ行うか
となっています。
3.いつ行うかに設定した値がTrueの場合、エントリーが行われます。
strategy.close()でクローズを行っています。
パラメータは先頭から、1.id、2.いつ行うか
となっています。

BOTのAPIのレートリミット、制限について

BOTトレードを行う際に、考慮する必要がるAPIのレート制限についてです。

APIのレート制限(リミット)とは?

ほとんどのAPIは好き放題に実行できません。
例えば、一定時間内に一定回数以上のアクセスを行うと
サービス提供側のサーバーがアクセス制限を行い
APIで実行したリクエストを処理してくれません。
(レートリミットにかかっているという内容の返事がきます)
つまりレートリミットを超えた場合は、APIから注文を入れても無視されます。

※但し、WebSocket通信など一部の通信方法にはレート制限がかかりません(後述)

 

自分のBOTで、よく利用しているAPIは以下の3つです。

  1. CryptoWatchのAPI(過去の価格取得用)
  2. bitflyerのAPI(注文、ポジション取得用)
  3. BitMEXのAPI(注文、ポジション取得用)

 

・各APIのレート制限は以下です

CryptoWatchのAPIレート制限について

CryptowatchのAPI レート制限は
一定時間で一定回数以内という制限ではなく
CPU処理時間によって制限されます。
CPU処理時間とはサーバーがAPIに対する
レスポンスを返すのに利用したCPUの処理時間です。
Cryptowatchが提供するAPIは何種類かあり、
実行するAPIによってサーバーでの処理の重さが異なります。

Cryptowatchのレートリミット
1時間でサーバーが返事を返すのにかかるCPUの処理時間の合計が8秒を超えた場合に発生します。
この合計時間は1時間毎にクリアされます。

・公式のドキュメントURL
https://cryptowatch.jp/docs/api

残りのCPU処理時間を知りたい場合、下記のURLにアクセスすればわかります。
https://api.cryptowat.ch/
“allowance”の”remaining”が残りCPU処理時間(単位はナノ秒)

bitFlyerのAPIレート制限について

~公式ドキュメントより引用~
API制限
HTTP API は、以下のとおり呼出回数を制限いたします。
Private API は 1 分間に約 200 回を上限とします。
IP アドレスごとに 1 分間に約 500 回を上限とします。

注文数量が 0.01 以下の注文を大量に発注するユーザーは、一時的に、発注できる注文数が 1 分間に約 10 回までに制限されることがあります。
システムに負荷をかける目的での発注を繰り返していると当社が判断した場合は、API の使用が制限されることがあります。ご了承ください。

注文を行うAPIは Private API のため
bitFlyerのレートリミットは 1 分間約 200 回となります。

・公式のドキュメントURL
https://lightning.bitflyer.com/docs?lang=ja

 

BitMEXのAPIレート制限について

~公式ドキュメントより引用~
REST API へのリクエストのレートは、5 分間あたり 300 リクエストに制限されています。 このカウンタは間断なく補充されます。 ログインしていない場合、レート制限は 5 分あたり 150 です。

**使用ツールが投入するエラーの数には十分な注意が必要です!**短時間に多数の 4xx または 5xx が返された場合、お使いの IP は 1 時間禁止されることがあります。 短期間に何度か禁止されると、禁止期間は 1 週間になります。

BOTにてトレードを行う場合、通常ログインしていない状態が想定されるため、BitMEXのAPIレートリミットは5 分間で 150 回となります。

・公式のドキュメントURL
https://www.bitmex.com/app/restAPI#%E5%88%B6%E9%99%90

 

APIレート制限の対象外!?WebSocket通信について

上記APIレート制限の対象外として、WebSocket通信というものがあります。

通常のREST APIは通信毎に、BOTと取引所が接続(コネクション)を繋ぐ処理を行っていますが、WebSocketの場合、一度接続を行うとその接続を繋ぎっぱなしにしてデータのやり取りを行います。

取引所のサーバーの接続処理のコストが減り、APIレート制限の対象外となることから、WebSocket通信で行える処理(価格やポジションの取得など、取引所によって異なる)については、積極的に利用するほうがいいといえます。

但し、そもそも高頻度で取引を行う必要がないBOTの場合は利用する必要はありません。処理が複雑になりやすいためです。

 

まとめ

・CryptoWatchのレート制限

1時間内のCPU処理時間の合計が8秒
同じAPIでも実行タイミングによってCPU処理時間が異なるため、
正確な時間は算出できませんでした。
※アクセス集中してると上がるかも?

・bitflyerのレート制限

1 分間に約 200 回 ≒ 約0.3秒に1回はアクセスOK

・BitMEXのレート制限

5 分間で 150 回 ≒ 2秒に1回はアクセスOK

・WebSocket通信

APIレート制限の対象外となる
高頻度で取引を行うBOTでない場合は利用する必要はない

 

トレーディングビューの投資戦略テスター(Pineスクリプト)で利確、損切りを指定する

以前の投稿で記載した注文ドテンのみの投資戦略テスターを修正して、注文のクローズを利確、損切りで行う投資戦略テスターを作成しました。

過去記事
トレーディングビューの投資戦略テスター(Pineスクリプト)でテスト期間を指定する

 

投資戦略テスターの内容

・エントリー条件
ロング :短期SMAと長期SMAのゴールデンクロス
ショート:短期SMAと長期SMAのデッドクロス

・クローズ条件
ロング :ポジションがロング中 かつ 利確・損切額に価格が到達
ショート:ポジションがショート中 かつ 利確・損切額に価格が到達

過去記事からの修正点は以下の3つです。

  1. 利確、損切りを入力値に追加
  2. ポジションがある場合は、新規の注文を入れない
  3. 注文のクローズを利確、損切りにて行う

また、作成時は下記のチャートで検証しています。

  • 通貨:BITMEX:XBTUSD
  • 時間:1時間

投資戦略テスターのイメージ画像

設定画面(入力)

Pineスクリプトのコード

解説

利確、損切りを入力値に追加

rikaku = input(100, title="利確", type=float)
songiri = input(50, title="損切", type=float)
tick = input(10, title="最小ティックの桁", type=float)

input関数で利確、損切、最小ティックの桁を設定できるようにします。
後のクローズ判定で利用します。

エントリー判定

// 売買判定
// ゴールデンクロス かつ ポジションなし の場合、True
longCondition = crossover(short_sma, long_sma) and pos_size == 0
// デッドクロス かつ ポジションなし の場合、True
shortCondition = crossunder(short_sma, long_sma) and pos_size == 0

ロング判定

  • 「crossover(short_sma, long_sma)」で短期SMA、長期SMAのゴールデンクロスか判定
  • 「pos_size == 0」で現在ポジションを持っていないか判定

ショートエントリー判定

  • 「crossunder(short_sma, long_sma)」で短期SMA、長期SMAのデッドクロスか判定
  • 「pos_size == 0」で現在ポジションを持っていないか判定

クローズ判定

    // ポジションがロング中の時、利確、損切り額に到達したらクローズ
    strategy.exit("Exit L", "L", profit=rikaku*tick, loss=songiri*tick, when=pos_size > 0)
    // ポジションがショート中の時、利確、損切り額に到達したらクローズ
    strategy.exit("Exit S", "S", profit=rikaku*tick, loss=songiri*tick, when=pos_size < 0)

strategy.exit関数で注文をクローズします。

ロングクローズ判定

  • 「profit=rikaku*tick, loss=songiri*tick」で利確、損切を設定(※1)
  • 「when=pos_size > 0」でポジションがロングか判定(※2)

ショートクローズ判定

  • 「profit=rikaku*tick, loss=songiri*tick」で利確、損切を設定(※1)
  • 「when=pos_size < 0」でポジションがショートか判定(※2)

(※1)「profit」に利確を設定し、「loss」に損切を設定します。「*tick」しているのは、そのまま設定すると価格が10分の1になったためです。”XBTUSD”の価格が”XXXX.0″の単位で表示されているため、最小ティックが”0.1″になるということでしょうか。。。

(※2)ポジションがロングかショートか判定することで、同じ足の中で注文がクローズされないようにしています。デメリットとしては大きく価格が変動した場合に、利確、損切額をオーバーします。(最速でも次の足でクローズとなるため、1時間足なら最遅で1時間後となります)

 

トレーディングビューの投資戦略テスター(Pineスクリプト)でテスト期間を指定する

トレーディングビューの戦略テストには、一度に計算できる売買数の上限があります。上限を超えると計算されないため、テスト期間を絞ることで売買数を減らします。

投資戦略テスターの内容

指定したテスト期間内のみ売買を行います。

短期SMAと長期SMAのゴールデンクロス、デッドクロス発生時に売買を行います。

売買はドテンで行うため、ポジションのクローズはありません。

投資戦略テスターのイメージ画像

設定画面(入力)

Pineスクリプトのコード

内容は新規作成時のサンプルコードを修正したものです。

< 修正箇所 >

  • SMAの入力値を設定可能に変更
  • テスト期間の指定内のみ売買するよう変更
  • SMAを表示するように変更(売買箇所確認に利用)

解説

テスト期間の取得
// 開始日
start = timestamp(input(2018, "テスト開始 年"), input(10, "テスト開始 月"), input(1, "テスト開始 日"), 0, 0)    // 時分は0時0分を指定
// 終了日(未来日を指定すると自動的に現在までが期間となる)
end = timestamp(input(9999, "テスト終了 年"), input(1, "テスト終了 月"), input(1, "テスト終了 日"), 0, 0)   // 時分は0時0分を指定

timestamp関数は指定された日のUNIX時刻を返します。
終了日に未来日を指定すると自動的に現在までが期間となります。
timestamp関数の引数では、以下の項目を指定します。

timezone (string) (オプション引数)タイムゾーン
year (integer) 年
month (integer) 月
day (integer) 日
hour (integer) 時間
minute (integer) 分

※タイムゾーンは省略可能です。今回は省略していますが、指定する場合、日本のタイムゾーンは”Asia/Tokyo”です。
 

テスト期間の判定
// テスト期間判定
// 開始日~終了日の期間内か判定する
// 期間内の場合、true.期間外の場合、false.
is_test_period() =>
    iff(time >= start and time >= end, true, false)

テスト期間の判定をする関数を宣言しています。
timeはトレーディングビューが事前に使用している文字(ビルドイン変数)で、こちらで何も設定しなくてもUNIX形式の現在の足の時間が入っています。
※因みに、現在の時刻はtimenowに入っています
時刻が開始日以降 かつ 時刻が終了日以前 の場合、
つまり、開始日~終了日の期間内の場合はTrueが返却されます。

 

実際の判定箇所
// テスト期間内か判定する
if is_test_period()
    if longCondition
        // ロング
        strategy.entry("Long", strategy.long)
    if shortCondition
        // ショート
        strategy.entry("Short", strategy.short)

宣言済のis_test_period()関数を呼び出して、テスト期間内か判定します。
テスト期間内のみ売買を行います。

トレーディングビューでBitfinex ロング ショート比率を表示するインジケーター(Pineスクリプト)

すでに公開されているBitfinexのロング(LONG)、ショート(SHORT)の比率を表示するインジケーターを修正して通貨を変更できるようにしました。

ラインの色や濃さなどはPineスクリプトがわからなくても設定のスタイルから変更可能です。

インジケーターの内容

Bitfinexのロング、ショート比率を表示します。
ロングが多い場合、緑色、ショートが多い場合、赤色でグラフを表示します。通貨は設定で変更可能となっています。

インジケーターのイメージ画像

設定画面(入力)

通貨の選択例です。
・BTC
BITFINEX:BTCUSDLONGS
BITFINEX:BTCUSDSHORTS
・ETH
BITFINEX:ETHUSDLONGS
BITFINEX:ETHUSDSHORTS
・XRP
BITFINEX:XRPUSDLONGS
BITFINEX:XRPUSDSHORTS
など

設定画面(スタイル)

Pineスクリプトのコード