QuantAnalyzerの画面を見てみよう！

便利そうだけど結構よくわかんないのもある。
使いこなすために、書きながらお勉強。
まだ書きかけ。

実際のQuantAnalyzerのAnalyze - Overviewの画面と、

C:\QuantAnalyzer4\extend\Snippets\com\strategyquant\extend\OverviewTab\SQDefault.java
の中身とをVSCodeで見比べて推測していきます。

# Javaの独自定義の関数とか変数とかさっくり推察
#####d2WithPlType(stats.getXXXXX(XXXXX), combination.getPLType())
表示形式（金額、pips、％）に合わせるためっぽい
#####d2WithPlType(stats.getXXXXX(XXXXX), SQConst.PL_IN_PCT)
表示形式を％に固定してるっぽい
#####d2(stats.getXXXXX(XXXXXXXXXX)
小数点以下第２位まで求めてるっぽい。
#####statsConst.XXXXX
これの中身を見れたらなぁ。どうやって算出された値かがわかれば、色々と組み合わせられそう。


# 左上の表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447423/b22cf29c-355a-3f56-6a97-19da617ce8ce.png)

##### TOTAL PROFIT(PROFIT IN MONEY):総損益（金額）
##### TOTAL PROFIT(PROFIT IN PIPS):総損益（pips）
##### YEARLY AVG PROFIT:年平均損益（金額）
##### YEARLY AVG % RETURN:年平均損益（％）
##### CAGR(Compound Avarage Growth Rate):年平均成長率

#右上
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447423/82e41192-e10c-db5e-4f3f-eeb62b740ece.png)
###１列目
##### # OF TRADES：取引回数
SQDefault.javaでは　stats.getInt(StatsConst.NUMBER_OF_TRADES)
##### DRAWDOWN:最大ドローダウン金額
SQDefault.javaでは　d2WithPlType(stats.getDouble(dd_key), combination.getPLType())
##### ANNUAL % / MAX DD %:
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AAR_DD_RATIO))

###２列目
##### SHAREPE RATIO：シャープレシオ
SQDefault.javaでは　d2(stats.getDouble(StatsConst.SHARPE_RATIO))
[リスク（標準偏差）1単位当たりの超過リターン（リスクゼロでも得られるリターンを上回った超過収益）を測るもので、この数値が高いほどリスクを取ったことによって得られた超過リターンが高いこと（効率よく収益が得られたこと）を意味します。異なる投資対象を比較する際に、同じリスクならどちらのリターンが高いかを考えるときに役立ちます。
このシャープ・レシオは、リスク調整後のリターンを測るものとして、投資信託の運用実績の評価などにも利用されます。](https://www.smbcnikko.co.jp/terms/japan/si/J0267.html)
##### % DRAWDOWN:最大ドローダウン金額（％）
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.PCT_DRAWDOWN), SQConst.PL_IN_PCT)
##### R EXPECTANCY:
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.R_EXPECTANCY), "R")
[performance metrics developed by Van Tharp, it gives you the average profit value related to average risk (R) that you can expect from a system over many trades.](https://strategyquant.com/forum/topic/4059-math-expertancy/)
リスクに対して平均でどれくらい利益を得られるかってことらしい。シャープレシオとどう違うんだろ？

###３列目
##### PROFIT FACTOR：プロフィットファクター
SQDefault.javaでは　d2(stats.getDouble(StatsConst.PROFIT_FACTOR))
説明不要かな
##### DAILY AVG PROFIT：日平均損益
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.AVG_PROFIT_BY_DAY), combination.getPLType())
説明不要かな
##### R EXPECTANCY SCORE:
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.R_EXPECTANCY_SCORE), "R")
[standard R-Expectancy doesn’t consider the length of testing period and number of trades produced. There is a difference when you make for example $2000 per year by making 10 trades, or by making 100 trades. R-Expectancy Score adds a score for trades frequency. It is computed as: R-Expectancy * averageTradesPerYear](https://strategyquant.com/forum/topic/4059-math-expertancy/)
###４列目
##### RETURN / DD RATIO
SQDefault.javaでは　d2(stats.getDouble(StatsConst.RETURN_DD_RATIO)
##### MONTHLY AVG PROFIT：月平均損益
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.AVG_PROFIT_BY_MONTH), combination.getPLType())
##### STR QUALITY NUMBER:
SQDefault.javaでは　d2(stats.getDouble(StatsConst.SQN))

