アルゴジェネレータードキュメント


# アルゴジェネレーターとは？
 [QuantX Factory](https://factory.quantx.io/)で提供する**アルゴジェネレーター**は、Pythonの知識がなくてもアルゴリズムを開発できるようにしたサービスです。

アルゴジェネレーターでは、以下の４項目を選択するだけで様々な投資アイデアを簡単に形にできます。
１、銘柄（日本市場の全銘柄）
２、売買判断の基準となるテクニカル指標（複数の指標の組合せ可）
３、注文の出し方（何株単位で売買するか、など）
４、損切・利益確定の基準

# 仕様方法・手順について

まず、[QuantX Factory](https://factory.quantx.io/) にログインします。[QuantX Store](https://quantx.io) のアカウントをお持ちの場合、同じアカウントでログインできます。アカウントがなければ新規登録してください。

ログイン後、**アルゴリズム一覧**を選択します。
パソコンなどの場合にはヘッダーから、スマートフォンなどの場合にはヘッダーの三本線のメニューから選択できます。

アルゴリズム一覧画面に進んだら、**新規プロジェクトを作成**でアルゴジェネレーターを選択してください。


<img width="718" alt="スクリーンショット_2019-09-18_13_54_20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/a7eaf398-03dd-0982-9e1d-011bb4cf928d.png">

<img width="1440" alt="スクリーンショット_2019-09-18_13_56_14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/97a74255-c119-7fbe-14a2-3ba5c57c3233.png">




## 1. 銘柄選択
アルゴジェネレーターでは、最初に自分の売買したい銘柄を選択することから始まります。

左のタブの **「ターゲット選択」** を選ぶことで、銘柄選択画面が表示されます。

<img width="1440" alt="スクリーンショット_2019-09-18_13_57_12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/a7dff295-37c4-3915-0839-41de56199035.png">


銘柄選択の仕方にはふたつあり、**「テーマから選択」** では、あらかじめ登録されたテーマに沿った銘柄を一括で選択できます。

<img width="1440" alt="スクリーンショット_2019-09-18_13_56_23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/2ae75595-92ee-93bc-e4de-0dad6da1815d.png">


また、下の **「個別銘柄追加」** に証券コードを入力することで個別に銘柄を選択できます。

<img width="1440" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/865e7f33-eaf4-589f-ac97-46e766064a53.png">

<img width="1440" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/28ff9611-af7f-7536-58a8-8fa2e538aa2c.png">


自分が選択した銘柄は、**「登録された銘柄」** で証券コードから確認が出来ます。消去したい証券コードがある場合には、証券コードの隣にあるバツをクリックすることで選択を解除できます。


## 2. 売買シグナル作成
銘柄を選択したら、次は売買シグナルを作成します。
左側のタブで **「売買シグナル作成」** を選択しましょう。

<img width="1440" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/a3f8caf0-fed9-86a3-56f7-99791cc593e2.png">


アルゴリズムジェネレーターで作れるアルゴリズムは、**設定したテクニカル指標に基づいて売買シグナルを生成します**。

テクニカル指標は複数のものを組み合わせることが可能で、組み合せ方も、**複数が同時に成り立つ時に売買する(AND)／いずれか一つが成り立つ時に売買する(OR)**の両方の設定が可能です。

<img width="1440" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/e54ce2f4-0d4d-4861-ca29-f8276e65f9ec.png">


<u>複数の条件が同時に成り立つ時</u>に売買したい場合には、**＋新しいシグナルをANDで組み合わせる**をクリックし条件を追加します。

たとえば「RSIが20より小さい、かつ、モメンタムが０より大きい」時に買い注文を出すように設定すると、下記のようになります。

<img width="1440" alt="スクリーンショット 2019-09-18 20.46.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/07874521-ea88-4bcf-af37-82d5e352cd46.png">


一方、<u>複数の条件のいずれかが成り立つ時</u>に売買したい場合には、**＋新しいシグナルをORで組み合わせる**をクリックし条件を追加します。


たとえば「RSIが20より小さいとき、かつ、モメンタムが０より大きい」または「サイコロジカルラインが30より小さいとき」に買い注文を出すように設定すると、下記のようになります。


<img width="1440" alt="スクリーンショット 2019-09-18 20.47.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/413bab92-854c-4ea3-13f0-de4d242773f7.png">


<u>一度設定した売買シグナルの詳細を変更したい場合</u>には、**鉛筆のマークから編集**が可能です。
<img width="1440" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/c300d9aa-c1bd-bfc4-8edd-858c5797086d.png">

また、<u>設定した売買シグナルを削除したい場合</u>には、右側にある **ゴミ箱で削除**できます。

<img width="1440" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/c9382577-4952-1136-5d23-e4649179fc2a.png">


## 3. シグナルアクション設定
売買シグナルの設定が済んだら、注文の出し方を決めます。これは、たとえば「今が買い」だと判断したら、「何株単位で買うか」や「どの程度の金額分だけ買うか」などを決めることです。

左側のタブで **「シグナルアクション設定」** を選択しましょう。

<img width="1439" alt="16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/46a83424-d466-ae2e-f534-c7213d7c9bb5.png">


売買の単位数を指定する「数量指定」や売買の金額割合を指定する「総資産割合指定」など、複数の条件から選んで設定することができます。

具体的な設定の仕方は、下部[「シグナルアクションの設定の仕方」](https://qiita.com/quantxtrade/items/45332771e875102e35b5#%E3%82%B7%E3%82%B0%E3%83%8A%E3%83%AB%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AE%E4%BB%95%E6%96%B9)で別途説明しています。

<img width="1440" alt="１４.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/cc6553a2-4d66-091d-1500-5e755c26506c.png">



## 4. 損切り・利確ライン設定

最後に、損切りや利益確定の条件の設定を行います。
左側のタブで **「損切り利確ライン設定」** を選択しましょう。
<font color="red">**損切は－の値、利益確定は＋の値を入力します!**</font>


<img width="1440" alt="15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/99aeb38f-f8e4-5da8-c749-1d51e5b31fd8.png">


株価がどの程度下がったら損切りをし、どの程度上がったら利益確定を行うのかについて、数値で設定します。

<img width="1440" alt="13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/626c69f3-f727-578e-9bc8-293e514d146b.png">


## 5.実行（バックテスト）
以上４項目の設定が終了したら、**バックテスト**（設定した条件で過去の相場に合わせて取引をした場合に、どのような結果となるかのシミュレーション）を実行しましょう。
バックテストを行うことで、開発したアルゴリズムの性能を評価できます。

まず開発したアルゴジェネレーターを保存します。画面左上の「保存」「テスト」「Clone」と並んでいる部分の「保存」をクリックすると保存できます。画面右上に「Success」と出てくれば保存は成功です。
その後「テスト」をクリックしましょう。

<img width="1440" alt="17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/d8c2fc8c-cdc2-4b35-8a0b-21ffc689cc14.png">



コード画面（書くことはできません）に遷移しますので、バックテストの条件として**初期資金と期間を設定してテスト**しましょう。


<img width="1440" alt="20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/cf2feba4-7eab-517a-b643-94184f94e334.png">



下のようなグラフが表示されればバックテストは成功です!!


![](https://i.imgur.com/kPgDHiv.png)



# 売買シグナルの対応指標と引数について
アルゴジェネレーターの「売買シグナル作成」では、以下のテクニカル指標を組み合わせることができます。

## 平均乖離率分析
![](https://i.imgur.com/Ol5m6Ku.png)
終値や始値のような株価とその移動平均線がどれだけ乖離してるかを見る指標です。
乖離した値は平均に収束するため大きく乖離したところが売買シグナルのタイミングとなります。

平均乖離率の導出
$$乖離率=\frac{終値など}{移動平均線}$$

基本的に乖離率が負の値で買いの閾値、正の値で売りの閾値を取ります。
乖離率が15%を超えることはほとんどないため15%以内の値を閾値として設定しましょう。

**買いシグナルの入力例**
![](https://i.imgur.com/zILjZNp.png)

**売りシグナルの入力例**
![](https://i.imgur.com/FohUnmB.png)

## RSI
![](https://i.imgur.com/LvrxSfV.png)

RSIは上昇変動と下落変動のどちらの勢いが強いのか計測しようとする指標です。
この値が大きいと相場で買われ過ぎ、小さいと相場で売られ過ぎであると判断することができます。

RSIの閾値が20〜30で買い注文、70〜80で売り注文をするのが普通です。

**買いシグナルの入力例**
![](https://i.imgur.com/82sLsrv.png)

**売りシグナルの入力例**
![](https://i.imgur.com/pFTB6d1.png)


RSIの導出

$$RSI=\frac{A}{A+B}\times100$$
- A:計算期間内の値上がり幅の合計
- B:計算期間内の値下がり幅の合計

一般的に20〜30%を下回ったら買い、70〜80%を上回ったら売りと言われています。



## RCI
![](https://i.imgur.com/74fykts.png)

RCIは相場の過熱感を測り、現在の株価が割安か割高か判断するために用いられるテクニカル指標です。
日付と株価それぞれに順位をつけ、両者の相関関係を評価します。

RCIの導出

$$RCI = \Bigl(1 - \frac{6d}{n(n^2-1)}\Bigr) * 100$$

- d:日付の順位と価格の差を2乗し、合計した数値
- n:期間

RCIは-100~100の間を動く連続値となります。
100の場合、直近になるにつれて株価が上昇している状態にあり、上昇トレンドであることを意味します。
反対に、-100の場合、直近になるにつれて株価が下落している状態にあり、下落トレンドであることを意味します。
一般的にRCIが-80〜-90％を超えたら買い、80〜90％を超えたら売りと判断します。

**買いシグナルの入力例**
![](https://i.imgur.com/geVB268.png)

**売りシグナルの入力例**
![](https://i.imgur.com/fYKcsig.png)

## MACD
![](https://i.imgur.com/SuCnjO9.png)
MACDは移動平均線を進化させて、より精度の高い分析を行うために開発されたテクニカル分析です。MACDは単純移動平均とは異なり、指数平滑移動平均というものを用います。

MACDの導出


$$指数平滑移動平均＝\frac{1日目の終値+2日目の終値+・・・n日目の終値×{2}}{n日間+1日}$$


$$MACD＝短期の指数平滑移動平均－長期の指数平滑移動平均$$

$$シグナル＝MACDの単純移動平均線$$


MACDがシグナルを下から上へクロスしたポイント（ゴールデンクロス）が買いサインとなり、反対にMACDがシグナルを上から下へクロスしたポイント（デッドクロス）は売りサインになります。

アルゴジェネレーターでは以下の条件を2つ満たした時シグナルを出します。

**買いの場合**
  1.macdがmacdsignalを下から上に抜いた時
  2.macdsignalの傾きの絶対値が１より大きく、抜いた時のmacdの傾きがmacdsignalに対し5倍より大きい時
  
**売りの場合**
  1.macdがmacdsignalを上から下に抜いた時
  2.macdsignalの傾きの絶対値が１より大きく、抜いた時のmacdの傾きがmacdsignalに対し5倍より大きい時
  
傾きによる条件が追加されているため、単なるゴールデンクロス、デッドクロスではシグナルが出ない時があります。

**買いシグナルの入力例**
<img width="599" alt="macd.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/ee4f4fc5-5867-884d-8119-f8e1452a5826.png">


**売りシグナルの入力例**
<img width="599" alt="macd.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/ee4f4fc5-5867-884d-8119-f8e1452a5826.png">

パラメータの入れ方は同じですが、自動で買いはゴールデンクロス、売りはデッドクロスになります。

## スローストキャスティクス 
![](https://i.imgur.com/JshZQzN.png)
ストキャスティクスとは一定期間の高値と安値を活用して、株価の「売られすぎ」、「買われすぎ」を判断するための指標の一つです。直近の終値が一定期間の高値および安値と比較して、どの位置にあるかで算出されます。
後述で説明するファストストキャスティクスとは使用するラインが異なります。

スローストキャスティクス の導出

$$％K=\frac{直近の終値-過去n日間の最安値}{過去n日間の最高値-過去n日間の最安値}\times100$$

$$％D = m日の％Kの単純移動平均$$

$$Slow％D = x日の％Dの単純移動平均$$

Slow％Dが0～20％にある時は、売られすぎと見て買いと判断します。また、同時に％DラインがSlow％Dを下から上に抜ける（ゴールデンクロス）が起こった時、強い買いシグナルと判断します。
Slow％Dが80～100％にある時は、買われすぎと見て売りと判断します。また、同時に％DラインがSlow％Dを上から下に抜ける（デッドクロス）が起こった時、強い売りシグナルと判断します。

**買いシグナルの入力例**
![](https://i.imgur.com/t5rqspz.png)


**売りシグナルの入力例**
![](https://i.imgur.com/jYD3U2t.png)


## DMI

![](https://i.imgur.com/vp0KykK.png)
DMIは、終値の比較ではなく、当日の高値安値が前日の高値安値に比べてどちらが大きいかということを基準に相場の強弱を判断します。株価が上昇トレンドの場合は、前日の高値を当日の高値が更新することが多いことや、株価が下降トレンドの場合は、前日の安値を当日の安値が更新することが多いことなどによりトレンドが変化することを利用したものです。DMIにはDIp,DIm,ADX,ADX-Rの4本の線を用いてシグナルを出します。

- DIp(+DI)
    $$DIp ＝ DMp ÷ TR$$

    DMp ＝ 当日の高値 – 前日の高値

    TR ＝
    ・当日の高値 – 当日の安値
    ・当日の高値 – 前日の終値
    ・前日の終値 – 当日の安値
    の中から最大となるものを使います。

- DIm(-DI)

    $$DIm ＝ DMm ÷ TR$$

    -DM ＝ 前日の安値 – 当日の安値

    TR ＝
    ・当日の高値 – 当日の安値
    ・当日の高値 – 前日の終値
    ・前日の終値 – 当日の安値
    の中から最大となるものを使います。
    
- ADX

    $$ADX ＝ DXの平均値$$

    DX ＝ |（DIp）－（DIm）| ÷ DIの合計

    ※ADXの計算期間が14日の場合は、14日分のDXを足して14で割る

- ADX-R

    $$ADX-R ＝ ADXの移動平均$$

    ADX-R ＝ (当日のADX+N日前のADX)÷２


**買いシグナルの入力例**
![](https://i.imgur.com/RrGlOWL.png)

**売りシグナルの入力例**
![](https://i.imgur.com/s7p5Lyy.png)



## ボリンジャーバンド

![](https://i.imgur.com/hR5LevD.png)
ボリンジャーバンドは標準偏差を利用した指標になります。

ある一定の確率で値動きが収まりやすいレンジを『σ（シグマ）』と呼び、平均値からみて上のレンジを＋1σ、下のレンジを－1σと呼びます。これを2倍したものが＋2σ・－2σになります。

正規分布の理論によれば、この＋1σ、－1σに収まる確率は約68.2％、＋2σから－2σに収まる確率は約95.4％です。

なので2σを売買シグナルの閾値として扱う人が多いようです。


アルゴジェネレーターでは、終値と上バンド／下バンドそれぞれとの乖離率を計算し、終値を下バンドで割ったものが1.002を下回れば買い、終値を上バンドで割ったものが0.99を越えれば売りというシグナルの出し方をしています。

**買いシグナルの入力例**
![](https://i.imgur.com/rxxsnbc.png)

**売りシグナルの入力例**
![](https://i.imgur.com/AB2juoq.png)

## モメンタム

![](https://i.imgur.com/5GznHSv.png)

モメンタムとは、相場の勢いや方向性を判断するオシレータ系指標で、当日の株価からｎ日前の株価を引いて求められます。

モメンタムの導出

$$モメンタム=現在の株価-過去の株価$$

株価が上昇傾向にあるときはモメンタムは正の値を取ります。株価上昇の勢いが大きいほどモメンタムの値も大きくなります。逆に、株価が下落傾向にあるときはモメンタムは負の値を取ります。株価下落の勢いが大きいほどモメンタムは大きなマイナスの値を取ります。

**買いシグナルの入力例**
![](https://i.imgur.com/Z2lNDHa.png)

**売りシグナルの入力例**
![](https://i.imgur.com/mxsilUt.png)


## サイコロジカルライン

![](https://i.imgur.com/VzSlhe7.png)

サイコロジカルラインとは、人間の心理に着目したテクニカル指標です。
株価が何日も連続して上昇すると、「そろそろ上昇が止まるのではないか」と考える人が増え、実際に上昇が止まることが多くなります。逆に、株価が何日も連続して下落すると、「そろそろ上がるのでは」と考える人が増え、実際に上昇に転じることが多くなります。

そこで、サイコロジカルラインでは、ある期間のうち、株価が上昇した日数の割合を求めて、売買を判断します。

$$サイコロジカルライン=\frac{計算対象期間の株価上昇日の日数}{計算対象期間の日数}\times100$$

ここでの計算期間は、12日にするのが一般的です。
例えば、12日中9日株価が上昇した場合には、サイコロジカルラインは75%となります。
サイコロジカルラインが70〜80%だと売り、20〜30%だと買いと一般的に判断されます。

**買いシグナルの入力例**
![](https://i.imgur.com/hRQMYBu.png)

**売りシグナルの入力例**
![](https://i.imgur.com/d2YqmUk.png)

## ROC

![](https://i.imgur.com/DH3hjTe.png)
ROCはモメンタムを改良したもので、株価の高低に関わらず使うことができます。

ROCの導出
$$ROC = \frac{現在の株価 - 過去の株価}{過去の株価} × 100$$

ROCの期間は10,15,20,25日が多いそうです。
一般的に短期間で急激に株価が上がったり下がったりすることはないためROCの値が変わることもあまりありません。
ROCが+20%だと極端に高いので売り、-20%だと極端に低いので買いという判断ができます。(頻度は少ないのでシグナル回数は少なめ)
ROCがゼロラインを上抜けしたら買い、下抜けしたら売りとしてシグナルを出すという使い方もできます。

**買いシグナルの入力例**
![](https://i.imgur.com/wD1XMVA.png)

**売りシグナルの入力例**
![](https://i.imgur.com/SVEfo5w.png)


## MFI

![](https://i.imgur.com/qgxXp5t.png)
MFIとは、相場の中でお金が買い、売りどちらの方向に流れているのかを株価と出来高から見極めるために作られた指標です。
RSIと似ていますがMFIは出来高も考慮しているという点で違いがあります。

$$TP＝\frac{高値＋安値＋終値}{3}$$

$$MF＝平均株価×出来高$$

$$PMF＝前日比でTPが上昇したn日のMFの合計$$

$$NMF＝前日比でTPが下落または変わらずだったn日のMFの合計$$

これらの式からMFIを出すことができます。
MFIの導出

$$MFI=\frac{PMF}{PMF+NMF}\times100$$

MFIは0〜100までの値を取ります。
RSIのように20〜30%を下回ったら買い、70〜80%を上回ったら売りのタイミングだと判断します。

**買いシグナルの入力例**
![](https://i.imgur.com/NAOIOdK.png)

**売りシグナルの入力例**
![](https://i.imgur.com/0WTtAsM.png)



## パラボリックタイム/プライス

![](https://i.imgur.com/6G8VES7.png)
パラボリックタイム/プライスの「パラボリック」は放物線のことです。株価の上や下に放物線を引き、それと株価がクロスするたびに売買を切り替えていきます。

初期値の設定
以下の手順で「SAR」「EP」「AF」の初期値を決めます。
1. 株価の動きから現在トレンドが上昇なのか、下落なのか判断する。
2. 上昇トレンドなら直近の最安値、下落トレンドなら直近の最高値を探し、「SAR」の初期値とする。
3. 上の手順で上昇トレンドと判断した場合直近の最高値が「EP」、下落トレンドと判断した場合直近の最安値を「EP」とします。
4. 「AF」の初期値を数値で入れます。基本的には0.02とします。

日々のSARの計算
1.  上昇トレンドとしている場合、今日の高値がこれまでのEPより高ければ、それを新たなEPにし、AFに0.02を加算します。また、下落トレンドと判断している場合、今日の安値がこれまでのEPより安ければ、それを新たなEPにしAFに0.02を加算します。

2.　次の式でSARを計算します
$$今日のSAR=(EP-前日(週/月)のSAR)\times{AF}+前日(週/月)のSAR$$


このように計算を続けていくと株価とSARがクロスします。パラボリックタイム/プライスはクロスするたびに売買を切り替えていくという指標になります。
アルゴジェネレーターでは、更新するたびに加算されるAFの値とAFの限界値を設定することができます。

**買いシグナルの入力例**
![](https://i.imgur.com/ZxMmZMM.png)

**売りシグナルの入力例**
![](https://i.imgur.com/utzNd6D.png)

## ファストストキャスティクス

![](https://i.imgur.com/LHXVqKQ.png)
ストキャスティクスとは一定期間の高値と安値を活用して、株価の「売られすぎ」、「買われすぎ」を判断するための指標の一つです。直近の終値が一定期間の高値および安値と比較して、どの位置にあるかで算出されます。
先に説明したスローストキャスティクスとは使用するラインが異なります。アルゴジェネレーターのファストストキャスティクスでは、ゴールデンクロスとデッドクロスで売買シグナルを出します。

ファストストキャスティクス の導出

$$％K=\frac{直近の終値-過去n日間の最安値}{過去n日間の最高値-過去n日間の最安値}\times100$$
$$％D = m日の％Kの単純移動平均$$

上のグラフにもあるように%Kが％Dを下から上に抜いた時にゴールデンクロスとして買いシグナル、%Kが％Dを上から下に抜いた時にデッドクロスとして売りシグナルを出しています。

**買いシグナルの入力例**
![](https://i.imgur.com/TMfHVX5.png)

**売りシグナルの入力例**
![](https://i.imgur.com/mBUlmrI.png)



## CHO

![](https://i.imgur.com/FqgOO1n.png)
CHOはA/Dという金融指標のMACDに相当し、出来高と価格(終値、安値、高値)の関係から相場の売られすぎ、買われすぎを判断する指標になります。
A/DとはAccumulation(集積)/Distribution(離散)の略で
「集積」とは、価格の上昇として現れない買い勢力の増加です。
「離散」とは、価格の下落を伴わない、売り勢力の増加です。
集積や離散はテクニカル指標で価格を伴わないので見てもわかりません。
そこで出来高は価格に先行するという傾向を利用して、価格分析に出来高分析を加えたものがA/Dになります。

計算式は

$$A/D = \frac{(C-L)-(H-C)}{H-L}\times{V}$$

C:当日終値　L:当日安値　H:当日高値　V:当日出来高

となります。

このA/Dの指数平滑移動平均線の差がCHOになります。

CHOの導出

$$CHO = A/Dの３日指数平滑移動平均 - A/Dの10日指数平滑移動平均$$


一般的にゼロラインを下から上に突き抜けると買い、ゼロラインを上から下に突き抜けると売りと判断します。

アルゴジェネレーターでは、CHOの計算の元となる<u>A/Dの短期指数平滑移動平均の算出日数</u>、<u>長期指数平滑移動平均の算出日数</u>、<u>売買シグナルを発生させる基準となる閾値</u>、<u>閾値に対してCHOがどのような位置となる時か</u>を指定して売買シグナルを作成します。

**買いシグナルの入力例**
![](https://i.imgur.com/6v4nc5t.png)


**売りシグナルの入力例**
![](https://i.imgur.com/R6BNmwY.png)

## Williams %R(%Rオシレーター)

![](https://i.imgur.com/eYYjKvQ.png)
Williams %Rは、ある期間内の最高値と最安値の間で、現在の株価がどのあたりの水準に位置しているかを表す指標です。

Williams %Rの導出
$$％R=\frac{A-C}{A-B}\times{100}$$
- A:n日間の最高値
- B:n日間の最安値
- C:当日の終値

Williams %Rは-100~0%までの値を取ります。一般的には、％Rの数値が0％に近いほど高値警戒水準、-100％に近いほど下値警戒水準となります。
％Rの数値が-20％以上で売り、-80％以下が買いとするのが一般的ですが、小さな振動にも敏感に反応するのでダマシが多いことがあります。

**買いシグナルの入力例**
![](https://i.imgur.com/btaL7FD.png)


**売りシグナルの入力例**
![](https://i.imgur.com/PYq7fPP.png)


## 新値足

![](https://i.imgur.com/GESVWKT.png)
新値足は、終値が直近の最高値（または最安値）を更新した時だけ新たな線を追加していくというものです。
新値足の売買のタイミングの判断は非常にシンプルで陽線（上のグラフだと赤い線）に変わったら買い、陰線（上のグラフだと青い線）に変わったら売りと判断します。
売買タイミングが少し遅めに出るのが欠点でもあります。

アルゴリズムジェネレーターでは上回った瞬間に買い、下回った瞬間に売りとするのが一般的な使い方になります。

**買いシグナルの入力例**
![](https://i.imgur.com/Bk4KIDF.png)

**売りシグナルの入力例**
![](https://i.imgur.com/IRZhxYW.png)


## 篠原レシオ

![](https://i.imgur.com/NqkPRmh.png)
篠原レシオは株価の動きを「エネルギー」や「人気」と考えて売買タイミングを判断する指標です。
篠原レシオでは「Aレシオ」と「Bレシオ」の二つの指標を使って売買タイミングを判断します。Aレシオはエネルギー、Bレシオは人気を表す指標で、それぞれ以下の式で計算します。
$$Aレシオ＝\frac{\sum_{i=1}^n(H-O)}{\sum_{i=1}^n(O-L)}\times{100}$$
$$Bレシオ＝\frac{\sum_{i=1}^n(H-C)}{\sum_{i=1}^n(C-L)}\times{100}$$
O:当日の始値　C:当日の終値　H:当日の高値　L:当日の安値

Aレシオは100%を中心に上下します。60%くらいまで下がれば、株価に下がりすぎ感がある状態と言えます。また150%を超えてくると株価に過熱感がある状態と言えます。
Bレシオも100%を中心に上下します。株価の動きがゆるやかな時はAレシオと似たような動きをします。一方、株価が激しく上下するとAレシオと比べてBレシオが大きく動く傾向があります。

**買いシグナルの入力例**
![](https://i.imgur.com/SGhgxzH.png)


**売りシグナルの入力例**
![](https://i.imgur.com/B551HqN.png)
## 平均足

![](https://i.imgur.com/Juj1343.png)
平均足は、陽線（または陰線）が連続しやすいという特徴があり、トレンドの転換を判断しやすいと言えます。
平均足では、個々のローソク足の四本値として、実際の株価をそのまま使わずに、手を加えた値を使います。通常のローソク足の始値/高値/安値/終値をそれぞれCO/CH/CL/CCで表し、平均足の始値/高値/安値/終値をそれぞれHO/HH/HL/HCで表すとすると、以下のように表されます。

$$HO = \frac{1本前のHO+1本前のHC}{2}$$
$$HC = \frac{CO+CH+CL+CC}{4}$$
$$HH = HO/HC/CHの最大値$$
$$HL = HO/HC/CLの最小値$$
ただし、チャートの先頭では、1本前のデータがないのでHOは計算できず、2本目から計算します。また、2本目のHOでは、1本前のHOが決まっていないので、上の計算式の代わりに、1本前のローソク足のCO/CH/CL/CCの合計を4で割った値にします。

アルゴリズムジェネレーターでは、陰線から陽線に変わったタイミングで買い、陽線から陰線に変わったタイミングで売りと判断するような仕様になっています。

**買いシグナルの入力例**


**売りシグナルの入力例**
![](https://i.imgur.com/pbT9TBh.png)


## 一目均衡表（転換線と基準線）

![](https://i.imgur.com/zjPcs27.png)
一目均衡表は「転換線」や「基準線」などの指標や、時間論/波動論/値幅観測論などのさまざまな手法を組み合わせて、相場の姿を観測するといった理論体系になっています。
全て説明することは非常に困難なので基本だけ記述します。

基準線=(26日最高値+26日最安値)÷２
転換線=(9日最高値+9日最安値)÷２

アルゴジェネレーターで実装されているシグナルは、基準線と転換線のクロスで売買シグナルを出しています。

**買いシグナルの入力例**
![](https://i.imgur.com/K8Ui31Y.png)


**売りシグナルの入力例**
![](https://i.imgur.com/1KS587r.png)


## 移動平均線

![](https://i.imgur.com/ho4fNsy.png)

基本的に、短期移動平均線が長期移動平均線を下から上に抜いた時にゴールデンクロスとして買いのシグナル、逆に短期移動平均線が長期移動平均線を上から下に抜いた時にデッドクロスとして売りのシグナルを出します。

アルゴジェネレーターで使用できる移動平均線は三種類です。

- 単純移動平均線(SMA)
    一定期間（ｎ日間）の価格を平均したもので、一般的に移動平均といえば、単純移動平均のことを指します。

```
n日間の単純移動平均
SMA＝（1日目の終値＋2日目の終値＋3日目の終値＋・・・＋N日目の終値）/(N日間)
```
- 加重移動平均線(WMA)
直近の価格に近いものほど重要度を大きくし、n日間の平均を出したもので、（例えば、20日の終値加重移動平均の場合、直近価格を20倍し、古い価格は1倍して平均したものです。）単純移動平均に比べ直近の価格に対しての反応度が高くなっています。

```
n日間の加重移動平均
WMA=（1日目の終値x1+2日目の終値x2+3日目の終値x3+・・・+N日目の終値xN/(1+2+3+・・+N)
```

- 指数平滑移動平均線(EMA)
最近の価格に比重を置き、過去になればなるほど比重を軽くして平均値を決定します。
比重の減少度合いは「平滑化係数」と呼ばれる0と1の間の値を取る定数α（平滑定数）で決められます。 
MACDの計算式によく使われます。

```
n日間の指数平滑移動平均
1日目＝（当日も含め）ｎ日の終値の平均
2日目以降＝前日の指数平滑移動平均＋α×{当日終値-前日の指数平滑移動平均} 
※α（平滑定数）＝2÷（ｎ+1）
```
**買いシグナルの入力例**
![](https://i.imgur.com/2BlQ4fR.png)

**売りシグナルの入力例**

![](https://i.imgur.com/a2pZR0M.png)

## ピボット

![](https://i.imgur.com/wcfkAET.png)
ピボットは前日の株価から今日の買い/売りのポイントを判断するのに使用します。

ピボットは、全部で７種類の指標からできています。
計算方法は以下のようになります。


| 指標 | 計算方法 |
| -------- | -------- |
|P（ピボット）|（前日の高値+前日の安値+前日の終値）÷３|
|B1|P-(前日の高値-P)|
|B2|P-(前日の高値-前日の安値)|
|S1|P+（P-前日の安値）|
|S2|P+（前日の高値-前日の安値）|
|HBOP|S1+（前日の高値-前日の安値）|
|LBOP|B1-（前日の高値-前日の安値）|

株価がB1やB2に近づいたら反発を狙って買い、S1やS2に近づいたら売って利益を確定させます。また、株価がLBOPを下回ったら損切りします。
アルゴリズムジェネレーターでは特に条件を指定することはありません。


**買いシグナルの入力例**
![](https://i.imgur.com/shsjCYx.png)


**売りシグナルの入力例**
![](https://i.imgur.com/JjwvRxp.png)


# シグナルアクションの設定の仕方

数量指定と保有数指定で入力する数値は**単元株数**なので注意が必要です。

## 数量指定
<span style="color: red; ">**（単元株数 × 入力した数値）の枚数分**</span>一度の取引で売買を行います。

例）単元株数１００のトヨタ株(7203)の買いの数量指定を２とすると、買いシグナル点灯後、１００株×２＝２００株買います。

<u>＊入力数値は単元株数のため、ETFなどの数量に注意してください。</u>
単元株数１の日経２２５連動投信(1321)の買いの数量指定を１とすると、買いシグナル点灯後、１株×１＝１株買います。

＊売りシグナルも自然数で入力してください（単元株数ずつで売りたいのであれば１と入力）
例)単元株数１００のトヨタ株(7203)の売りの数量指定を２とすると、売りシグナル点灯後、１００株×２＝２００株売ります。

**実例**

実例として、VCのシグナルアクションに数量指定で買いシグナルの時１、売りシグナルの時１と入力してみます。

**買いシグナル**


**売りシグナル**
<img width="1020" alt="スクリーンショット 2019-09-18 21.06.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/3000117b-d82e-0473-cf83-21ab55270897.png">


ある条件下でのバックテストを行うと下のようなシグナルが出ました。
ここから、余力資金（株を購入できる現金）がある場合、注文し約定します。
赤丸が買いの約定、青丸が売りの約定となっています。

![](https://i.imgur.com/EZ09syV.png)

下が取引の詳細です。
数量指定で買いと売り共に１と入力したので、買いの時は１００株ずつ買い、売りの時は１００株ずつ売っています。

![](https://i.imgur.com/kwUUsTN.png)


## 金額指定 

<span style="color: red; ">**指定された金額の範囲内**</span>で取引を行います。
（基本的に買いのシグナルアクション設定時に使用し、売りは別のものを使用して下さい。）

例）50万円の金額指定を行うと、ある銘柄の買いシグナルが点灯した時50万円以内で買える最大株数を購入します。（1株200円なら2500株分購入します。）

＊売りシグナルの設定に使うこともできますが、推奨致しません。（入力時には自然数を入力してください。）


**実例**

金額指定で買いシグナルの時1,000,000、売りシグナルの時1,000,000と入力してみます。

**買いシグナル**
<img width="1017" alt="スクリーンショット 2019-09-18 21.11.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/40a440d4-7868-b142-7f28-82d46eb03520.png">

**売りシグナル**
<img width="1015" alt="スクリーンショット 2019-09-18 21.11.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/f668e1c4-9ec3-cec9-94cf-975932209ecc.png">


取引の詳細を見てみると、2018年の4月25日に買いシグナルが出た翌日の前場寄成（始値）で、

4,490 × 200 = 898,000 ≦ 1,000,000

と100万円以下で購入できる最大の単元株数の倍数分買っています。

金額指定では、<u>一回の取引の限界取引金額</u>を設定しているので、翌日にシグナルが出た場合には、もう一度100万円以下で購入できる最大の単元株数の倍数分を買っています。

また、2019年の3月4日に売りシグナルが出て翌日、前場寄成（始値）で、4758×300=898,000と100万円以下で購入できる最大単元株売っています。

2019年の3月4日の売りシグナルの場合には、３００株売られています。金額指定では1,000,000であるにもかかわらずこのようなシグナルが出るのは、非常に分かりにくいのですが、
-300×4758=-1,427,400 ≦ -1,000,000
となるためです。

![](https://i.imgur.com/hnp0AhV.png)

**オススメの使い方**

売りの金額指定は保有株を全て売らず、その後の投資機会を失ってしまう可能性もあるので、以下のように保有株数を0にするなどして全て売ってしまうという使い方をしましょう。

**買いシグナル**
<img width="1017" alt="スクリーンショット 2019-09-18 21.11.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/40a440d4-7868-b142-7f28-82d46eb03520.png">

**売りシグナル**
<img width="1018" alt="スクリーンショット 2019-09-18 21.12.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/9ad5be81-c8b5-fd46-d12e-ebac238ec815.png">


投資機会も増え売りシグナルが出たら全て売るようになりました。

![](https://i.imgur.com/H8domEC.png)


## ポートフォリオ比率指定
<span style="color: red; ">**一回の注文限度額を現在の総資産（現金+保有ポジション評価額）に対する割合で設定**</span>して注文を行います。

例として、現在の総資金量が1000万円でポートフォリオ比率指定を20%と設定した場合、ある銘柄の買いシグナルが点灯した時は、1000万×0.2＝200万円以内で買える最大株数を購入します。

初期資金量を少額、かつポートフォリオ比率も低く設定する場合、注文資金量が銘柄の最低注文額を下回って注文できなくなる可能性があるので注意が必要です。

**実例**

ポートフォリオ比率指定で買いシグナルの時20%、売りシグナルの時20%と入力してみます。

**買いシグナル**
<img width="1016" alt="スクリーンショット 2019-09-18 21.14.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/cf77b4d5-d606-55a4-b694-3d5716362d40.png">

**売りシグナル**
<img width="1019" alt="スクリーンショット 2019-09-18 21.14.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/18af69cf-82e3-8a76-3ab9-ff9bb6fb9649.png">


これはソフトバンクグループの株ですが、2018年の2月6日に買いシグナルが出て、200株買っています。

まず、この時のポートフォリオを1000万円とすると、200万円分の取引が可能です。

2月6日の株価は8,369円ですから200株買うと、

8,369×200 = 1,673,800 ≦　2,000,000

となり、200万円以内の条件を満たしているため、200株分の買いの注文をしたということです。

翌日の始値が8,786円なので約定価格は8,786円と表示されています。

また、2018年の3月26日に買いシグナルが出ており、余力資金があるため、再びポートフォリオの20%分の買いを入れています。

2018年の7月13日には売りシグナルが出ています。
この時300株の売りを入れていますが、この時の株価は購入時と比較して上昇しており、総資産（現金+ポジション価値）も増えています。

よって総資産の20%の比率でも以前と比べて取引できる金額は増えているためこのような取引結果となっています。


![](https://i.imgur.com/uWQ1SbG.png)

ポートフォリオ比率指定も金額指定と同様で、売りの際は保有数0などに設定して売りシグナルが出た場合全て売ってしまうのがオススメです。

**総資産割合指定との違い**
ポートフォリオ比率指定は総資産割合指定と異なり、**保有株数の上限がありません**。ポートフォリオ比率指定で10%と設定した場合、<u>総資産の10%分を一回の取引で使える</u>ということになります。つまり、<u>連続で買いシグナルが出た場合、再び総資産の10%分の買いを入れます</u>。

一方、総資産割合指定は**保有株数の上限を決めます**。そのため、連続で買いシグナルが出ても<u>該当銘柄の総資産に対する割合が10%になるように取引を行うので、余力資金があっても注文されないことがあります</u>。


## 保有数指定
<span style="color: red; ">**銘柄の保有総数が（単元株数 × 入力した数値）の枚数分**</span>となるように指定して注文を行います。

例えば、単元株数100の銘柄を現在100株保有している状況で、保有数指定を３とすれば、（100株×３）ー100株＝200株の注文が実行されます。

**実例**

単元株数が100の銘柄で、保有数指定で買いシグナルの時1、売りシグナルの時0と入力してみます。

**買いシグナル**
<img width="1017" alt="スクリーンショット 2019-09-18 21.16.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/c589a678-4383-927f-3a23-a8d708fdbd7c.png">

**売りシグナル**
<img width="1020" alt="スクリーンショット 2019-09-18 21.17.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/20258c92-2743-9936-8e97-8ff20a77434a.png">


下の取引詳細を見ると、買いシグナルが出た時に100株買い、売りシグナルが出た時に100株売っています。

これは、買いシグナルが出た際に、保有株数が単元株数100 × 1となるように買いを入れているためです。
仮に100株保有している時に買いシグナルが出ても、保有株数が100株になるように取引するので注文しません。

売りシグナルが出た時は、保有株数が単元株数100 × 0になるように取引を行います。つまり、保有しないように全て売却するということです。

基本的に売りの保有株数は0にしましょう。<u>1と入れると売りシグナルが出た時に単元株数×１株保有</u>するようになります。

![](https://i.imgur.com/LfLdjfq.png)


## 銘柄総額指定
<span style="color: red; ">**ひとつの銘柄に投資できる最大額を指定**</span>して注文を行ないます。 
例えば、現在この銘柄のポジションが 10万円の状況で 総額を30万と指定すれば、30万ー10万＝20万円以内で購入できる分の注文を行います。

**実例**
銘柄総額指定で、買いシグナルの時100,000（円）、売りシグナルの時0（円）と入力してみます。

**買いシグナル**
<img width="1017" alt="スクリーンショット 2019-09-18 21.19.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/cf8555b1-8e6f-93b5-f92d-0c5be520cd9f.png">

**売りシグナル**
<img width="1017" alt="スクリーンショット 2019-09-18 21.19.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/55da45da-6e12-f633-f600-f1461cc90f93.png">


下の取引詳細をみると、2017年2月1日に買いシグナルが出て600株買っています。これはアステラス製薬の株ですが、2017年2月1日の終値は1,465円ですので、

1,465 × 600 = 879,000 ≦ 1,000,000

と100万円以内で買うことのできる最大の単元株数の倍数分の買いを入れます。

売りの銘柄総額は0円ですので、ポジションを持たないようにするため、売りシグナルが出たら全て売ります。

![](https://i.imgur.com/2usaf0y.png)

基本的に売りの銘柄総額は0にしましょう。例えば1,000,000と指定した場合、売りシグナルが出た時には<u>100万円以内で購入できる単元株数単位の最大数の株式を保有するようになる</u>ため注意しましょう。

## 総資産割合指定
<span style="color: red; ">**銘柄の総保有額が総資産評価額(現金+保有ポジション評価額)に対して指定の割合**</span>となるように注文を行ないます。 
例えば、総資産評価額が1000万円で総資産割合指定を5%とした場合、その銘柄の保有ポジション評価額が50万円以内となるように取引します。

取引によって利益が出たり、損失が出て総資産評価学が変化すると取引の金額も変化していきます。

**実例**

総資産割合指定で買いシグナルの時10(%)、売りシグナルの時0(%)と入力してみます。

**買いシグナル**
<img width="1020" alt="スクリーンショット 2019-09-18 21.21.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/9adc599e-11ae-6b99-8459-3b9e90cd17d2.png">

**売りシグナル**
<img width="1021" alt="スクリーンショット 2019-09-18 21.21.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318319/a660bb3c-4e75-f366-50d8-e1b525d0e2c6.png">


下の取引詳細を見ると、2017年2月1日に買いシグナルが出て600株買っています。

これはアステラス製薬の株ですが、2017年2月1日の終値は1,465円で、この時の総資産は約1000万円です。
そのため、1000万円の10％である100万円以内で買いの注文を入れています。

1,465 × 600 = 879,000 ≦　1,000,000

売りの総資産指定は0%ですので、売りシグナルが出た場合には、ポジションを持たないようにするため保有銘柄を全て売ります。

![](https://i.imgur.com/qXmpm0e.png)

基本的に売りの総資産指定は0にしましょう。10と入れると売りシグナルが出た時に、その銘柄の保有ポジション評価額が総資産の10%の金額内で最大になるように単元株数単位で取引します。

そのため、<u>総資産が増えている場合には、売りシグナルが出ても買い増しが行われる可能性があります</u>。



# 比較演算子について
アルゴリズムのパラメーターの中には比較演算子という項目があります。
この値の違いでバックテストに大きな結果が出てしまいますので、どの指標がどのような動きをするか、どのようなタイミング、値が買いのタイミングなのかを把握して選択しましょう。

![](https://i.imgur.com/XsUlOCL.png)

以上は閾値以上の値全てにシグナルが出ます。下図だと赤い部分に相当します。
より大きいと書いてある場合は閾値を含みません。
逆に以下は閾値以下の値全てにシグナルが出ます。下図だと青い部分に相当します。
より小さいと書いてある場合は閾値を含みません。
上回った瞬間は株価や指標のデータが閾値を下から上に突き抜けた時シグナルが出ます。下図だと赤丸に相当します。
下回った瞬間は株価や指標のデータが閾値を上から下に突き抜けた時シグナルが出ます。下図だと青丸に相当します。
同値だと株価が閾値とぶつかった時にシグナルが出ます。下図だと赤丸と青丸両方に相当します。
![](https://i.imgur.com/wd0Ag2h.png)