HILMO(ヒルモ)LP-C2207を分解した^_^

ピストでヒルモを使ってて具合が良いのでママチャリに導入すべく購入! 中身を見てみたくなるのは性なのか、新品を分解して見てみました。壊さなくて良かった・・・・笑 写真たくさん載せました^_^ ヒルモについて 購入したのは、ヒルモのLP-C2207のカゴ下取り付けタイプです。 ヒルモは安全の観点から暗くなったらつくのではなく、常時点灯のライトです。 アマゾンで1444円とお安く購入できました(^^) マニュアル https://si.shimano.com/pdfs/dm/DM-CALP001-03-JPN.pdf https://si.shimano.com/api/publish/storage/pdf/ja/um/7G20A/UM-7G20A-003-00-JPN.pdf これはあまり役に立たなかった資料(添付されていた資料のQRコードから) 分解の意図 ハブダイナモは従来の6V2.4Wより出力を抑えて6V0.9Wとなっており、常時点灯でもチャリこぎが重くならないように工夫がされています。 ヒルモのハブダイナモ0.9Wで使用するのが当然なのですが、ママチャリのは従来の2.4W 負荷が軽くなるとハブダイナモは電圧が高くなるので、そのへんが大丈夫か確認するために回路を見ようと思って分解しました。 ライトは0.9Wのダイナモで駆動する設計になっているので、最大でも0.9W程度しか消費しないですが、それを2.4Wのダイナモにつけると、ダイナモ側からは負荷が軽くなる(2.4Wから0.9Wにへる)のでその分電圧が高く出てしまうというわけです。 すると半導体素子の耐圧とか諸々の問題がでて壊してしまう可能性があります。(たぶん) ハブダイナモの特性については、各サイトさんで詳しく測定されているので、そのデータを参考にさせていただきます。ありがとうございます!(^^) みると、速度30km/h時に負荷開放(最も軽負荷)で19Vrms程度なので、最大で20Vrmsくらいと考えておきます。素子耐圧はこれを考慮してみます。 分解 アマゾンで購入するとこんなパッケージで届きました。 簡易包装で良いですね。本体と付属ネジが袋のラミネートで仕切られているのもいい配慮です、シマノさん。 端子は、J2-Aタイプで、ハブダイナモにコネクタ1つでさせるようになっています。 従来型はJ2タイプで平型の圧着端子2本接続です。もしくは1本(1本のときはチャリとの取り付けネジ部分がアースとなっています。錆びてると電気が流れずに点灯しません) ネジを緩めると、角度が変えられます。※ネジはこの状態からは抜けないので注意! レンズ側のカバーをひねって外してから、黒カバーを外します。 マイナスドライバーでちょっと浮かせてやれば↓写真のように動きます。 取れました。 ネジはカバーを外したら抜けます。ネジを外せば取付金具が取れます。 レンズ部分はOリングがあるので、爪楊枝で角を持ち上げて、ピンセットで丁寧にとりました。 接着はされていないですが、ピッタリはまって少しくっついています(ゴムだから?) 基板。使ってない穴があるので、他製品にも流用しているんですね。 真ん中の黄色いチップがLEDです。約2mm各です。ちっちゃい! 表面には半導体素子が2つしか見当たりません。基板が厚めなので、もしかして内層に部品が実装してあるんですかね?わかりません。厚みがあるのは単に強度のためかもしれません。 シルクはD1,D2とあるのでダイオードと推定します。 レーザー刻印がD2Sとあるので、調べてみると、どうやらロームのショットキーダイオードですね。 多分、RBE2EA20A https://fscdn.rohm.com/jp/products/databook/datasheet/discrete/diode/schottky_barrier/rbe2ea20atr-j.pdf Vfはmax0.39V程度らしく、測ってみるとどれも0.13V程度だったので大体あってそうです。 ダイオードが2個しか見当たらないので、単純にダイナモの交流を全波整流していると考えました。 きっとどこかに制限抵抗があるはず! 平滑コンデンサも見当たりませんし、手持ちのヒルモは漕ぎ出しがピカピカ光る(点滅)ので、漕ぎ出しの低周波が全波整流してボコボコしているので点滅していると考えれば、全波整流かもしれません。 すると、ダイオード1つにはダイナモの電圧がそのままかかるので、最大19Vrmsとすれば、ピーク電圧は19V*√2=26.8Vpeak(正弦波)となります。 データシートだと、逆耐圧が20Vなのでオーバーしていますが、サージ耐量が30Vで、正弦波の半波がデューティ50%と考えれば30V耐圧と考えて良いと思います(強引) よって、多分大丈夫でしょう!(自己責任で) まあ、アマゾンのレビューでも普通に使えました!とあるので平気なんだと思います。 内側は空っぽ ...

2021/04/10 · Last updated on 2021/05/10 · 1 min · 55 words

iPhone純正メーラにてlive.jp のメールが送信済みに2通表示される件