###５列目
##### WINNING PERCENTAGE：勝率
SQDefault.javaでは　d2(stats.getDouble(StatsConst.WINNING_PCT)) 
説明不要かな
##### AVERAGE TRADE:
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.AVG_TRADE), combination.getPLType())
##### SQN SCORE:
SQDefault.javaでは　d2(stats.getDouble(StatsConst.SQN_SCORE))

# Strategy
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447423/4f0e12b4-26a1-78d4-da50-9c7a519e5c63.png)
###１列目
##### Wins / Losses Ratio:
SQDefault.javaでは　d2(stats.getDouble(StatsConst.WIN_LOSS_RATIO))
勝率を比で表しただけ？
##### AHPR:
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AHPR))
[このサイトを参考にすると](http://kabumagariya.sakura.ne.jp/shoken-yogo/4409/2017/01/23/)、多分、損益/保有期間みたいな計算式。
##### Expectancy
SQDefault.javaでは　d2(stats.getDouble(StatsConst.EXPECTANCY))
##### Stagnation in Days：最長ドローダウン期間（日数）
SQDefault.javaでは　"" + stats.getInt(StatsConst.STAGNATION_PERIOD)
なんで空の文字列を足してるのかは謎。
###２列目
##### Payout Ratio (Avg Win/Loss)
SQDefault.javaでは　d2(stats.getDouble(StatsConst.PAYOUT_RATIO))
##### Z-Score
SQDefault.javaでは　d2(stats.getDouble(StatsConst.Z_SCORE))
##### Deviation
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.STANDARD_DEV), combination.getPLType())
StatsConst.STANDARD_DEVとの記述があるし、標準偏差かな？
##### Stagnation in %：最長ドローダウン期間（％）
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.STAGNATION_PERIOD_PCT), SQConst.PL_IN_PCT)

###３列目
##### Average # of Bars in Trade
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AVG_BARS_TRADE))
##### Z-Probability
SQDefault.javaでは　d2(stats.getDouble(StatsConst.Z_PROBABILITY)) + " %"
##### Exposure
SQDefault.javaでは　d2(stats.getDouble(StatsConst.EXPOSURE, 0)) + " %"
[保有する金融資産のうち市場の価格変動リスクにさらされている資産の割合のこと。](https://www.phillip.co.jp/fx/fx_glossary/exposure.php)

##### Correlation Factor R16：相関係数R16
SQDefault.javaでは　d2(Math.pow(stats.getDouble(StatsConst.STABILITY), 4))
自作計測値。「損益曲線」と「その最初と最後の取引を結んだ直線」とがどれだけ離れてるかの係数。数値が１に近づくほど安定していると言えます。
普通はr^2ですが、QuantAnalyzerではr^4を使っているみたいで、差がわかりやすいです。
私はもっとわかりやすくしたかったので、r^16としました。


#Trades（ちょっといじってレイアウトだけ変えてます。）
説明いらなそうだし、後回し。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447423/c4df951c-9e27-6cef-fedf-c93a6ad00d02.png)
###１列目
##### # of Wins：勝ち数
説明不要かと
SQDefault.javaでは　"" + stats.getInt(StatsConst.NUMBER_OF_PROFITS)
##### Gross Profit：合計利益
説明不要かと
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.GROSS_PROFIT), combination.getPLType())
##### Largest Win：最大利益
説明不要かと
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.MAX_PROFIT), combination.getPLType())
##### Avg Consec Wins：平均連敗
説明不要かと
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AVG_CONSEC_WIN))

