東京駅で2人の私服警官がいきなり出てきて、警察手帳を見せられた後、職務質問されました。
警官「君、職業は何?学生?」
警官「いつも、そんなラフな格好で会社行ってるの?」
警官「会社はスニーカーOKなの?」
警官「何の仕事しているの?」
警官「どんな会社で働いているの?」
警官「最近、スリが多いので・・気を悪くしないでください」
・・・40歳近いサラリーマンが悲しいね。
警察官は、警察官職務執行法(警職法)2条により、停止させての質問や警察署などへの同行を求めることができます。
しかし同条3項には、本人の意に反して連行できない旨が定められており、任意同行・質問に応じなくても問題はありません。
覚えておこう・・・。
うねり取りの環境を整える
「うねり取り手法」を極めることが株式投資の勝ち組への施策だと確信してます。
ただし相当高い技術力が必要なので、簡単ではありません。
エンジニア能力(システム化)により技術支援を模索中です。
候補となる銘柄選定
うねり取りに適した銘柄は次のように書かれています。
- 日経225とJPX400採用銘柄
- 1日の出来高が100万株以上の銘柄
- 300~400円の銘柄で、月に10円位しか動かない銘柄
かなり厳しい条件なので、あまり多くの銘柄は抽出されない気がします。
上記を満たす銘柄選定に python3 を使って次のようなコードを書きました。
なお、今後 python で完全自動売買ツールを作る可能性があるので 日付指定によりデータを取得しています。自由に書き換えて下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import urllib.request import pandas as pd import codecs import time from bs4 import BeautifulSoup from datetime import datetime, timedelta def cp932_encode(s): b = s.encode('cp932', "ignore") return(b.decode('cp932')) def get_soup_stock_list(url): content = urllib.request.urlopen(url).read() soup = BeautifulSoup(content,"html.parser") return soup def get_quote_yahoojp(code, start=None, end=None, interval='d'): base = 'http://info.finance.yahoo.co.jp/history/?code={0}.T&{1}&{2}&tm={3}&p={4}' start = pd.to_datetime(start) if end == None: end = pd.to_datetime(pd.datetime.now()) else : end = pd.to_datetime(end) start = 'sy={0}&sm={1}&sd={2}'.format(start.year, start.month, start.day) end = 'ey={0}&em={1}&ed={2}'.format(end.year, end.month, end.day) p = 1 if interval not in ['d', 'w', 'm', 'v']: raise ValueError("Invalid interval: valid values are 'd', 'w', 'm' and 'v'") url = base.format(code, start, end, interval, p) soup = get_soup_stock_list(url) table = soup.find_all("table",{"class":"boardFin yjSt marB6"})[0] rows = table.find_all("tr") high = 0 volume = 0 try: # 順序は date, open, high, low, close, volume, adj_close for row in rows: for cell in row.findAll(['td'])[3:4]: # high high = high + int(float(cell.get_text().replace(',', ''))) # print(cell.get_text().replace(',', '')) for cell in row.findAll(['td'])[5:6]: # volume volume = volume + int(float(cell.get_text().replace(',', ''))) except Exception as e: print('%r' % e) time.sleep(0.5) return [int(high / (len(rows) -1)), int(volume / (len(rows) -1 ))] def create_stock_list_csv(url, array): # 過去3日間 three_days = datetime.today() - timedelta(days=3) start = str(three_days.year) + "-" + str(three_days.month) + "-" + str(three_days.day) # 日経225とJPX400採用銘柄の中から選択 soup = get_soup_stock_list(url) for (ticker_symbol, stock_name, company_name) in zip( soup.find_all('div', attrs={"class": "col-xs-3 col-sm-1_5"}), soup.find_all('div', attrs={"class": "col-xs-9 col-sm-2_5"}), soup.find_all('div', attrs={"class": "hidden-xs col-sm-8"})): if (ticker_symbol.text != 'コード' and stock_name != '銘柄名' and company_name.text != '社名'): # 300~400円の銘柄(過去3日間の平均値) # 1日の出来高が100万株以上(過去3日間の平均値) print('%d' % int(ticker_symbol.text), flush=True) high, volume = get_quote_yahoojp(int(ticker_symbol.text), start=start) if (200 <= high and high <= 500 and volume >= 1000000): array.append([int(ticker_symbol.text), stock_name.text, high, volume]) return array def acquire_stock_market_index_list(): array = [] # 日経平均株価/日経225 nk225_url = 'https://indexes.nikkei.co.jp/nkave/index/component?idx=nk225' array = create_stock_list_csv(nk225_url, array) # JPX日経400 jpx400_url = 'https://indexes.nikkei.co.jp/nkave/index/component?idx=jpxnk400' array = create_stock_list_csv(jpx400_url, array) # hashableなオブジェクトに変換&重複排除&ソート array = sorted(set(map(tuple, array)), key=lambda x:x[0]) # DataFrame 生成 df = pd.DataFrame(array, columns=['コード', '銘柄名', '価格', '出来高']) # csv出力 df.to_csv("jpx400.csv", sep=",") if __name__ == '__main__': start = time.time() acquire_stock_market_index_list() elapsed_time = time.time() - start print ("elapsed_time:{0}".format(elapsed_time) + "[sec]") |
300~400円の銘柄と書かれていますが、幅を持たせています。
実行時間は約15分で、実行して得られた銘柄は40種類程度でした。
また貸借銘柄でないものは避けています。
コード | 銘柄名 | 価格 | 出来高 |
---|---|---|---|
1861 | 熊谷組 | 385 | 3992000 |
2337 | いちご | 328 | 2390566 |
2768 | 双日 | 276 | 3056533 |
3101 | 東洋紡 | 211 | 2702666 |
4208 | 宇部興 | 304 | 8451000 |
4689 | ヤフー | 496 | 10035766 |
5020 | JXTG | 493 | 11011566 |
5233 | 太平洋セメ | 404 | 6481333 |
5541 | 大平金 | 288 | 2041333 |
5703 | 日軽金HD | 281 | 4800366 |
5706 | 三井金 | 490 | 7724333 |
5707 | 東邦鉛 | 467 | 2302000 |
5715 | 古河機金 | 203 | 1188000 |
6508 | 明電舎 | 375 | 2537666 |
6701 | NEC | 294 | 8010666 |
6773 | パイオニア | 213 | 1944500 |
7011 | 三菱重 | 454 | 12408666 |
7012 | 川重 | 352 | 9249000 |
7013 | IHI | 371 | 7274333 |
8020 | 兼松 | 234 | 1653333 |
8304 | あおぞら銀 | 427 | 3941666 |
8379 | 広島銀 | 466 | 1177666 |
8410 | セブン銀 | 435 | 6608933 |
8703 | カブコム | 360 | 1705700 |
8840 | 大京 | 232 | 1616666 |
8897 | タカラレーベ | 497 | 1798533 |
9041 | 近鉄GHD | 419 | 2357333 |
9101 | 郵船 | 210 | 12190333 |
9104 | 商船三井 | 336 | 6411000 |
9107 | 川崎汽 | 277 | 3372666 |
9202 | ANAHD | 386 | 9715666 |
9501 | 東電HD | 457 | 4636833 |
9532 | 大ガス | 435 | 5140666 |
相場師朗氏は何年間も「日本郵船」株に絞って20年間うねり取りをされていたとの事です。
また、立花義正氏は「パイオニア」株で15年以上売買して成功されたようです。
確かにこれらの銘柄は含まれています。
※ 相場師朗氏は、その後「住友金属鉱山」を10年間、「ヤマハ発動機」を7から8年、そして「JFEホールディングス」と1000円以上の株にシフトしています。
移動平均線を相場師朗氏風にする
周期的なうねりを形成していることを、5日、20日、60日、100日、300日移動平均線や株価の節目から探すのが相場師朗氏風です。
一般的には5日移動平均線、25日移動平均線、75日移動平均線を使う場合も多いですが、相場が土曜日半日あった時の名残です。
相場師朗氏の手法では、1週間5日間、1ヶ月20日間、3ヶ月60日間、加えて、日足チャート上で週足、月足も同時に見ることができるように約20週(100日間)、約60週(300日間)で表しています。
そして、色使いは次のようになっています。
- 5日移動平均線(赤線)
- 20日移動平均線(緑線)
- 60日移動平均線(青線)
- 100日移動平均線(紫線)
- 300日移動平均線(オレンジ線)
これを無料ソフトのProtraで実現するには、次のようなコードを書いてchartフォルダに置いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
require "Color" require "TIlib" $Names[0] = "MA(5)" $Colors[0] = $Red $Names[1] = "MA(20)" $Colors[1] = $Green $Names[2] = "MA(60)" $Colors[2] = $SkyBlue $Names[3] = "MA(100)" $Colors[3] = $Violet $Names[4] = "MA(300)" $Colors[4] = $Orange Candle_draw($White, $Yellow) if ! $MA5 $MA5 = MA_new(5) else MA_next($MA5) MA_draw($MA5, $Colors[0]) end if ! $MA20 $MA20 = MA_new(20) else MA_next($MA20) MA_draw($MA20, $Colors[1]) end if ! $MA60 $MA60 = MA_new(60) else MA_next($MA60) MA_draw($MA60, $Colors[2]) end if ! $MA100 $MA100 = MA_new(100) else MA_next($MA100) MA_draw($MA100, $Colors[3]) end if ! $MA300 $MA300 = MA_new(300) else MA_next($MA300) MA_draw($MA300, $Colors[4]) end Indicator(0, MA_value($MA5)) Indicator(1, MA_value($MA20)) Indicator(2, MA_value($MA60)) Indicator(3, MA_value($MA100)) Indicator(4, MA_value($MA300)) |
まぁ想像通りの結果です。
ロジックを理解して自動売買まで出来たらなぁ・・・。