live.jpのメールアドレスをiPhone純正メーラーに登録してますが、送信済みに2通表示されます。 相手には1通しか行ってないので、こちらの見た目の問題ですが、気持ちが悪いですね。 こちらの方が書かれている問題と同じような気がしますので、しょうがないですが放置します・・・ Appleにも上がってますがまだ回答がついてません。 Gmailアプリに登録して送信すれば2通なりませんでしたが、文字コードが合っていなく文字化けします。

2021/02/01 · Last updated on 2021/02/02 · 1 min · 5 words

「OK,google 空気清浄機」 でプラズマクラスター空気清浄機KC-E50を動作させる google home miniとRM mini3(黒豆)

皆さん、空気清浄機つかってますかー? 私はこの時期は空気清浄機を常につけています。 使っているのはシャープのKC-E50 プラズマクラスターに期待しているのです。コロナよぉ 加湿機能があるので、寝る前は必ずつけているのですがたまに忘れちゃいますね。 寒いから布団に入ってぬくぬくしているのに、ボタン押すために布団から出たくない! というわけで、googleにつけてもらいましょう! でも、この空気清浄機にはリモコンは付属していないです。(ボタン押さなきゃならない?) ですが、エアコン連動機能というものがあり、赤外線受信部があります。 これを利用します! 使うもの google home mini RM mini3(黒豆)(赤外線のスマートリモコン) BroadLinkのアプリ(iPhoneXで使用) 前はihcってアプリ使ってました。結構癖あり 空気清浄機と連動機能がついたシャープ製エアコンのリモコン エアコンは AY-G25H を使用 エアコン本体を用意する必要はないですよ。空気清浄機をオン・オフするための赤外線信号を学習するためだけに必要なのでエアコンの”リモコン”があればよいです。 KC-E50(シャープの空気清浄機) 黒豆は当時gear bestで1200円くらいで買いましたね。やすかったな。 homeassistant上だと、黒豆はred beanなんだよな。赤豆じゃん(全く関係ない) 概要 エアコンのリモコンとBroadLinkアプリを使って空気清浄機をオン・オフする赤外線信号を黒豆に学習させる BroadLinkアプリでscenes(シーン)を登録する google home mini と BroadLinkをリンクする google home miniにBroadLink内で設定したものが現れる google home miniのルーチン機能で黒豆を動作 黒豆から赤外線信号がでて、空気清浄機がオン(オフ) 赤外線信号はオンとオフは同じ信号のようなので、一つの信号だけになります。(リモコンから出てるのはそうっぽいです。取説見てもリモコンのボタンはオン・オフで同じなので。でも、エアコン本体から連動中に出ている赤外線信号はオン・オフ別信号が出ているはずです(取説(※)より) シャープの加湿空気清浄機KC-E50 シャープのエアコン AY-G25H エアコンのリモコンとBroadLinkアプリを使って空気清浄機をオン・オフする赤外線信号を黒豆に学習させる まずは、黒豆に赤外線信号を出してもらうには学習してもらわねばなりません。 学習には、BroadLinkのアプリを使います。私はiPhoneXなのでiPhoneアプリとして説明しますね。 以前はihcアプリ(下の画像の左上)じゃないとダメぽかったので使ってましたが使いづらかった。インストールするにも苦労した記憶が?(忘れた)同じアカウントで入れば、ihcアプリでもBroadLinkアプリでも内容が同期されます。が、google home miniで連携すると2つずつ重複表示されてしまいますので、私はBroadLinkアプリだけにしました。 黒豆はすでに使えるものとして扱いますね。 右上の+を押して、追加していきます。 Add remote を押します ...

2020/12/27 · Last updated on 2020/12/27 · 2 min · 254 words

BootCampでWindows10となったUSキーボードのMacの左右commandキーでかな英数を切り替える(インストール不要のAutoHotkey使用)

ダサいシールを貼っております。 MacBook Air late2018を使っていますが、Windowsも使いたいので最近Windows10をBootCampでインストールしました。 USキーボードなので、スペースキーの横はかなキー、英数キーではなくcommandキーが2つです。 そこで問題になるのが、かな英数変換。 macOSとして使う場合は、Karabinerを使って左右commandキーでかな英数変換をしています。 で、Windowsとして使う場合も同じように左右commandキーでかな英数変換ができるようにしました。 環境 MacBook Air late2018(BootCamp Windows 10 October 2020 Update(バージョン20H2)) USキーボード google日本語入力 2.25.3700.0 AutoHotkey 1.1.33.02(July 17, 2020) 実現する方法 もう上に書いちゃってますが、今回もAutoHotkeyを使って実現します。 一発でやってくれるソフトとかあるかもしれないですけど、調べる前にAutoHotkeyでやっちゃいました笑 問題点 紹介する方法(というかプログラム)では問題点があります。 Windowsキーが使えなくなります。 左右のcommandキーはBootCampではWindowsキーとして認識しています。 このため、commandキーを別キーに割り当ててしまうためWindowsキーとして認識しなくなるわけです。 私は、Windowsキーを使わないと割り切ったので、良しとしました(Win + Eで新しいエクスプローラを開くショートカットが使えなくなるのは惜しかったな・・・) 手順概要 2ステップで行います。 左commandキーを無変換キー、右commandキーを変換キーに割り当てる(AutoHotkeyを使用) 無変換キーをIMEオフ(英数)、変換キーをIMEオン(かな)に割り当てる(google日本語入力の設定画面で行う) ステップ1 まず、AutoHotkeyを入手し、使える状態にします。 プログラムは以下です。 テキストエディタにコピペしてください。 ;2020/11/22 ;Macbook Air US-keyboard ;問題点 : Windowsキーが使えなくなる #InstallKeybdHook #USEHOOK sc15b Up::Send,{vk1D} ; 左commandキー(LWinキー) → 無変換キー sc15c Up::Send,{vk1C} ; 右commandキー(RWinキー) → 変換キー ;vk5b Up::Send,{vk1D} ;これでもOK ;vk5c Up::Send,{vk1C} ;これでもOK #USEHOOK off ;sc15b vk5b LWin : 左commandキー(左Windowsキーとして認識している) ;sc15c vk5c RWin : 右commandキー(右Windowsキーとして認識している) ;vk1D : 無変換キー ;vk1C : 変換キー ; ";"はコメントです。 MacBookAir_US.ahk として保存します。(.ahkの拡張子をちゃんとつければ、名前は何でもいいです。私はこの名前にしました) ...

2020/11/22 · Last updated on 2020/11/22 · 1 min · 95 words

【Python】Yahoo乗換をスクレイピングして駅到着時間を抽出する

電車の乗り換え案内はYahoo乗換を使っています。 案内とか良いから、とにかく何時に最寄駅に着くか知りたい(テキストで) ということで、Pythonを使ってやってみました。 Yahoo乗換案内をスクレイピングして到着時間を抽出します。 プログラム ''' 現在時刻から直近の乗換案内を検索して、到着時間を表示する Yahoo乗換から到着時間をスクレイピングで抽出している ''' import urllib.request from bs4 import BeautifulSoup import urllib.parse # URLエンコード、デコード startsta = '東京' # 出発駅 endsta = '横浜' # 到着駅 startstaen = urllib.parse.quote(startsta) # encode endstaen = urllib.parse.quote(endsta) # encode url0 = 'https://transit.yahoo.co.jp/search/result?from=' url1 = '&flatlon=&to=' url2 = '&viacode=&viacode=&viacode=&shin=&ex=&hb=&al=&lb=&sr=&type=1&ws=3&s=&ei=&fl=1&tl=3&expkind=1&ticket=ic&mtf=1&userpass=0&detour_id=&fromgid=&togid=&kw=' url = url0 + startstaen + url1 + endstaen + url2 + endstaen # print(url) req = urllib.request.urlopen(url) html = req.read().decode('utf-8') soup = BeautifulSoup(html, 'html.parser') time = soup.select("li.time") # 到着時間の記載部分を抽出 # print(time) # print(time[2]) print('===到着時間抽出===') arrive = time[2].select_one('span.mark').text.strip() # <span class="mark">で囲まれたテキストを抽出 print(arrive) プログラムの説明 簡単に説明していきます(^^) startsta = '東京' # 出発駅 endsta = '横浜' # 到着駅 startstaen = urllib.parse.quote(startsta) # encode endstaen = urllib.parse.quote(endsta) # encode 出発駅と到着駅を定義して、エンコードしています。 url0 = 'https://transit.yahoo.co.jp/search/result?from=' url1 = '&flatlon=&to=' url2 = '&viacode=&viacode=&viacode=&shin=&ex=&hb=&al=&lb=&sr=&type=1&ws=3&s=&ei=&fl=1&tl=3&expkind=1&ticket=ic&mtf=1&userpass=0&detour_id=&fromgid=&togid=&kw=' url = url0 + startstaen + url1 + endstaen + url2 + endstaen # print(url) スクレイピングするURLはurlです。url0,1,2は以下で紹介している、”(最終)案内 現在時刻 1件表示”のURLを分解したもので、現在時刻での乗換検索結果を表示します。 ...

2020/09/26 · Last updated on 2020/09/26 · 1 min · 187 words

Yahoo乗換でワンタップで帰りの時間を調べる

使う駅が決まっているわけですが、帰りに乗る時間を毎回乗り換えアプリに入力して調べるのは面倒に感じてしまいます。 乗り換え検索にはYahoo乗り換えを使っています。 駅登録の機能ももちろんありますが、情報がモリモリで要らない情報も多いです。直近の乗る時間と着く時間がわかって、それがすぐに調べられればオケなのです。 やっていること で、私がやっていることですが、特定のURLをホーム画面に追加して、そのアイコンをワンタップすると直近の乗換案内が表示されるようにしています。こんな感じ↓にホーム画面に追加しています。 スマホはiPhoneXです。 タップすると、Safariが起動して直近の乗換案内(1件)が表示されます。 案内 時間指定 3件表示 Yahoo乗り換えはとてもわかり易いURLで、例えば、 出発駅:東京 到着駅:横浜 出発時刻:18:55 として、Yahoo乗り換えのサイトで調べ、URLをコピーすると以下のようになります。 https://transit.yahoo.co.jp/search/result?flatlon=&fromgid=&from=東京&to=横浜&viacode=&via=&viacode=&via=&viacode=&via=&y=2020&m=09&d=25&hh=18&m2=5&m1=5&type=1&ticket=ic&expkind=1&ws=3&s=0&al=1&shin=1&ex=1&hb=1&lb=1&sr=1&kw=横浜 ICカード優先、歩く速度:ゆっくり、有料特急:使用、・・・などなど色んなオプションが入っているのでURLが長くなっていきますが、基本的にこんな感じです。オプションを変更すればURLも変化することがわかると思いますので、アレンジできると思います。 URLの東京と横浜となっている部分を好きな駅に書き換えれば良いです。 案内 現在時刻 3件表示 これは調べる時に時間指定されているので、URLにも時間が入っていますが、その部分を消すと現在時刻で間近の電車を検索してくれます。 時間部分とはこれ↓ &y=2020&m=09&d=25&hh=18&m2=5&m1=5 時間部分を消したURLはこれ↓ https://transit.yahoo.co.jp/search/result?flatlon=&fromgid=&from=東京&to=横浜&viacode=&via=&viacode=&via=&viacode=&via=&type=1&ticket=ic&expkind=1&ws=3&s=0&al=1&shin=1&ex=1&hb=1&lb=1&sr=1&kw=横浜 案内 時間指定 1件表示 これだと3件表示されますが、最も現在時刻に近い1件だけ表示してくれれば良いです。 ルート1(私の場合は早い順なのでルート1は最短の案内)の”ルート共有”を選択すると、共有用の短縮URLが表示されますので、これをコピーしてSafariで開くと、ルート1(1件)だけのページが開きます。 短縮用URLはそのページを一度開かないと展開されないので、開く必要があります。 短縮URLを展開した、ルート1(1件)だけのURLは以下↓ https://transit.yahoo.co.jp/search/result?from=東京&flatlon=&to=横浜&viacode=&viacode=&viacode=&ym=202009&d=25&hh=18&m1=5&m2=5&shin=1&ex=1&hb=1&al=1&lb=1&sr=1&type=1&ws=3&s=0&ei=&fl=1&tl=3&expkind=1&ticket=ic&mtf=1&userpass=0&detour_id=&fromgid=&togid=&kw=横浜 (最終)案内 現在時刻 1件表示 さきほど時間部分を削除しましたが、短縮URLを展開するとまた時間部分が含まれてしまうので上と同じように削除します。 時間部分は以下↓ &ym=202009&d=25&hh=18&m1=5&m2=5 同じように時間部分を削除すると、最終的に間近の1件だけの案内するURLは以下↓ https://transit.yahoo.co.jp/search/result?from=東京&flatlon=&to=横浜&viacode=&viacode=&viacode=&shin=1&ex=1&hb=1&al=1&lb=1&sr=1&type=1&ws=3&s=0&ei=&fl=1&tl=3&expkind=1&ticket=ic&mtf=1&userpass=0&detour_id=&fromgid=&togid=&kw=横浜 これをホーム画面に追加します。 できあがり(^^)

2020/09/25 · Last updated on 2020/09/25 · 1 min · 44 words

700Cホイールを160サイズで送る

700Cのホイールをネットで買うと、すごくでかいダンボールで来ます。 160サイズを越えると通常の宅急便ではなくなり、ヤマトなどでは家財便となります。すると送料もめっちゃ高くなります。 メルカリなどで売るときはなんとか160サイズで送りたいものです。 ネットの海を彷徨っていると、160サイズで送れるホイールダンボールの寸法を公開してくださっている方がいたので、実際に作ってみました(^^) 参考 まずはじめに参考にさせてもらったサイトさん おかげさまで安く送れました。ありがとうございます(^^) 早速作る 近所のホムセン(島忠)で引っ越し用の160サイズを買ってきました。600円なり。 寸法図に則り、線を引きます。 切ります、つなげます。 ガムテープぺたぺた貼ります。組み上がりました。 ホイールを前に置いてみると、このくらいのサイズ感。 ホイールを入れるとこんな感じ。クイックは抜かないと無理そうだったので抜きました。 ホイール抜き ダンボールを閉めるとホイール上面とダンボールとの隙間は40mm弱くらいなので、梱包材を入れればいい感じのぴったり具合です。 梱包材(新聞紙)を詰めた 完了!

2020/09/22 · Last updated on 2020/09/22 · 1 min · 18 words

【Python】【トラリピ】トラップ範囲をmatplotlibで可視化する(クロス円単一通貨ペアver)

トラップ範囲を決める際、チャートを見ながら決めます。〇〇年間のチャートで中央値はいくらでmax,minはいくらなどを参考にします。 トラリピアプリでも確認できますが、トラリピ注文を入れてからです。入れる前はチャートと合わせて確認できません。 Excelを使ってチャートと一緒に書いた事はありますが、毎回最新の為替データを持ってきて描画しなければならないのがイマイチ Googleスプレッドシートも使いました。これは為替データを拾う関数があるのでExcelよりは便利でしたが、データ数の関係でシートが重い。値をいろいろ変えて確認するにはこの重さがイマイチ というわけで、Pythonとmatplotlibで書いてみました。 プログラムの大半は、以前投稿した記事と同じですが、グラフ描画機能を追加したことと、1通貨ペア(クロス円)としたところが違います。(複数通貨ペアのままだとグラフが多すぎてカオスだったので1通貨ペアにしました) プログラム # -*- coding: utf-8 -*- # onepare-corss.py """ 決め事 ロスカットレートはトラリピ範囲外にすること 理由は、必要資金が範囲リミット時よりもロスカットレート時のほうが多く必要という見方をしているため そんなことに囚われず、常に多い方をしっかり見れていれば上記ルールは不要だが いつも注視してるなんて無理 df0 : FREDから取得したデータ用 df1 : トラップ df : 表示用 """ import numpy as np import pandas as pd import pandas_datareader.data as pdr import datetime as dt import matplotlib.pyplot as plt from matplotlib import dates as mdates from dateutil.relativedelta import relativedelta # timedeltaはyearsの指定ができないのでdateutilを使う from matplotlib.text import OffsetFrom # 計算したいペア 任意の名前 showpare = 'JPYAUD' # レート取得範囲設定 deltayear = 10 # n年前までのデータを取得する dateend = dt.date.today() # 取得範囲のエンドは本日まで datestart = dateend - relativedelta(years=deltayear) # 本日からn年前が取得範囲のスタート tickerlist = ['DEXJPUS','DEXUSAL'] # 取得するtickerのlist 豪ドル/円が欲しいので米ドル/円と米ドル/豪ドルを取得する(Fredには豪ドル/円は無いので計算する) # FREDから取れるデータの例↓ # DEXJPUS : JPY/USD # DEXUSAL : USD/AUD # DEXUSNZ : USD/NZD # DEXCAUS : CAD/USD # DataReaderでFredからレートを取得しデータフレームdf0に格納 df0 = pdr.DataReader(tickerlist,'fred',datestart,dateend) # 日次データ df0['JPYAUD'] = df0['DEXJPUS'] * df0['DEXUSAL'] # JPY/AUD算出 # 別の通貨ペア算出の例↓ # df0['JPY/NZD'] = df0['DEXJPUS'] * df0['DEXUSNZ'] # JPY/NZD算出 # df0['JPY/CAD'] = df0['DEXJPUS'] * (1 / df0['DEXCAUS']) # JPY/CAD算出 df0 = df0.resample('W').last() # 週末の値に変換(週足) # FREDは高頻度に更新しないようなので、週末の値を最新として考えちゃう # 最終行のデータを取得 # つまり、最新で、currencydataに最も近い # ilocで取得すると単一の値になる JPYUSD = df0.iloc[-1]['DEXJPUS'] # JPYUSDの最終行の値を取得 USDAUD = df0.iloc[-1]['DEXUSAL'] # USDAUDの最終行の値を取得 SHOW = df0.iloc[-1][showpare] # 知りたい通貨ペア print('Currency JPY/USD : '+ str(JPYUSD)) print('Currency USD/AUD : '+ str(USDAUD)) print('Currency ' + showpare + ' : ' + str(round(SHOW,2))) # トラリピ範囲設定 pare = [showpare,showpare] #BUY,SELLの順番で記載する start = [70.4,85.6] # 下限 end = [85.2,100.4] # 上限 pcs = [38,38] # 本数 buy,sellで本数を揃えないとプログラムがエラー unit = 1000 losscutrate = [65,104] # 空の配列を用意 spanstep = np.empty(len(pare)) suma = np.empty(len(pare)) sumb = np.empty(len(pare)) sumc = np.empty(len(pare)) sumd = np.empty(len(pare)) sume = np.empty(len(pare)) urikai = [] span = [] # spanを配列として定義 df1 = pd.DataFrame(span) # spanstep描画用 # トラップ計算 for i in range(len(pare)): span = np.linspace(start[i],end[i],pcs[i]) df1[i] = span # iごとにspanをdf1に追加 span表示用 spanstep[i] = span[1] - span[0] suma[i] = np.sum(span * unit * 0.04) # 必要証拠金 sumb[i] = np.sum((span - start[i]) * unit) # 含み損(limit時) sumc[i] = np.sum((abs(span - losscutrate[i])) * unit) # 含み損(ロスカットレート時) sumd[i] = suma[i] + sumb[i] # 必要資金(limit時) sume[i] = suma[i] + sumc[i] # 必要資金(ロスカットレート時) if( losscutrate[i] <= min(span) ): # 売り買いどっち? urikai.append('買') else: urikai.append('売') df = pd.DataFrame({ '通貨':pare, '売買':urikai, 'start':start, 'end':end, 'step':spanstep, 'pcs':pcs, 'losscutrate':losscutrate, # 'A必要証拠金':suma, # 'B含み損(limit時)':sumb, # 'C含み損(ロスカットレート時)':sumc, 'D必要資金(limit時)':sumd, # A+B 'E必要資金(ロスカット時)':sume # A+C }) df = df.round(3) groupedcolumns = ['pcs','D必要資金(limit時)','E必要資金(ロスカット時)'] grouped2columns = ['D必要資金(limit時)','E必要資金(ロスカット時)'] grouped = df.groupby(['通貨','売買']).sum() # 通貨、売買のそれぞれの合計値 grouped2 = grouped.groupby('通貨').max() # 通貨ごとに最大値を出す(half&half用) それぞれの列のmaxなので行は合っていないので注意 print('全必要資金(limit時) : '+'{:,.0f}'.format(grouped2['D必要資金(limit時)'].sum())+' JPY') # 必要資金の合計を表示(全通貨) print('全必要資金(ロスカット時) : '+'{:,.0f}'.format(grouped2['E必要資金(ロスカット時)'].sum())+' JPY') # 必要資金の合計を表示(全通貨) # ===================== # csv出力 # ===================== # define file name # /や:があるとエラーになる(oserror22) savename =str(showpare)+'_'+'B'+ str(start[0])+'to'+str(end[0])+'_'+'S'+str(start[1])+'to'+str(end[1])+'_'+'pcs'+str(pcs[0])+'_'+'step'+str(round(spanstep[0],1))+'_'+str(deltayear)+'years' # df.to_csv('onepare-cross-'+savename+'.csv') # grouped.to_csv('onepare-cross-grouped-'+savename+'.csv',columns=groupedcolumns) # grouped2.to_csv('onepare-cross-grouped2-'+savename+'.csv',columns=grouped2columns) df1.to_csv('onepare-cross-trap-'+savename+'.csv') # ===================== # graph描画設定 # ===================== fig = plt.figure(figsize=(6,6)) ax1 = fig.add_subplot(111) plt.title(showpare +' Past '+str(deltayear)+' years data from FRED') # title # x軸設定 ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) # 年-月 ax1.xaxis.set_major_locator(mdates.AutoDateLocator(maxticks=8)) # 最大8個のラベルを設定 # ラベル設定 ax1.set_xlabel('DATE',rotation=0) # x軸のラベル ax1.xaxis.set_tick_params(rotation=0) # ラベルを斜めにできる ax1.set_ylabel(showpare) # y軸のラベル ax1.grid(True) # grid表示 # メインデータ描画 ax1.plot(df0[showpare],alpha=0.2,color='blue') # BUYロスカット描画(偶数) ax1.hlines(losscutrate[0],datestart,dateend,'red',linestyle='dashed') # 線を引く ax1.annotate( 'BUY : '+str(losscutrate[0])+' : '+'{:,.0f}'.format(sume[0])+' JPY', xy=(dateend,losscutrate[0]), xycoords='data', xytext=(0,10), textcoords='offset points', color='red', horizontalalignment='right') # 値を表示 # SELLロスカット描画(奇数) ax1.hlines(losscutrate[1],datestart,dateend,'red',linestyle='dashed') # 線を引く ax1.annotate( 'SELL : '+str(losscutrate[1])+' : '+'{:,.0f}'.format(sume[1])+' JPY', xy=(dateend,losscutrate[1]), xycoords = 'data', xytext = (0,-10), textcoords = 'offset points', color='red', horizontalalignment='right') # 値を表示 # BUYトラップ範囲描画 ax1.axhspan(start[0],end[0],alpha=0.3,color='coral') ax1.hlines(df1[0].values,datestart,dateend,color='coral',alpha=0.5) # step線 ax1.annotate( str(start[0])+' : '+'{:,.0f}'.format(sumd[0])+' JPY', xy=(datestart,start[0]), xycoords='data', xytext=(20,20), textcoords='offset points', arrowprops=dict(arrowstyle='->', connectionstyle='angle,angleA=0,angleB=90,rad=10'), horizontalalignment='left', verticalalignment='bottom') # start値 ax1.annotate( str(end[0]), xy=(datestart,end[0]), xycoords='data', xytext=(20,-20), textcoords='offset points', arrowprops=dict(arrowstyle='->', connectionstyle='angle,angleA=0,angleB=90,rad=10'), horizontalalignment='left', verticalalignment='bottom') # end値 # SELLトラップ範囲描画 ax1.axhspan(start[1],end[1],alpha=0.3,color='deepskyblue') ax1.hlines(df1[1].values,datestart,dateend,color='deepskyblue',alpha=0.5) # step線 ax1.annotate( str(start[1]), xy=(datestart,start[1]), xycoords='data', xytext=(20,20), textcoords='offset points', arrowprops=dict(arrowstyle='->', connectionstyle='angle,angleA=0,angleB=90,rad=10'), horizontalalignment='left', verticalalignment='bottom') # start値 ax1.annotate( str(end[1])+' : '+'{:,.0f}'.format(sumd[1])+' JPY', xy=(datestart,end[1]), xycoords='data', xytext=(20,-20), textcoords='offset points', arrowprops=dict(arrowstyle='->', connectionstyle='angle,angleA=0,angleB=90,rad=10'), horizontalalignment='left', verticalalignment='bottom') # end値 # max描画 maxxval = df0[showpare].idxmax() maxyval = df0[showpare].max() ax1.plot(maxxval,maxyval,marker='2',markersize=10,color='black') ax1.annotate(' MAX : '+str(round(maxyval,1)),xy=(maxxval,maxyval)) # min描画 minxval = df0[showpare].idxmin() minyval = df0[showpare].min() ax1.plot(minxval,minyval,marker='2',markersize=10,color='black') ax1.annotate(' MIN : '+str(round(minyval,1)),xy=(minxval,minyval)) # median描画 medval = (maxyval - minyval) / 2 + minyval ax1.hlines(medval,datestart,dateend,linestyle='dotted',color='black') ax1.annotate( 'MED : '+'{:,.2f}'.format(medval), xy=(dateend,medval), color='black') # Currency描画 ax1.hlines(SHOW,datestart,dateend,linestyle='dotted',color='blue') ax1.annotate(' NOW : '+str(round(SHOW,1)),xy=(dateend,SHOW),color='blue') # step,pcs描画 ax1.annotate( 'step: '+str(round(spanstep[0],1)) + ' pcs: ' + str(pcs[0]), xy=(datestart,minyval), xycoords = 'data', xytext = (0,-15), textcoords = 'offset points') plt.tight_layout() # ラベルが重ならないようにいい感じに調整する plt.savefig('onepare-cross-'+savename+'.png',format='png',dpi=150) # グラフ保存 実行結果 例として以下で実行しています。 ...

2020/09/13 · Last updated on 2021/10/21 · 4 min · 659 words

【Python】【トラリピ】必要資金をPythonで算出してみる

Pythonを使って、トラリピで必要になる資金を算出してみました^_^ 単一通貨ペア、複数通貨ペアに対応しています。 算出はトラリピの試算表使えばいいし、エクセルでも出せますが、Pythonの勉強の一環として作ってみました。 作る中でトラリピの理解も深まったので良かったと思います^_^ 下手書きしてるので、効率の良いプログラムではないですが、私のような初心者の方には理解しやすいと思います笑 結果はトラリピ試算表と見比べて”だいたい”正しい(※a)ことは確認していますが、責任は持てないので、正しいかどうかはちゃんとご自身でチェックして下さいね^_^ ※a : トラリピ試算表とちょっとズレます。試算表の方がより多くの資金が必要な結果になることがあります(←重要)。実際、ギリギリな資産では運用しないと思うので、あくまで目安として使うのがよろしいと思います。 環境 Python 3.7 プログラム import numpy as np import pandas as pd import pandas_datareader.data as pdr import datetime as dt # 最新のレートを取得する end = dt.date.today() # 本日まで start = end - dt.timedelta(days=30) # 最新のデータが本日付けであるとは限らないので、とりあえず30日前までのデータを取り、その中で最新データを引用する tickerlist = ['DEXJPUS','DEXUSAL','DEXUSNZ','DEXCAUS'] # 取得するtickerのlist # tickerlist = ['DEXJPUS'] # 取得するtickerのlist # DEXJPUS : JPY/USD # DEXUSAL : USD/AUD # DEXUSNZ : USD/NZD # DEXCAUS : CAD/USD # DataReaderからレートを取得 df0 = pdr.DataReader(tickerlist,'fred',start,end) # 日次データ df0['JPYAUD'] = df0['DEXJPUS'] * df0['DEXUSAL'] # JPY/AUD算出 df0['JPYCAD'] = df0['DEXJPUS'] * (1 / df0['DEXCAUS']) # JPY/CAD算出 print(df0) # 最終行のデータ(つまり最新)を取得 JPYUSD = df0.iloc[-1]['DEXJPUS'] print('Currency JPY/USD : '+str(JPYUSD)) # トラリピ範囲設定 pare = ['JPY/AUD','JPY/AUD','JPY/CAD','JPY/CAD','USD/NZD','USD/NZD','USD/NZD','USD/NZD','USD/AUD','USD/AUD','USD/AUD','USD/AUD'] # 通貨:JPY/AUD,JPY/CAD,••• start = [70.2,85.4,70.2,95.8,0.644,0.6,0.64,0.704,0.508,0.808,0.514,0.814] # 下限 end = [85,100.2,95,119.8,0.7,0.636,0.644,0.76,0.796,1.096,0.79,1.09] # 上限 # step = [0.4,0.4,0.8,0.8,0.004,0.004,0.004,0.004] # 値幅 pcs = [38,38,32,31,15,10,2,15,25,25,24,24] # 本数 unit = 1000 losscutrate = [65,100.2,70,120,0.5,0.5,0.5,0.9,0.5,1.1,0.5,1.1] # 空の配列を用意 spanstep = np.empty(len(pare)) suma = np.empty(len(pare)) sumb = np.empty(len(pare)) sumc = np.empty(len(pare)) sumd = np.empty(len(pare)) sume = np.empty(len(pare)) urikai = [] for i in range(len(pare)): span = np.linspace(start[i],end[i],pcs[i]) spanstep[i] = span[1] - span[0] # 値幅 suma[i] = np.sum(span * unit * 0.04) # 必要証拠金 sumb[i] = np.sum((span - start[i]) * unit) # 含み損(下限時) sumc[i] = np.sum((abs(span - losscutrate[i])) * unit) # 含み損(ロスカットレート時) sumd[i] = suma[i] + sumb[i] # 必要資金(下限時) sume[i] = suma[i] + sumc[i] # 必要資金(ロスカットレート時) if( losscutrate[i] <= min(span) ): # 売り買いどっち? urikai.append('買') else: urikai.append('売') if 3 < i <= 11: # クロス円ではないペアを日本円に換算 sumd[i] = sumd[i] * JPYUSD sume[i] = sume[i] * JPYUSD df = pd.DataFrame({ '通貨':pare, '売買':urikai, 'start':start, 'end':end, 'step':spanstep, 'pcs':pcs, 'losscutrate':losscutrate, # 'A必要証拠金':suma, # 'B含み損(下限時)':sumb, # 'C含み損(ロスカットレート時)':sumc, 'D必要資金(下限時=A+B)':sumd, 'E必要資金(ロスカットレート時=A+C)':sume }) df = df.round(3) # 桁丸め groupedcolumns = ['pcs','D必要資金(下限時=A+B)','E必要資金(ロスカットレート時=A+C)'] grouped2columns = ['D必要資金(下限時=A+B)','E必要資金(ロスカットレート時=A+C)'] grouped = df.groupby(['通貨','売買']).sum() # 通貨、売買のそれぞれの合計値 grouped2 = grouped.groupby('通貨').max() # 通貨ごとに最大値を出す(half&half用) それぞれの列のmaxなので行は合っていない。なので注意 sumval = grouped2.sum() # 各列の合計値 sumval.name = "Sum" # 行名 grouped2 = grouped2.append(sumval) # 最終行に合計値を追加 # csv出力 df.to_csv('df-tora.csv') # csv出力 grouped.to_csv('grouped.csv',columns=groupedcolumns) grouped2.to_csv('grouped2.csv',columns=grouped2columns) 証拠金率は0.04で計算しています(レバレッジmax25倍) ...

2020/07/16 · Last updated on 2023/09/22 · 2 min · 349 words

【Python】【Pandas】ilocでエラー IndexError: single positional indexer is out-of-bounds

環境 Python 3.7 pandas 0.24.2 (iOSのアプリ Carnetsで動作) エラー内容 --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-1-f4a3d43733da> in <module> ---> 47 JPYUSD = df0.iloc[-1]['DEXJPUS'] 48 print('Currency JPY/USD : '+str(JPYUSD)) 49 • • • IndexError: single positional indexer is out-of-bounds エラーになった経緯 PandasDataReaderで取得したデータをdf0に格納し、iloc[-1]で’DEXJPUS’列の最終行のデータを取得しようとしたらエラーになった 原因 以下のようにDataFrameが空だったから print(df0)で確認 ilocはDataFrameが空だとダメっぽい Empty DataFrame Columns: [DEXJPUS, DEXUSAL, DEXUSNZ, DEXCAUS, JPYAUD, JPYCAD] Index: [] 対策 DataFrameに値を入れておく!(emptyにしない) 実際対策したこと days=10ではデータが無くてemptyだった様なので、30に増やしたらデータが入った様なので解決した 当該のプログラム Pandasdatareaderを使ってFREDから為替のデータを取得するプログラムです(現在からn日前のデータ取得) 下のプログラムだとdays=10ですので10日前までのデータを取得しようと動きますが、FREDでの最新データが2020/07/02(2020/07/13時点)なので7/13-7/2=11日前となり10日前までだとデータが取れません。なのでこのままコピペしたら表題のエラーになります。 days=30(1ヶ月前)くらい余裕を持っておけば多分取得できます。(実際やった対策がこれ) FREDさんが1ヶ月更新してくれなかったらダメですが! import numpy as np import pandas as pd import pandas_datareader.data as pdr import datetime as dt # 最新のレートを取得する end = dt.date.today() # 本日まで start = end - dt.timedelta(days=10) # 最新のデータが本日付けであるとは限らないので、とりあえず10日前までのデータを取り、その中で最新データを引用する tickerlist = ['DEXJPUS','DEXUSAL','DEXUSNZ','DEXCAUS'] # 取得するtickerのlist # DEXJPUS : JPY/USD # DEXUSAL : USD/AUD # DEXUSNZ : USD/NZD # DEXCAUS : CAD/USD # DataReaderからレートを取得 df0 = pdr.DataReader(tickerlist,'fred',start,end) # 日次データ df0['JPYAUD'] = df0['DEXJPUS'] * df0['DEXUSAL'] # JPY/AUD算出 df0['JPYCAD'] = df0['DEXJPUS'] * (1 / df0['DEXCAUS']) # JPY/CAD算出 print(df0) # 最終行のデータを取得(つまり、最新データ) # ilocで取得すると単一の値になる # ilocではdataframeがemptyだとエラーになる JPYUSD = df0.iloc[-1]['DEXJPUS'] print('Currency JPY/USD : '+str(JPYUSD)) おしまい^_^ ...

2020/07/13 · Last updated on 2020/07/13 · 1 min · 153 words