###２列目
##### # of Losses：負け数
説明不要かと
SQDefault.javaでは　"" + stats.getInt(StatsConst.NUMBER_OF_LOSSES)
##### Gross Loss：合計損失
説明不要かと
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.GROSS_LOSS), combination.getPLType())
##### Largest Loss：最大損失
説明不要かと
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.MAX_LOSS), combination.getPLType())
##### Avg Consec Loss：平均連敗
説明不要かと
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AVG_CONSEC_LOSS))

###３列目
##### 
SQDefault.javaでは　""
##### Average Win：平均利益
説明不要かと
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.AVG_WIN), combination.getPLType())
##### Max Consec Wins：最大連勝
説明不要かと
SQDefault.javaでは　"" + stats.getInt(StatsConst.MAX_CONSEC_WINS)
##### Avg # of Bars in Wins
取引開始から決済まで、何本バーをまたいでいるか、だと思います…。（正直良くわかりません）
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AVG_BARS_WIN))

###４列目
##### # of Cancelled/Expired:キャンセル・期限切れの数
説明不要かと
SQDefault.javaでは　"" + stats.getInt(StatsConst.NUMBER_OF_CANCELED)
##### Average Loss：平均損失
説明不要かと
SQDefault.javaでは　d2WithPlType(stats.getDouble(StatsConst.AVG_LOSS), combination.getPLType())
##### Max Consec Losses：最大連敗
説明不要かと
SQDefault.javaでは　"" + stats.getInt(StatsConst.MAX_CONSEC_LOSS)
##### Avg Bars in Losses
取引開始から決済まで、何本バーをまたいでいるか、だと思います…。（正直良くわかりません）
SQDefault.javaでは　d2(stats.getDouble(StatsConst.AVG_BARS_LOSS))

#ここにはないけど、EquityControlのタブで気になるやつ
同じフォルダにあるファイルの「GetValue」内の「return stats.getDouble(StatsConst.STABILITY, 0」を参考にしていくといろいろわかるかも。

```java:QuantAnalyzer4\extend\Snippets\com\strategyquant\extend\DatabankColumns\Stability.java
@Override
public Object getValue(SQResultsGroup strategyResults, String dataType, String direction, String sampleType, String plType) throws Exception {
	SQResult result = strategyResults.getResult(SQConst.SYMBOL_PORTFOLIO);
	
	SQStats stats = result.getStats(direction, getGlobalPlType(plType), sampleType);
	if(stats==null) throw new StatsMissingException();
	
	return stats.getDouble(StatsConst.STABILITY, 0);
}
```
###こんなコードで取れそう
```java:Stability
stats.getDouble(StatsConst.STABILITY, 0)
```
先述しましたが、「損益曲線」と「最初と最後の取引の間に結んだ直線」の相関係数(r^4)です。

```java:Symmetry
stats.getDouble(StatsConst.SYMMETRY)
```
よくわからん！

```java:Fittness
strategyResults.getResult(SQConst.SYMBOL_PORTFOLIO)
.getStats(SQConst.DIRECTION_ALL, SQConst.PL_IN_MONEY, SQConst.KEY_SAMPLE_ALL)
.getDouble(StatsConst.FITNESS, 0)
```
よくわからん！

```java:CalmarRatio
stats.getDouble("CalmarRatio", 12)
```
[The Calmar ratio is a comparison of the average annual compounded rate of return and the maximum drawdown risk of commodity trading advisors and hedge funds. The lower the Calmar ratio, the worse the investment performed on a risk-adjusted basis over the specified time period; the higher the Calmar ratio, the better it performed. Generally speaking, the time period used is three years, but this can be higher or lower based on the investment in question.](investopedia.com/terms/c/calmarratio.asp)
リスク・リターン比みたいなこと書いてます。シャープレシオとどう違うんだろう？高いほどいいってのはわかりますね。基本は３年ベースで見るけど、まぁ短くても長くてもいいみたい。


にいろいろあるみたいなので見てみるのも面白いかもしれません。