FX用：Pythonで損益比率を計算するウィジェットを作ってみた

#概要
トレード、特に短期トレードを行う場合の戦略は全て、期待値((総利益 - 総損失)/トレード回数)を0以上にするための手段に集約されます。
トレードの期待値を上げるためには勝率だけでなく、損益比率が重要になります。
Pythonのtkinterも使いこなせるようになりたいと思っていたので、損益比率を計算するウィジェットを作るに至りました。

#基本はrootにオブジェクトをペタペタ貼っていく

簡単に構成を練ったら、rootにテキストボックスやボタンやらテキストをベタベタ貼っていって
動作やらエラー直しやらを行うという方針でやります。

```python:sample.py
import sys
import tkinter as tk
root = tk.Tk()
root.geometry("450x350") #サイズ
root.title(u"損益比率の計算") #タイトル

#ここにボタンやらテキストボックスを配置していく

root.mainloop() #画面表示
```

てな感じで・・・。

#サンプルとして入力した数字を２倍するウィジェットを作成

入力→計算→出力がスムーズにいけばと思ったんで
しょぼい試作品で
テストを行いました。

```python:twice.py
import sys
import tkinter as tk
root = tk.Tk()
root.geometry("450x350")
root.title(u"損益比率の計算")

def cul(event):
    Entry_Box2.delete(0,tk.END) #ボックスの中身を消去
    a = float(Entry_Box.get()) #ボックス１から取得(float型)
    Entry_Box2.insert(0,a*2) #ボックス2に挿入

Entry_Box= tk.Entry()
Entry_Box.pack()

Button = tk.Button(text=u'2倍')
Button.bind("<Button-1>",cul) #ボタンを押すと関数 culの呼び出しを行う
Button.pack()

Entry_Box2= tk.Entry()
Entry_Box2.pack()

root.mainloop()
```

試行結果
![ 2019-01-20 23.25.43.png](https://qiita-image-store.s3.amazonaws.com/0/302420/b56b2627-a047-4901-31c5-7622ae82cebe.png)

ボタンをクリック
![ 2019-01-20 23.25.53.png](https://qiita-image-store.s3.amazonaws.com/0/302420/ae686e11-5f49-f1b3-c450-057c663fc5c6.png)

できた。

#損益比率の計算

損益比率 
= 利益幅 / 損失幅
=(利確値 - エントリー値)/(エントリー値 - 損切値)
だが、スプレッドを考慮すると実質的なエントリー値は エントリー値 + スプレッドになるので

=(利確値 - (エントリー値+スプレッド))/((エントリー値+スプレッド) - 損切値)
となる。
この計算式と照らし合わせて、
エントリー値、スプレッド、利確値、損切値を入力するテキストボックスとボタンを配置し、
一番下に計算結果を配置した。

```Python:risk-reward.py
import tkinter as tk

root = tk.Tk()
root.title(u"損益比率の計算")
root.geometry("450x320")

#計算+挿入の関数
def culculated(event):
    E = float(Entry_Box.get()) 
    S = float(Spread_Box.get())/100 #pipsの単位変換
    TP = float(TakeProfit_Box.get())
    SL = float(StopLos_Box.get()) 
    
    ratio = (TP-(E+S))/((E+S)-SL) #レシオの算出

    Result_Box.delete(0,tk.END)
    Result_Box.insert(0,round(ratio,3))

#エントリー
Entry_text = tk.Label(text=u'エントリーポイント') #テキストオブジェクトの生成
Entry_text.pack() #rootに格納
Entry_Box= tk.Entry()
Entry_Box.pack()


#スプレッド
Spread_text = tk.Label(text=u'スプレッド(pips)') #テキストオブジェクトの生成
Spread_text.pack() #rootに格納
Spread_Box = tk.Entry()
Spread_Box.pack()

#利確ポイント
TakeProfit_text = tk.Label(text=u'利確値') #テキストオブジェクトの生成
TakeProfit_text.pack() #rootに格納
TakeProfit_Box = tk.Entry()
TakeProfit_Box.pack()

#損切ポイント
StopLos_text = tk.Label(text=u'損切値') #テキストオブジェクトの生成
StopLos_text.pack() #rootに格納
StopLos_Box = tk.Entry()
StopLos_Box.pack()

#計算ボタン
Button = tk.Button(text=u'リスクリワードレシオの計算', bg='red')
Button.bind("<Button-1>",culculated)
Button.pack()

#結果の表示
Result_Box = tk.Entry()
Result_Box.pack()

root.mainloop()

```

結果
![ 2019-01-20 23.53.40.png](https://qiita-image-store.s3.amazonaws.com/0/302420/b43649e5-d1d9-a911-84ce-effc656c010b.png)

形としては問題なさそう。

実際に値を入れてみた
![ 2019-01-20 23.53.04.png](https://qiita-image-store.s3.amazonaws.com/0/302420/74881310-3dd6-34da-af1f-4078a5b97f45.png)

ボタンをクリック、計算を実行

![ 2019-01-20 23.55.56.png](https://qiita-image-store.s3.amazonaws.com/0/302420/f93ba83f-6e8b-d3f4-593e-ae0130446488.png)

計算できた。100でエントリー、120で利確、90で損切りならリスクリワードレシオは2.0だと分かりますね。スプレッド分を考慮して少し下がった実質的な結果が表示されています。

#最後に
Web上には損益比率を計算するサイトもたくさんあるし、（あと比率は大体みたら分かるので）実用性があるかはわかりませんがMT4の横にちょこんと表示させておくウィジェットもあってもいいなと思って作りました。
もう少し実用的な物をいくつか作成する予定です。