見出し画像

The トレード記録 その② 並べ替えと、資産曲線を連動させるVBAコード

私のトレード記録の特長は

① トレード記録とチャート画像が連動している
② 項目名ダブルクリックで昇順降順に並べ替える
③ 資産曲線グラフを表示している
④ 並べ替えと同時に資産曲線グラフも変わる
⑤ 手法別、月別、価格帯別、仕掛け時間帯別、etc別に
  利益、トレード数、勝率、期待値を表示している。
⑥ 別シートに日次集計している。
⑦ 分足検証結果との差異をワンクリックで分別している。


といったところです。
今回は、このなかで、
② 項目名ダブルクリックで昇順降順に並べ替える
③ 資産曲線グラフを表示している
④ 並べ替えと同時に資産曲線グラフも変わる

についてです。
例えば、建値とか、IN時間とかで並べ替えて資産曲線がどうなるのか?
これってすごく重要だと思います。

例えば、9時半までに資産曲線が急角度で、その後は微増になっているんだったら、9時半までのポジションを多くして、その後は小さくする。もしくはトレードしない、なんてルールも作れます。

いろいろな項目を作ると、その項目でトレード結果がどう変わるかが、視覚的にわかります。

今では、トレード結果の並べ替えで資産曲線が変わらないトレード記録や検証シートは使えません。

それではコードですが、前提事項として、

① 損益はH列にある。
② 項目数は21列ある、つまりA列からU列までを並べ替える
③ 損益累計はAH列に列挙する。
④ 適当な位置に折れ線グラフを配置する。
 ※折れ線グラフの線種や色、その他設定は自分の好きなようにしていただいて結構です。

以下のコードをトレード記録のシートモジュールにコピペしてください。

これで、1行目の項目名をダブルクリックするとその列でA列からU列までを昇順降順に並べ替えます。
また、それに連動して、シート上に配置した折れ線グラフが変わります。

※ 念のために、まずはトレード記録のコピーを作って、そちらでやってみてください。そちらでうまくいったら、本シートでやってください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Static flg As Boolean
endr = Cells(Rows.Count, 1).End(xlUp).Row
If Target.Row = 1 Then
    If Target.Column < 22 Then
        If flg = False Then
            ActiveSheet.Range("A:U").Sort Key1:=Cells(1, Target.Column), Order1:=xlDescending, Header:=xlYes
            flg = True
        Else
            ActiveSheet.Range("A:U").Sort Key1:=Cells(1, Target.Column), Order1:=xlAscending, Header:=xlYes
            flg = False
        End If
    End If
     End If
     Columns("AH").ClearContents
     Range("AH2:AH" & endr).Formula = "=AH1+H2"
   ActiveCell.Offset(0, 1).Select
   
    ActiveSheet.ChartObjects(ActiveSheet.ChartObjects(1).Name).Activate
    ActiveChart.SeriesCollection(1).Formula = "=SERIES(,,'" & ActiveSheet.Name & "'!$AH$2:$AH$" & endr & ",1)"
End Sub


コードの解説をします。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
シートモジュールのBeforeDoubleClickに記述していきます。
右クリックで実現したい場合には、beforeRightClickにはりつけてください。


Static flg As Boolean
昇順降順を切り替えるための変数(フラグ)をスタティックで記述しています。

endr = Cells(Rows.Count, 1).End(xlUp).Row
1列目の最終行を取得しています。

If Target.Row = 1 Then
1行目をダブルクリックしたときのみ実行します。

If Target.Column < 22 Then
22列以内の列のみ実行します。


If flg = False Then
変数で昇順、降順を切り替えます。

ActiveSheet.Range("A:U").Sort Key1:=Cells(1, Target.Column), Order1:=xlDescending, Header:=xlYes
A列からU列まで降順で並べ替えます。
flg = True
昇順、降順の変数を切り替えます。


Else
ActiveSheet.Range("A:U").Sort Key1:=Cells(1, Target.Column), Order1:=xlAscending, Header:=xlYes
A列からU列まで昇順で並べ替えます。


flg = False
昇順、降順の変数を切り替えます。

End If
End If
End If

Columns("AH").ClearContents
資産累計を記述するAH列をクリアします。


Range("AH2:AH" & endr).Formula = "=AH1+H2"
AH列の最終行まで累計計算式を代入します。


ActiveCell.Offset(0, 1).Select
並べ替え後、1列右にアクティブセルを映します。
これは、連続してその項目を昇順降順に並べ変えるときにすぐにできるようにしています。


ActiveSheet.ChartObjects(ActiveSheet.ChartObjects(1).Name).Activate
折れ線グラフをアクティブにします

ActiveChart.SeriesCollection(1).Formula = "=SERIES(,,'" & ActiveSheet.Name & "'!$AH$2:$AH$" & endr & ",1)"
折れ線グラフに資産累計のAH列をセットします。

以上になります。
もしご不明な点があれば、コメントしただければとおもいます。

今日の記事はいかがだったでしょうか?
スキやフォロー、コメントを頂けるとモチベが上がります。よろしくお願いいたします。


この記事が気に入ったらサポートをしてみませんか?