mirror of
https://github.com/freqtrade/frequi.git
synced 2024-11-11 02:33:51 +00:00
Add more options to BacktestReport
This commit is contained in:
parent
9eddc34057
commit
bbbddee5f4
|
@ -4,11 +4,25 @@
|
||||||
<h2>BacktestResult for {{ strategy }}</h2>
|
<h2>BacktestResult for {{ strategy }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">Backtest days {{ backtestResult.backtest_days }}</div>
|
<b-card header="Metrics">
|
||||||
|
|
||||||
<b-table class="table-sm" :items="backtestResultStats" :fields="backtestResultFields">
|
<b-table class="table-sm" :items="backtestResultStats" :fields="backtestResultFields">
|
||||||
</b-table>
|
</b-table>
|
||||||
<TradeList class="trade-history" :trades="backtestResult.trades" />
|
</b-card>
|
||||||
|
<b-card header="Results per pair" class="mt-2">
|
||||||
|
<b-table class="table-sm" :items="backtestResult.results_per_pair" :fields="perPairFields">
|
||||||
|
</b-table>
|
||||||
|
</b-card>
|
||||||
|
|
||||||
|
<b-card header="Results per Sell-reason" class="mt-2">
|
||||||
|
<b-table
|
||||||
|
class="table-sm"
|
||||||
|
:items="backtestResult.sell_reason_summary"
|
||||||
|
:fields="perSellReason"
|
||||||
|
>
|
||||||
|
</b-table>
|
||||||
|
</b-card>
|
||||||
|
|
||||||
|
<TradeList class="trade-history mt-2" :trades="backtestResult.trades" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -18,7 +32,7 @@ import TradeList from '@/components/ftbot/TradeList.vue';
|
||||||
import { Component, Vue, Prop } from 'vue-property-decorator';
|
import { Component, Vue, Prop } from 'vue-property-decorator';
|
||||||
import { StrategyBacktestResult } from '@/types';
|
import { StrategyBacktestResult } from '@/types';
|
||||||
|
|
||||||
import { timestampms } from '@/shared/formatters';
|
import { timestampms, formatPercent } from '@/shared/formatters';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: { TradeList },
|
components: { TradeList },
|
||||||
|
@ -52,6 +66,43 @@ export default class BacktestResultView extends Vue {
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get perPairFields() {
|
||||||
|
return [
|
||||||
|
{ key: 'key', label: 'Pair' },
|
||||||
|
{ key: 'trades', label: 'Buys' },
|
||||||
|
{ key: 'profit_mean', label: 'Avg Profit %', formatter: (value) => formatPercent(value, 2) },
|
||||||
|
{ key: 'profit_sum', label: 'Cum Profit %', formatter: (value) => formatPercent(value, 2) },
|
||||||
|
{ key: 'profit_total_abs', label: `Tot Profit ${this.backtestResult.stake_currency}` },
|
||||||
|
{
|
||||||
|
key: 'profit_total_pct',
|
||||||
|
label: 'Tot Profit %',
|
||||||
|
formatter: (value) => formatPercent(value, 2),
|
||||||
|
},
|
||||||
|
{ key: 'duration_avg', label: 'Avg Duration' },
|
||||||
|
{ key: 'wins', label: 'Wins' },
|
||||||
|
{ key: 'draws', label: 'Draws' },
|
||||||
|
{ key: 'losses', label: 'Losses' },
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
get perSellReason() {
|
||||||
|
return [
|
||||||
|
{ key: 'sell_reason', label: 'Sell Reason' },
|
||||||
|
{ key: 'trades', label: 'Buys' },
|
||||||
|
{ key: 'profit_mean', label: 'Avg Profit %', formatter: (value) => formatPercent(value, 2) },
|
||||||
|
{ key: 'profit_sum', label: 'Cum Profit %', formatter: (value) => formatPercent(value, 2) },
|
||||||
|
{ key: 'profit_total_abs', label: `Tot Profit ${this.backtestResult.stake_currency}` },
|
||||||
|
{
|
||||||
|
key: 'profit_total_pct',
|
||||||
|
label: 'Tot Profit %',
|
||||||
|
formatter: (value) => formatPercent(value, 2),
|
||||||
|
},
|
||||||
|
{ key: 'wins', label: 'Wins' },
|
||||||
|
{ key: 'draws', label: 'Draws' },
|
||||||
|
{ key: 'losses', label: 'Losses' },
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
backtestResultFields: Array<Record<string, string>> = [
|
backtestResultFields: Array<Record<string, string>> = [
|
||||||
{ key: 'metric', label: 'Metric' },
|
{ key: 'metric', label: 'Metric' },
|
||||||
{ key: 'value', label: 'Value' },
|
{ key: 'value', label: 'Value' },
|
||||||
|
|
|
@ -16,6 +16,7 @@ export interface PairResults {
|
||||||
profit_sum_pct: number;
|
profit_sum_pct: number;
|
||||||
profit_total_abs: number;
|
profit_total_abs: number;
|
||||||
profit_total_pct: number;
|
profit_total_pct: number;
|
||||||
|
profit_total: number;
|
||||||
trades: number;
|
trades: number;
|
||||||
wins: number;
|
wins: number;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +57,8 @@ export interface StrategyBacktestResult {
|
||||||
results_per_pair: Array<PairResults>;
|
results_per_pair: Array<PairResults>;
|
||||||
sell_reason_summary: Array<SellReasonResults>;
|
sell_reason_summary: Array<SellReasonResults>;
|
||||||
stake_amount: number;
|
stake_amount: number;
|
||||||
|
stake_currency: string;
|
||||||
|
max_open_trades: number;
|
||||||
total_trades: number;
|
total_trades: number;
|
||||||
trades_per_day: number;
|
trades_per_day: number;
|
||||||
winner_holding_avg: number;
|
winner_holding_avg: number;
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="row mb-2">
|
<div class="row ml-1">
|
||||||
|
<div class="col-mb-12">
|
||||||
<TimeRangeSelect v-model="timerange"></TimeRangeSelect>
|
<TimeRangeSelect v-model="timerange"></TimeRangeSelect>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-mb-12">
|
||||||
|
<b-form-group
|
||||||
|
label="Strategy"
|
||||||
|
label-for="strategyName"
|
||||||
|
invalid-feedback="Strategy is required"
|
||||||
|
>
|
||||||
|
<b-form-input id="strategyName" v-model="strategy"></b-form-input>
|
||||||
|
</b-form-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<b-button variant="primary" :disabled="backtestRunning" @click="clickBacktest">
|
<b-button variant="primary" :disabled="backtestRunning" @click="clickBacktest">
|
||||||
Start backtest
|
Start backtest
|
||||||
|
|
Loading…
Reference in New Issue
Block a user