LoginSignup
2
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-01-20

概要

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

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

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

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

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

root.mainloop() #画面表示

てな感じで・・・。

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

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

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()) #ボックス1から取得(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

ボタンをクリック
 2019-01-20 23.25.53.png

できた。

損益比率の計算

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

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

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

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

実際に値を入れてみた
 2019-01-20 23.53.04.png

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

 2019-01-20 23.55.56.png

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

最後に

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

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4