最近低予算でデイトレの練習をしているのですが、その際にテスタさんの下記語録を意識してトレードしてます。

この3つの語録のうち、株で勝つためにはいかにギャンブルをしないかという事を意識するのが大事という事で、今回は返済注文を活用しながらギャンブルにならないようにシステマチックな取引をしていくために検討をしてみます。

(返済注文について知らない方はこちら参照お願いします返済予約注文)

期待値を求める

今回は注文する際に返済注文の益出しと損切を入れたうえで発注をした場合について考えていきます。

期待値を求めるために「勝つとx円増えるが、負けるとy円減ってしまう(勝率はz %)」という風にします。

これを表に表すと以下のようになります。
増える金額
減る金額
変動額x-y
確率z1-z

この時x,yは正の整数、zは0~1の間の数です。

この表をもとに期待値を求めると下記のようになります。
期待値については下記サイトを参照してください。
xz-y(1-z)

頭がいい人はこれを数学的に解いて最適なx,y,zの組を求めると思うのですが、私は数学が得意ではないので、プログラムで強引にx、y、zの組を求めていこうと思います。

期待値をプログラムで計算する

とりあえずpythonで先ほどの計算式を求めるコードを簡単に書いてみます。
今はまだ練習中なので、失敗しても大丈夫なように益出し、損切りともに500円までとしてます。また、練習中であることを考慮して勝率は最大でも45 %となるようにしてます。

それぞれの変数の詳細はコメントを参照してください。
  1. step_x = 100#益出し額の刻み幅
  2. step_y = 100#損切りの刻み幅
  3. step_z = 5#勝率の刻み幅
  4. max_x = 600#益出し額の最大値
  5. max_y = 600#損切りの最大値
  6. max_z = 50#勝率の最大値
  7. min_x = 100#益出し額の最小値
  8. min_y = 100#損切りの最小値
  9. min_z = 20#勝率の最小値
  10. for calc_z in range(min_z,max_z,step_z):
  11.     for calc_y in range(min_y,max_y,step_y):
  12.         for calc_x in range(min_x,max_x,step_x):
  13.             calc = calc_x*calc_z/100-calc_y*(1-calc_z/100)
  14.             if calc > 0:
  15.                 print("[x,y,z] = {},{},{}".format(calc_x,calc_y,calc_z))
  16.                 print("期待値は{}".format(calc))

出力結果は下記の通りです。
  1. [x,y,z] = 500,100,20
  2. 期待値は20.0
  3. [x,y,z] = 400,100,25
  4. 期待値は25.0
  5. [x,y,z] = 500,100,25
  6. 期待値は50.0
  7. [x,y,z] = 300,100,30
  8. 期待値は20.0
  9. [x,y,z] = 400,100,30
  10. 期待値は50.0
  11. [x,y,z] = 500,100,30
  12. 期待値は80.0
  13. [x,y,z] = 500,200,30
  14. 期待値は10.0
  15. [x,y,z] = 200,100,35
  16. 期待値は5.0
  17. [x,y,z] = 300,100,35
  18. 期待値は40.0
  19. [x,y,z] = 400,100,35
  20. 期待値は75.0
  21. [x,y,z] = 500,100,35
  22. 期待値は110.0
  23. [x,y,z] = 400,200,35
  24. 期待値は10.0
  25. [x,y,z] = 500,200,35
  26. 期待値は45.0
  27. [x,y,z] = 200,100,40
  28. 期待値は20.0
  29. [x,y,z] = 300,100,40
  30. 期待値は60.0
  31. [x,y,z] = 400,100,40
  32. 期待値は100.0
  33. [x,y,z] = 500,100,40
  34. 期待値は140.0
  35. [x,y,z] = 400,200,40
  36. 期待値は40.0
  37. [x,y,z] = 500,200,40
  38. 期待値は80.0
  39. [x,y,z] = 500,300,40
  40. 期待値は20.0
  41. [x,y,z] = 200,100,45
  42. 期待値は34.99999999999999
  43. [x,y,z] = 300,100,45
  44. 期待値は80.0
  45. [x,y,z] = 400,100,45
  46. 期待値は125.0
  47. [x,y,z] = 500,100,45
  48. 期待値は170.0
  49. [x,y,z] = 300,200,45
  50. 期待値は24.999999999999986
  51. [x,y,z] = 400,200,45
  52. 期待値は69.99999999999999
  53. [x,y,z] = 500,200,45
  54. 期待値は114.99999999999999
  55. [x,y,z] = 400,300,45
  56. 期待値は15.0
  57. [x,y,z] = 500,300,45
  58. 期待値は60.0
  59. [x,y,z] = 500,400,45
  60. 期待値は4.999999999999972

これの見方ですが、例えば60行目だと勝率45 %が出せるなら益出し500円、損切400円で注文すれば利益が出るというような見方です。

期待値が高い方がいいのですが、損切り額が安すぎるとちょっとした変動ですぐに損切りしてしまうため、損切額はある程度大きい額がいいと思います。

具体的な最適解は経験を積みながらになると思いますが、まずは益出し500、損切り300でやってみたいと思います。(勝率40 %以上であれば利益が出せるし、損切額もある程度大きいため、ちょっとした変動にも強いと考えたため)