ゆとり世代の自由研究

勉強が一生終わりません

横ばい局面の株取引

相場師朗先生の教え

 

上げるか、下がるか、横ばいか

B局面(横ばい)→A局面(下降)→B局面(横ばい)→C局面(上昇)

B局面が終わって下げだしてA局面になったら空売り
下がっているA局面から、横ばいにってB曲面になれば空売りを手仕舞う。
横ばいのB曲面からから上に出てC局面になったと思ったら買いを入れる。

これの繰り返しです。

横ばい局面の特徴を理解する。 

・その横ばい局面の特徴を知った上で建玉方法を考える。 

 

 横ばい局面攻略法 

0:横ばい 局面のチャートを探し出す。 

1:チャートを見て、建玉(トレード)を考える。 

2:今度はそのトレードする部分を隠してやってみる。 

3:できなかったところを反省をする。 

 

ローソク足と20日移動平均線との絡み具合を確認しますと
・20日線に触っただけ。
・20日線を、ちょっと越えただけ。
・20日線を大きく超えています。
 
下げてきた株価が一気に戻るわけではない
 
下げてきた株が5日線に当たりはじめ
次に20日線に触れ、20日線を少し超え、20線を大きく超えてから
最終的に20日線を下回らなくなって上昇局面へと移行していく。
 
株価も人間と一緒で一気に変化することは、あまりありません。
下降局面から横ばい局面へ、最終的に上昇局面に至るまで
少しずつ成長していくのですね。

 

株の売買シグナル

相場師朗先生の教え

・買いのシグナル

「下半身」
5日線が、横バイもしくは上向きに転じたとき
陽線のローソク足が体半分以上、
5日線の上に突き抜けたとき、上昇に転じる。

 

・売りのシグナル

「逆下半身」
5日線が、横バイもしくは下向きに転じたとき
陰線のローソク足が体半分以上、
5日線の下に突き抜けたとき、下降に転じる。

 

・買いのシグナル

上昇中の20日線を、その下に位置していた5日線が上に突き抜けて 「クチバシ」の形が出たら買い。これを「ゴールデンクロス」と言います。

 

・売りのシグナル

下降中の20日線を、その上に位置していた5日線が下に突き抜けて 「逆クチバシ」の形が出たら売り。これを「デッドクロス」と言います。

 

・買いのシグナル

「ものわかれ」上昇

5日線と20日線が並んで上昇している途中で

一旦、5日線が20日線に近づいたものの、
2つの移動平均線が交わることなく 5日線が再び上昇

 

・売りのシグナル

「ものわかれ」下降

5日線と20日線が並んで下降している途中で

一旦、5日線が20日線に近づいたものの、

2つの移動平均線が交わることなく 5日線が再び下落

 

・買いのシグナル

「N大」

5日線・20日線共に下がっていたものが
5日線が上昇し、20日線を下から上に抜ける。
その後、一旦5日線が20日線に近くものの
結局は5日線は20日線に触れることなく「もの別れ」となって
上昇していくパターン。

 

・売りのシグナル

「逆N大」

5日線・20日線共に上がっていたものが
5日線が下降し、20日線を上から下に抜ける。
その後、一旦5日線が20日線に近くものの
結局は5日線は20日線に触れることなく「もの別れ」となって
下降していくパターン。

 

・買いのシグナル(大暴騰の可能性)

「PPP」

平行になって推移していた移動平均線

その後、一気に、ばらけて上に行ったとき

 

・売りのシグナル(大暴落の可能性)

「逆PPP」

平行になって推移していた移動平均線

その後、一気に、ばらけて下に行ったとき

 

・3・6か月サイクル

1カ月は日柄が浅く、3カ月で最盛期を迎え、6カ月で終わる

概ね3カ月で相場が一旦反転して、
それまでとは逆の方向に株価が動く。

わからないところではやらない。

無理に売買するのは控えておき、

しかるべき投資するチャンスを虎視眈々と狙いながら
株式売買の練習をする時期にする。

 

あなたが株で最初の売り買い入れる際に
先ず何よりも考えないといけないこと

上昇曲面にあるのか?

下降局面にあるのか?

横バイ曲面にあるのか?

 

・節目

人はキリのいい数字を知らぬ間に意識する。
キリのいい数字「節目」というのは
人の心理の抵抗ラインになる。

 

