![見出し画像](https://assets.st-note.com/production/uploads/images/117609962/rectangle_large_type_2_5f33ac68f9af29798a20e889df410384.png?width=1200)
自分の考えたトレードアイデアを検証する方法
今回は久しぶりの単発記事です。
内容については下記のツイートに関するようなもので、
「Tradingviewをもっと色々活用してみよう」
みたいな感じです。
思い付いたトレードアイデアが結果出るかどうかをpineスクリプト勉強しがてらTradingviewのインジで可視化してるんだけど、もう一要素足せば精度上がる感じなの沢山あるんだよな…
— ぶるすな (@BlueSnyaiper) September 27, 2023
気が向いた時にでもどっかに置いてみるか。
このnoteを読むことで、Tradingviewを今よりももう少し活用できるようになるかなって感じの雑記。
例えばこんな感じのやつ↓
何となくご飯食べながらストラテジーテスターに突っ込んでみたけどTradingviewでこんなのも出せたのね。
— ぶるすな (@BlueSnyaiper) September 29, 2023
あれ、今日もサボってしかいないぞ…
そんな前乙お昼。 https://t.co/Ip8jKvWAG0 pic.twitter.com/LjbinoXAv3
あとはいくつかトレードアイデアを載せてあります。
使えるかはまだ検証中だけど、頻繁にトレードアイデアを作るものの保存するのが苦手なのでメモ帳代わりにしようかなと思ってます。
良さそうなのを思い付いたら増やす予定だけど、それ自体には期待はしないで下さい。
はじめに
「トレードアイデアを検証したいならMT5なりでEA作ってバックテストすればいいじゃん」
って言う方、それは正しいです。
そのスキルがあればそうした方が絶対いいです。
しかしながら、僕みたいに少し知識はあるけど全て自分で作り上げるスキルがなかったり、外注して作るにしてもお金出して作った結果、全く使えなくてお金が無駄になるみたいなケースはあるかと思います。
そんな時にTradingviewなら比較的簡単にタダで売買シグナルを表示する方法があるので、その方法を共有してみようかなと思った感じです。
Tradingviewってなんぞや?
いまさら説明不要だとは思いますが、Tradingviewはチャートツールです。
知らない人は下記リンクも参照。
Tradingviewの何がいいの?
メリットはいくつかあるのですが、自分に取ってのメリットは下記。
同期してくれてスマホでもパソコンでもどっちでも同じチャートが使える
色々なインジケーターを簡単に組み合わせて使うことができる
VPSなどを使用しなくてもアラートを簡単にスマホに通知できる
今回の記事は主に2と3を使いたいって人向け。
あとはEAを作ってみたいけど、まずは自分の考えるロジックや売買シグナルが本当に有効かどうか可視化したい人。
カスタムインジケーターの作り方
Tradingviewのカスタムインジケーターを作る場合の共通操作を説明します。
①TradingViewにログインし、チャート画面を開きます。
②チャート画面下にある「Pineエディタ」をクリックします。
![](https://assets.st-note.com/img/1696056270379-eC44Xr3plV.png?width=1200)
③起動時に書かれているコードはとりあえず全消しします。
![](https://assets.st-note.com/img/1696056269344-z36ruRiMAf.png?width=1200)
④PineScriptでコードを書き、コードが書けたらスクリプトを保存して、チャートに適用します。
基本はこれだけ。
「いやいや、そもそもPineスクリプトってなんだよ!そんなの分かんねーよ!!」
って人もコード事例を簡単に参照する方法があるので大丈夫です。
例えばVWAPのコードはこんな感じ。
//@version=5
indicator(title="Volume Weighted Average Price", shorttitle="VWAP", overlay=true, timeframe="", timeframe_gaps=true)
hideonDWM = input(false, title="Hide VWAP on 1D or Above", group="VWAP Settings")
var anchor = input.string(defval = "Session", title="Anchor Period",
options=["Session", "Week", "Month", "Quarter", "Year", "Decade", "Century", "Earnings", "Dividends", "Splits"], group="VWAP Settings")
src = input(title = "Source", defval = hlc3, group="VWAP Settings")
offset = input.int(0, title="Offset", group="VWAP Settings", minval=0)
BANDS_GROUP = "Bands Settings"
CALC_MODE_TOOLTIP = "Determines the units used to calculate the distance of the bands. When 'Percentage' is selected, a multiplier of 1 means 1%."
calcModeInput = input.string("Standard Deviation", "Bands Calculation Mode", options = ["Standard Deviation", "Percentage"], group = BANDS_GROUP, tooltip = CALC_MODE_TOOLTIP)
showBand_1 = input(true, title = "", group = BANDS_GROUP, inline = "band_1")
bandMult_1 = input.float(1.0, title = "Bands Multiplier #1", group = BANDS_GROUP, inline = "band_1", step = 0.5, minval=0)
showBand_2 = input(false, title = "", group = BANDS_GROUP, inline = "band_2")
bandMult_2 = input.float(2.0, title = "Bands Multiplier #2", group = BANDS_GROUP, inline = "band_2", step = 0.5, minval=0)
showBand_3 = input(false, title = "", group = BANDS_GROUP, inline = "band_3")
bandMult_3 = input.float(3.0, title = "Bands Multiplier #3", group = BANDS_GROUP, inline = "band_3", step = 0.5, minval=0)
if barstate.islast and ta.cum(volume) == 0
runtime.error("No volume is provided by the data vendor.")
new_earnings = request.earnings(syminfo.tickerid, earnings.actual, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_dividends = request.dividends(syminfo.tickerid, dividends.gross, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
new_split = request.splits(syminfo.tickerid, splits.denominator, barmerge.gaps_on, barmerge.lookahead_on, ignore_invalid_symbol=true)
isNewPeriod = switch anchor
"Earnings" => not na(new_earnings)
"Dividends" => not na(new_dividends)
"Splits" => not na(new_split)
"Session" => timeframe.change("D")
"Week" => timeframe.change("W")
"Month" => timeframe.change("M")
"Quarter" => timeframe.change("3M")
"Year" => timeframe.change("12M")
"Decade" => timeframe.change("12M") and year % 10 == 0
"Century" => timeframe.change("12M") and year % 100 == 0
=> false
isEsdAnchor = anchor == "Earnings" or anchor == "Dividends" or anchor == "Splits"
if na(src[1]) and not isEsdAnchor
isNewPeriod := true
float vwapValue = na
float upperBandValue1 = na
float lowerBandValue1 = na
float upperBandValue2 = na
float lowerBandValue2 = na
float upperBandValue3 = na
float lowerBandValue3 = na
if not (hideonDWM and timeframe.isdwm)
[_vwap, _stdevUpper, _] = ta.vwap(src, isNewPeriod, 1)
vwapValue := _vwap
stdevAbs = _stdevUpper - _vwap
bandBasis = calcModeInput == "Standard Deviation" ? stdevAbs : _vwap * 0.01
upperBandValue1 := _vwap + bandBasis * bandMult_1
lowerBandValue1 := _vwap - bandBasis * bandMult_1
upperBandValue2 := _vwap + bandBasis * bandMult_2
lowerBandValue2 := _vwap - bandBasis * bandMult_2
upperBandValue3 := _vwap + bandBasis * bandMult_3
lowerBandValue3 := _vwap - bandBasis * bandMult_3
plot(vwapValue, title="VWAP", color=#2962FF, offset=offset)
upperBand_1 = plot(upperBandValue1, title="Upper Band #1", color=color.green, offset=offset, display = showBand_1 ? display.all : display.none)
lowerBand_1 = plot(lowerBandValue1, title="Lower Band #1", color=color.green, offset=offset, display = showBand_1 ? display.all : display.none)
fill(upperBand_1, lowerBand_1, title="Bands Fill #1", color= color.new(color.green, 95) , display = showBand_1 ? display.all : display.none)
upperBand_2 = plot(upperBandValue2, title="Upper Band #2", color=color.olive, offset=offset, display = showBand_2 ? display.all : display.none)
lowerBand_2 = plot(lowerBandValue2, title="Lower Band #2", color=color.olive, offset=offset, display = showBand_2 ? display.all : display.none)
fill(upperBand_2, lowerBand_2, title="Bands Fill #2", color= color.new(color.olive, 95) , display = showBand_2 ? display.all : display.none)
upperBand_3 = plot(upperBandValue3, title="Upper Band #3", color=color.teal, offset=offset, display = showBand_3 ? display.all : display.none)
lowerBand_3 = plot(lowerBandValue3, title="Lower Band #3", color=color.teal, offset=offset, display = showBand_3 ? display.all : display.none)
fill(upperBand_3, lowerBand_3, title="Bands Fill #3", color= color.new(color.teal, 95) , display = showBand_3 ? display.all : display.none)
これを誰でも簡単に参照する方法があります。
いくつかコードを見たらあとはそれをくっつけるだけ。
やり方を知らない人はこのnoteを読む価値はあるかもしれません。
ちなみに全然特別な方法じゃないです。
注意事項
このnoteにはトレードアイデアがいくつか載っていますがそのまま使えば儲かるものではありません。
また、返金はできません。
きちんと買ってくれた人に不利益ですので、無断転載、複製等もご遠慮下さい。
アイデアその1
パッと思いついて作ってみたインジケーター。
詳しいロジックは後ほど。
4時間足の可視範囲ではいいところを捉えているような気がする。
![](https://assets.st-note.com/img/1695861676038-2yqZeHPDya.png?width=1200)
他の時間足で見てみるとこんな感じ。
1時間足でみるとトレンドに巻き込まれてひたすらやられている部分がある(左端の方)
![](https://assets.st-note.com/img/1695861647364-KyIPKWxw4n.png?width=1200)
これだとボロボロなので、別のファクターを加える必要がありそう。
「4時間足だけで使えばいいのでは?」となるものの、フラクタル構造を意識すれば結局どの時間足でもやられるタイミングは出てくる気がする。
トレンドフィルターとしてADX/DMIを入れて精度を上げるか、割り切って決済ロジックでカバーするか。
![](https://assets.st-note.com/img/1695869845743-EW5RqbDfqx.png?width=1200)
期間を変えて見ると幾分マシになるけど、後出しで合わせたに過ぎないし、トリガーにしてナンピンを組めばおそらくまぁまぁいい成績は出るだろうけど、結局スーパートレンドでは巻き込まれるので難しいところ。
ここから先は
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?