今回は、少し扱いにくいstrategy.entry()でピラミッディングした時の挙動について解説する。
今後、このビルトイン関数を扱う場合は今回紹介する挙動を知っていなければ???となること間違いなしなので、ぜひ読んでほしい。では早速!
1、ピラミッディングとは
まず、ピラミッディングとは、
現在のポジションに加えて、さらに買い増し(売り増し)を行うこと
だ。
例えば、下記チャートは始値から99%,98%,97%,96%のラインでロングするようなストラテジーを動作させた際のものだ。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-19-0.21.05-883x1024.png)
このようにLong1からLong4まで、合計4回買い増しを行なっているが、これがピラミッディングだ。
2、strategy.entry()関数の特徴
Pineスクリプトではエントリー時に使用する関数として、
「strategy.entry()」と
「strategy.order()」の
二種類が存在する。
それぞれには、
strategy.entry()関数:ピラミッディング不可
strategy.order()関数:ピラミッディング可
という違いがある。
要するにentryの方は一度ポジションを持つとそのポジションがなくなるまでは再エントリーができなくなる。対してorderの方は条件に合致さえすればいくらでもエントリーする。
例えば、足が陰線の時にエントリーするストラテジーを作成する。
このエントリーをstrategy.entry()とstrategy.order()の両方で試してみると違いがよくわかる。
strategy.entry()関数でエントリーした場合
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-19-0.31.21.png)
陰線は、1、4、5、6とあるが、一度しかエントリーしていない。
(陰線である1の終値でエントリーしていないのは、1の足が確定してからやっと陰線であると確定し、1の足で出された注文は次の足で約定するようになっているため)
strategy.order()関数でエントリーした場合
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-19-0.31.11.png)
対して、orderの方は陰線である1、4、5、6の全てでエントリーしている。(6は次の足でエントリーしているので見えていないが)
以上がentry関数とorder関数の違いだ。
3、strategy.entry()でもピラミッディングが可能
と、ここまで書いてきてなんだが実はstrategy.entry()でもピラミッディングが可能である。
ストラテジー名の右側にある歯車マークをクリックする。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.24.40.png)
すると、以下の画面が出現する。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.25.31.png)
ここで、ピラミッディングという欄があるのでここの数字を増やすことでピラミッディングが可能になる。先ほどのストラテジーで、試しにここを4にすると、
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.27.22.png)
確かにstrategy.entry()関数でもピラミッディングができた。
4、取扱注意!strategy.entry()の挙動まとめ
しかし、扱いには注意する必要がある。
ここで、最初に出した始値から99%,98%,97%,96%のラインでロングするようなストラテジーに戻ろう。こんなやつ↓
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-19-0.21.05-883x1024.png)
指値は、limitというパラメータで設定できる。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.37.59.png)
()の最後にあるlimitの部分で指値注文を実現している。
(1)同じIDなら注文が上書きされる
strategy関数には、注文の際のIDを指定する必要がある。以下のコードであれば、()の最初に登場しているLongがIDとなる。
このIDは特定の注文を取り消したりする際に必要となるものである。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.37.59.png)
そして、まずはこのIDを重複させて注文を出してみた。すると、以下のようになった。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.40.34.png)
少しわかりにくいが、これは4つめの注文が執行されている。
つまり同じ注文IDで、同時に注文を行なった場合、最後の注文が執行される。
(そのため、順番を入れ替えて99%のラインでエントリーするコードを一番下にした場合、これが約定する)
(2)違うIDならピラミッディングしてしまう(同一足の場合)
では、それぞれを違うIDにするとどうだろうか。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.45.00.png)
今回は、それぞれをLong99、Long98、Long97、Long96と名付けた。すると、
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.46.06.png)
普通にピラミッディグした。
これは、それぞれの注文IDが異なり別の注文であると認識されるため注文の上書きがなされないためだ。
(3)違うIDで成り行き注文の場合(同一足の場合)
次に、先ほどのコードから指値limitを外して違うIDでピラミッディングしてみる。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.59.21.png)
結果はこうなった。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.59.03.png)
一番最初の注文しか約定していない。
先ほどとは違い、成行の場合は一番最初の注文しか約定しないので注意だ。
(4)違うIDでも違う足ならピラミッディングできない
では、次に注文する足が変わった場合はどうなるだろうか。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.50.55.png)
今回は、それぞれの足で必ず約定するように指値(limit)は外した。結果はこちら。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-17.51.55.png)
一回しか約定していない。
つまり、同一足か別の足かで処理が変わるということだ。(ちなみに、適当に指値をさしても約定しないのでここでは成行、指値の区別はないようだ)
5、まとめ
つまり、まとめるとこんな表になった。
「ピ」がピラミッディング可能なことを表している。
![](https://yuru-sta.com/wp-content/uploads/2021/05/スクリーンショット-2021-05-21-18.25.00-1024x265.png)
つまり、これから言えることは、
ピラミッディング数の設定は可能だが、必ずそれ以上のポジションを持たないという訳ではない
ということだ。
さらに、いろんなストラテジーを作成するにあたり、この仕様に邪魔されることがあるので注意だ。
では、また!
本記事を気に入っていただけたらブックマークお願いします!また、ツイッターもやってるのでフォローよろしくお願いいたします!
Twitter : makoto(@Makoto_beginner)
また、記事中で不明なことや間違い等ありましたら以下のコメント欄からコメントいただけると幸いです。
皆様のコメントをもとにどこよりもわかりやすいブログを目指していきます。