Global fix (#9)
* Fix time for candle * Fix out ouf range * Fix pnl, fix custom money management * Clean a bit
This commit is contained in:
18
src/Managing.WebApp/src/app/store/customMoneyManagement.tsx
Normal file
18
src/Managing.WebApp/src/app/store/customMoneyManagement.tsx
Normal file
@@ -0,0 +1,18 @@
|
||||
import { create } from 'zustand'
|
||||
|
||||
import type { MoneyManagement } from '../../generated/ManagingApi'
|
||||
|
||||
type CustomMoneyManagementStore = {
|
||||
setCustomMoneyManagement: (custom: MoneyManagement) => void
|
||||
moneyManagement: MoneyManagement | null
|
||||
}
|
||||
|
||||
export const useCustomMoneyManagement = create<CustomMoneyManagementStore>((set) => ({
|
||||
moneyManagement: null,
|
||||
setCustomMoneyManagement: (custom) => {
|
||||
set((state) => ({
|
||||
...state,
|
||||
moneyManagement: custom,
|
||||
}))
|
||||
},
|
||||
}))
|
||||
@@ -22,8 +22,6 @@ const LogIn = () => {
|
||||
const message = 'wagmi'
|
||||
const signature = await signMessageAsync({ message })
|
||||
const t = new Toast('Creating token')
|
||||
console.log(t)
|
||||
|
||||
|
||||
if (signature && address) {
|
||||
const userClient = new UserClient({}, apiUrl)
|
||||
@@ -37,10 +35,9 @@ const LogIn = () => {
|
||||
})
|
||||
.then((data) => {
|
||||
setCookie('token', data, 1)
|
||||
console.log('token', data)
|
||||
setTimeout(() => {
|
||||
location.assign("/");
|
||||
}, 2000);
|
||||
}, 1000);
|
||||
})
|
||||
.catch((err: any) => {
|
||||
t.update('error', 'Error : Some thing bad happen')
|
||||
|
||||
@@ -38,7 +38,7 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
showLoopSlider ? 3 : 1
|
||||
)
|
||||
const [balance, setBalance] = React.useState<number>(10000)
|
||||
const [days, setDays] = React.useState<number>(-10)
|
||||
const [days, setDays] = React.useState<number>(-17)
|
||||
|
||||
const [customMoneyManagement, setCustomMoneyManagement] =
|
||||
React.useState<MoneyManagement>()
|
||||
@@ -58,6 +58,7 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
const { register, handleSubmit } = useForm<IBacktestsFormInput>()
|
||||
const onSubmit: SubmitHandler<IBacktestsFormInput> = async (form) => {
|
||||
const { scenarioName, tickers } = form
|
||||
console.log(customMoneyManagement)
|
||||
closeModal()
|
||||
for (let sIndex = 0; sIndex < scenarioName.length; sIndex++) {
|
||||
for (let tIndex = 0; tIndex < tickers.length; tIndex++) {
|
||||
@@ -76,7 +77,7 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
form: IBacktestsFormInput,
|
||||
ticker: string,
|
||||
scenarioName: string,
|
||||
moneyManagement: MoneyManagement | undefined,
|
||||
customMoneyManagement: MoneyManagement | undefined,
|
||||
loopCount: number
|
||||
) {
|
||||
const t = new Toast(ticker + ' is running')
|
||||
@@ -92,7 +93,7 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
balance,
|
||||
selectedMoneyManagement,
|
||||
form.save,
|
||||
selectedMoneyManagement ? undefined : moneyManagement
|
||||
showCustomMoneyManagement ? customMoneyManagement : undefined
|
||||
)
|
||||
.then((backtest: Backtest) => {
|
||||
t.update('success', `${backtest.ticker} Backtest Succeeded`)
|
||||
@@ -125,8 +126,7 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
}
|
||||
|
||||
function onMoneyManagementChange(e: any) {
|
||||
console.log(e.target.value)
|
||||
if (e.target.value == 'Custom') {
|
||||
if (e.target.value == 'custom') {
|
||||
setShowCustomMoneyManagement(true)
|
||||
} else {
|
||||
setShowCustomMoneyManagement(false)
|
||||
@@ -210,6 +210,24 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
))}
|
||||
</select>
|
||||
</FormInput>
|
||||
|
||||
<FormInput label="Timeframe" htmlFor="timeframe">
|
||||
<select
|
||||
className="select w-full max-w-xs"
|
||||
{...register('timeframe', {
|
||||
onChange(event) {
|
||||
setSelectedTimeframeEvent(event)
|
||||
},
|
||||
})}
|
||||
>
|
||||
{Object.keys(Timeframe).map((item) => (
|
||||
<option key={item} value={item}>
|
||||
{item}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</FormInput>
|
||||
|
||||
<FormInput label="Money Management" htmlFor="moneyManagement">
|
||||
<select
|
||||
className="select w-full max-w-xs"
|
||||
@@ -224,35 +242,21 @@ const BacktestModal: React.FC<BacktestModalProps> = ({
|
||||
{item.name}
|
||||
</option>
|
||||
))}
|
||||
<option key="custom" value="custom">
|
||||
Custom
|
||||
</option>
|
||||
</select>
|
||||
</FormInput>
|
||||
|
||||
<CustomMoneyManagement
|
||||
onCreateMoneyManagement={setCustomMoneyManagement}
|
||||
timeframe={selectedTimeframe || Timeframe.FiveMinutes}
|
||||
timeframe={selectedTimeframe || Timeframe.FifteenMinutes}
|
||||
showCustomMoneyManagement={showCustomMoneyManagement}
|
||||
></CustomMoneyManagement>
|
||||
|
||||
<FormInput label="Type" htmlFor="botType">
|
||||
<select className="select w-full max-w-xs" {...register('botType')}>
|
||||
{Object.keys(BotType).map((item) => (
|
||||
<option key={item} value={item}>
|
||||
{item}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
</FormInput>
|
||||
|
||||
<FormInput label="Timeframe" htmlFor="timeframe">
|
||||
<select
|
||||
className="select w-full max-w-xs"
|
||||
{...register('timeframe', {
|
||||
onChange(event) {
|
||||
setSelectedTimeframeEvent(event)
|
||||
},
|
||||
})}
|
||||
>
|
||||
{Object.keys(Timeframe).map((item) => (
|
||||
{[BotType.ScalpingBot, BotType.FlippingBot].map((item) => (
|
||||
<option key={item} value={item}>
|
||||
{item}
|
||||
</option>
|
||||
|
||||
@@ -3,6 +3,7 @@ import React, { useEffect, useState } from 'react'
|
||||
import type { MoneyManagement, Timeframe } from '../../../generated/ManagingApi'
|
||||
import { Slider } from '../../atoms'
|
||||
import FormInput from '../../mollecules/FormInput/FormInput'
|
||||
import { useCustomMoneyManagement } from '../../../app/store/customMoneyManagement'
|
||||
|
||||
type ICustomMoneyManagement = {
|
||||
onCreateMoneyManagement: (moneyManagement: MoneyManagement) => void
|
||||
@@ -15,10 +16,12 @@ const CustomMoneyManagement: React.FC<ICustomMoneyManagement> = ({
|
||||
timeframe,
|
||||
showCustomMoneyManagement,
|
||||
}) => {
|
||||
const [balanceAtRisk, setBalanceAtRisk] = useState<number>(1)
|
||||
const [leverage, setLeverage] = useState<number>(1)
|
||||
const [takeProfit, setTakeProfit] = useState<number>(1)
|
||||
const [stopLoss, setStopLoss] = useState<number>(1)
|
||||
const { moneyManagement, setCustomMoneyManagement } = useCustomMoneyManagement()
|
||||
|
||||
const [balanceAtRisk, setBalanceAtRisk] = useState<number>(moneyManagement?.balanceAtRisk || 5)
|
||||
const [leverage, setLeverage] = useState<number>(moneyManagement?.leverage || 1)
|
||||
const [takeProfit, setTakeProfit] = useState<number>(moneyManagement?.takeProfit || 2)
|
||||
const [stopLoss, setStopLoss] = useState<number>(moneyManagement?.stopLoss || 1)
|
||||
|
||||
const handleCreateMoneyManagement = () => {
|
||||
const moneyManagement: MoneyManagement = {
|
||||
@@ -30,6 +33,7 @@ const CustomMoneyManagement: React.FC<ICustomMoneyManagement> = ({
|
||||
timeframe,
|
||||
}
|
||||
onCreateMoneyManagement(moneyManagement)
|
||||
setCustomMoneyManagement(moneyManagement)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
@@ -48,51 +52,55 @@ const CustomMoneyManagement: React.FC<ICustomMoneyManagement> = ({
|
||||
<FormInput
|
||||
label="Balance at risk"
|
||||
htmlFor="balanceAtRisk"
|
||||
inline={true}
|
||||
inline={false}
|
||||
>
|
||||
<Slider
|
||||
<input
|
||||
id="balanceAtRisk"
|
||||
value={balanceAtRisk}
|
||||
onChange={(e) => setBalanceAtRisk(parseInt(e.target.value))}
|
||||
min="1"
|
||||
max="100"
|
||||
step="1"
|
||||
suffixValue=" %"
|
||||
></Slider>
|
||||
type='number'
|
||||
className='input input-bordered'
|
||||
></input>
|
||||
</FormInput>
|
||||
|
||||
<FormInput label="Leverage" htmlFor="leverage" inline={true}>
|
||||
<Slider
|
||||
<FormInput label="Leverage" htmlFor="leverage" inline={false}>
|
||||
<input
|
||||
id="leverage"
|
||||
value={leverage}
|
||||
max="50"
|
||||
min="1"
|
||||
step="1"
|
||||
onChange={(e: any) => setLeverage(e.target.value)}
|
||||
prefixValue="x "
|
||||
></Slider>
|
||||
type='number'
|
||||
className='input input-bordered'
|
||||
></input>
|
||||
</FormInput>
|
||||
|
||||
<FormInput label="TP %" htmlFor="takeProfit" inline={true}>
|
||||
<Slider
|
||||
<FormInput label="TP %" htmlFor="takeProfit" inline={false}>
|
||||
<input
|
||||
id="takeProfit"
|
||||
value={takeProfit}
|
||||
onChange={(e: any) => setTakeProfit(e.target.value)}
|
||||
step="0.01"
|
||||
max="20"
|
||||
suffixValue=" %"
|
||||
></Slider>
|
||||
type='number'
|
||||
className='input input-bordered'
|
||||
></input>
|
||||
</FormInput>
|
||||
|
||||
<FormInput label="SL %" htmlFor="stopLoss" inline={true}>
|
||||
<Slider
|
||||
<FormInput label="SL %" htmlFor="stopLoss" inline={false}>
|
||||
<input
|
||||
id="stopLoss"
|
||||
value={stopLoss}
|
||||
onChange={(e: any) => setStopLoss(e.target.value)}
|
||||
step="0.01"
|
||||
max="20"
|
||||
suffixValue=" %"
|
||||
></Slider>
|
||||
type='number'
|
||||
className='input input-bordered'
|
||||
></input>
|
||||
</FormInput>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,11 +16,7 @@ export default class AuthorizedApiBase {
|
||||
|
||||
transformOptions = (options: any): Promise<RequestInit> => {
|
||||
const cookies = new Cookies()
|
||||
|
||||
// Retrieve the bearer token from the cookies
|
||||
const bearerToken = cookies.get('token')
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(bearerToken)
|
||||
if (bearerToken) {
|
||||
options.headers.Authorization = `Bearer ${bearerToken}`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user