・7の法則

 上げ下げが7日間続けば、一旦休憩する。

 上昇が7日間続くと、株価の上昇力が弱まり、下落か横バイになる。

 下落が7日間続くと、株価の下落力が弱まり、底を打つ。

終値を基準にする。 

・起点となるのは、上昇局面なら一番安いローソク足

下落局面ならその逆。

 7の法則とはいえ、4日で終わるケースが7割」くらいが多い。

 

・前の高値・安値

前の高値を大きく超えることも
また、前の安値を下回ることもない状態。

株価がある一定の値幅内で上下する「横ばい局面」。

 

「高値ブレイク」

株価が上昇局面になるには
安値が切り上がり、前の高値を越えていく必要あり。

 

「安値ブレイクアウト

前の高値に挑戦したものの、失敗して大幅安。

Streamlitの基本

・実行コマンド

streamlit run your_script.py [-- script args]

 

・st.write

import streamlit as st
import pandas as pd

st.write("Here's our first attempt at using data to create a table:")
st.write(pd.DataFrame({
    'first column': [1, 2, 3, 4],
    'second column': [10, 20, 30, 40]
}))

 

・折れ線グラフを描く

import streamlit as st
import numpy as np
import pandas as pd

chart_data = pd.DataFrame(
     np.random.randn(20, 3),
     columns=['a', 'b', 'c'])

st.line_chart(chart_data)

 

・スライダー

import streamlit as st
x = st.slider('x')  # 👈 this is a widget
st.write(x, 'squared is', x * x)

 

・文字の入力

import streamlit as st
st.text_input("Your name", key="name")

# You can access the value at any point with:
st.session_state.name

 

・サイドバー

import streamlit as st

# Add a selectbox to the sidebar:
add_selectbox = st.sidebar.selectbox(
    'How would you like to be contacted?',
    ('Email', 'Home phone', 'Mobile phone')
)

# Add a slider to the sidebar:
add_slider = st.sidebar.slider(
    'Select a range of values',
    0.0, 100.0, (25.0, 75.0)
)

 

・タイトル

st.title('Title Of This App')

 

ヒストグラム

hist_values = np.histogram(
    data[DATE_COLUMN].dt.hour, bins=24, range=(0,24))[0]
st.bar_chart(hist_values)

 

・steamli cloudでの公開

  1. アプリをパブリック GitHub リポジトリに置きます (そして、requirements.txt があることを確認してください)。
  2. share.streamlit.ioにサインインします 
  3. 「アプリのデプロイ」をクリックし、GitHub URL を貼り付けます。

 

 

オプション取引の基本

・コール

 購入価格予約の権利

 価格を権利行使価格という。

 コールを買う人(上方予想)、売る人(下方予想)がいる。

 日経平均20000円で買う権利、○○月限C20000

 

・プット

 売却価格予約の権利

 プットを買う人(下方予想)、売る人(上方予想)がいる。

   日経平均20000円で売る権利、○○月限P20000

 

 権利の購入単位は1000。権利が200円なら最小購入金額は200,000円。

 満期日のことをSQ、満期の清算値をSQ値という。

 SQ値と権利行使価格の差額が損益。

 

・オプションの価値

 本質的価値+時間的価値

 本質的価値は、SQ値と権利行使価格の差額。

 価値>0:インザマネー

 価値<0:アウトオブザマネー

 価値=0:アットザマネー(時間的価値が最大)

 時間的価値は、満期日に近づくに連れて減少するが、ボラティリティも影響する。

 

 価値の計算モデル:ブラック-ショールズモデル

ギリシャ指標

 デルタ:日経平均が1円変動した場合の、オプション価格変化量

 ガンマ:デルタの変化の割合を数値として取り出したもの

     デルタ⇒0.5×ガンマ×日経平均変化量^2がオプション価格変化量。

 ベガ:インプライドボラティリティ(IV)の影響によるオプション価格変化量

 セータ:時の経過による影響、一日経過した場合のオプション価格変化量。

 

インプライドボラティリティ(IV)

 市場参加者の想定・予想ボラティリティの収斂値

ヒストリカルボラティリティ(HV)

 過去のボラティリティの実績値

 

・デルタ戦略

 デビットスプレッド

 シンセティックポジション

 ブルシンセティックポジション

 カバードコール

 コールレシオスプレッド

 レシオスプレッド

