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:
Oda
2025-02-04 14:59:39 +07:00
committed by GitHub
parent ff0433c349
commit 0987fa76cf
26 changed files with 153 additions and 139 deletions

View 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,
}))
},
}))

View File

@@ -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')

View File

@@ -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>

View File

@@ -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>

View File

@@ -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}`
}