・デルタニュートラル戦略

 ショートストラングル

 ショートストラドル

 ロングストラドル

・損失限定デルタニュートラル戦略

 コンドル

 バタフライ

 カレンダースプレッド

・デルタヘッジ戦略

 

Streamlit備忘録

起動方法

streamlit run your_script.py [-- script args]

 

終了方法

ターミナルでCtrl+C

 

ライブラリ設定

import streamlit as st
import pandas as pd

 

書き込み

st.write()

 

データフレームの書き込み

st.dataframe()

 

テーブルの生成

st.table(dataframe)

 

折れ線グラフの表示

st.line_chart(chart_data)

 

地図を描く

st.map(map_data)

 

スライダーを表示

x = st.slider('x')

 

テキスト入力

st.text_input("Your name", key="name") 
st.session_state.name

キーを持つすべてのウィジェットは、セッション状態に自動的に追加されます。

 

チェックボックス

st.checkbox('Text)

 

セレクトボックス

st.selectbox()

 

レイアウト(サイドバー)

セレクトボックスを追加する例

add_selectbox = st.sidebar.selectbox(
    'How would you like to be contacted?',
    ('Email', 'Home phone', 'Mobile phone')
)

 

レイアウト(並べて表示)

st.columnsウィジェットを並べて配置

left_column, right_column = st.columns(2)
# You can use a column just like st.sidebar:
left_column.button('Press me!')

#call Streamlit functions inside a "with" block:
with right_column:
    chosen = st.radio(
        'Sorting hat',
        ("Gryffindor", "Ravenclaw", "Hufflepuff", "Slytherin"))
    st.write(f"You are in {chosen} house!")

 

進行状況を表示(プログレスバー

import streamlit as st
import time

'Starting a long computation...'

# Add a placeholder
latest_iteration = st.empty()
bar = st.progress(0)

for i in range(100):
  # Update the progress bar with each iteration.
  latest_iteration.text(f'Iteration {i+1}')
  bar.progress(i + 1)
  time.sleep(0.1)

'...and now we\'re done!'

 

 

 

sqliteとbacktesting.py

from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA
from pandas_datareader import data
import pandas as pd
import numpy as np
import datetime as dt
import sqlite3

# 変更する部分:複数の銘柄コードをリストで指定
codes = ['6927', '6752', '3607', '7014']
start = '2021/01/01'
end = dt.date.today()  # 取得終了日

# SQLiteデータベースに接続
conn = sqlite3.connect('stock_data.db')

# 変更する部分:各銘柄コードに対して繰り返し処理
for code in codes:
    df = data.DataReader(code+'.JP', 'stooq', start, end)

    # DataFrameをSQLiteデータベースに保存
    df.to_sql('stock_data_' + code, conn, if_exists='replace', index=True)

# データベース接続を閉じる
conn.close()


class SmaCross(Strategy):
    n1 = 10
    n2 = 20

    def init(self):  # 初期設定
        price = self.data.Close
        self.ma1 = self.I(SMA, price, self.n1)
        self.ma2 = self.I(SMA, price, self.n2)

    def next(self):  # 売買条件
        if crossover(self.ma1, self.ma2):
            self.buy()
        elif crossover(self.ma2, self.ma1):
            self.sell()
            # self.position.close(): 保有ポジションの手仕舞


# 変更する部分:各銘柄コードに対して繰り返し処理
for code in codes:
    # SQLiteデータベースからデータを読み込む
    conn = sqlite3.connect('stock_data.db')
    query = f"SELECT * FROM stock_data_{code}"
    df = pd.read_sql_query(query, conn)
    conn.close()

    # Backtestを使用して戦略を実行
    bt = Backtest(df, SmaCross, cash=200000, commission=.002,
                  exclusive_orders=True)
    stats = bt.run()
    bt.plot()

    print(stats)

    # 最適化
    output2 = bt.optimize(n1=range(10, 70, 5), n2=range(10, 70, 5))
    print(output2)
    bt.plot()
    print(output2._strategy)

pandasの株価データフレームをSqliteに格納する

#データベースを作成
db = sqlite3.connect('japan_stock_price.db', isolation_level=None)
#priceテーブルに収集したデータフレームを格納する
df.to_sql('price', db, if_exists='append', index=None, method='multi', chunksize=5000)