USDT base asset

This commit is contained in:
Matias committed 2019-07-20 07:31:29 -03:00
1 parent e7d9d07692
commit 9c34cf7b28
7 files changed
+121 -83

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@superalgos/operations-client",
"version": "0.0.38",
"version": "0.0.41",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+10 -20
View File
@@ -1,18 +1,3 @@
const availableMonths = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
]
const availableTimePeriods = ["24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs", "45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min"]
const tradingStartModes = {
@@ -42,9 +27,6 @@ const indicatorProcessNames = {
Market: 'Multi-Period-Market'
}
const tradingProcessNames = {
TradingProcess: "Trading-Process"
}
const botTypes = {
Trading: "Trading",
@@ -57,7 +39,15 @@ const exchanges = {
Poloniex: "Poloniex"
}
const markets = {
USDT_BTC: "USDT_BTC"
}
const baseAssets = {
assetA: "USDT",
assetB: "BTC"
}
export {
tradingStartModes, tradingStartModesList, exchanges, indicatorStartModes, availableMonths,
availableTimePeriods, sensorProcessNames, indicatorProcessNames, tradingProcessNames, botTypes
tradingStartModes, tradingStartModesList, exchanges, indicatorStartModes, availableTimePeriods, sensorProcessNames, indicatorProcessNames, botTypes, markets, baseAssets
}
-8
View File
@@ -73,11 +73,3 @@ export function slugify (string) {
.replace(/-+$/, '') // Trim - from end of text
}
export function getIndicatorYears () {
const localDate = new Date()
let availableYears = []
for (var i = 2015; i <= localDate.getUTCFullYear(); i++) {
availableYears[i - 2015] = i
}
return availableYears
}
+81 -45
View File
@@ -6,10 +6,10 @@ import TopBar from '../../BannerTopBar'
import { withStyles } from '@material-ui/core/styles'
import classNames from 'classnames'
import styles from './styles'
import { isDefined, getIndicatorYears } from '../../../utils'
import { isDefined } from '../../../utils'
import {
tradingStartModes, indicatorStartModes, availableMonths, availableTimePeriods,
sensorProcessNames, indicatorProcessNames, tradingProcessNames, botTypes, exchanges
tradingStartModes, availableTimePeriods,
sensorProcessNames, indicatorProcessNames, botTypes, exchanges, markets, baseAssets
} from '../../../GraphQL/models'
import {
@@ -28,10 +28,10 @@ class AddClone extends Component {
this.state = {
user: JSON.parse(user),
selectedBot: { 'id': '' },
mode: "noTime",
mode: tradingStartModes.backtest,
resumeExecution: false,
beginDatetime: DateTime.local().minus({ days: 8 }).startOf('day'),
endDatetime: DateTime.local(),
beginDatetime: DateTime.utc().minus({ days: 8 }).startOf('day'),
endDatetime: DateTime.utc(),
waitTime: 1,
state: '',
stateDatetime: 0,
@@ -43,7 +43,9 @@ class AddClone extends Component {
processName: indicatorProcessNames.Daily,
accessCodeOption: false,
accessCode: '',
balanceAssetB: 0.001,
baseAssetBalance: 0,
market: markets.USDT_BTC,
baseAsset: baseAssets.assetA,
// Indicator Bot
startYear: 2019,
@@ -51,7 +53,7 @@ class AddClone extends Component {
month: 1,
//TradingBot
timePeriod: '01-hs',
timePeriod: '',
//Error handlers
botError: false,
@@ -62,7 +64,7 @@ class AddClone extends Component {
processNameError: false,
keyIdError: false,
accessCodeError: false,
balanceAssetBError: false
baseAssetBalanceError: false
}
}
@@ -176,8 +178,51 @@ class AddClone extends Component {
))}
</TextField>
<TextField label="Simulation Time Period Output to use"
select
className={classNames(classes.margin, classes.textField, classes.form)}
value={this.state.timePeriod}
onChange={(e) => this.setState({ timePeriod: e.target.value })}
fullWidth
>
{availableTimePeriods.map((option, index) => (
<MenuItem key={index} value={option}>
{option}
</MenuItem>
))}
</TextField>
{this.state.selectedBot.kind === botTypes.Trading &&
<React.Fragment>
<TextField label="Market"
select
className={classNames(classes.margin, classes.textField, classes.form)}
value={this.state.market}
onChange={(e) => this.setState({ market: e.target.value })}
fullWidth
>
{Object.keys(markets).map((option, index) => (
<MenuItem key={index} value={option}>
{option}
</MenuItem>
))}
</TextField>
<TextField label="Base Asset"
select
className={classNames(classes.margin, classes.textField, classes.form)}
value={this.state.baseAsset}
onChange={(e) => this.setState({ baseAsset: e.target.value })}
fullWidth
>
{Object.keys(baseAssets).map((option, index) => (
<MenuItem key={index} value={option}>
{baseAssets[option]}
</MenuItem>
))}
</TextField>
<Typography className={classes.typography} variant='subtitle1' align='justify'>
Available Running Modes are Backtest and Live.
<ul>
@@ -293,7 +338,7 @@ class AddClone extends Component {
<Typography className={classes.typography} variant='subtitle1' align='justify'>
Because we are still in early alpha-testing phase,
Live Trading Clones are limited to an initial investment
of 0.001 BTC. If you choose to run this bot or any modified
of 0.001 BTC or 10 USDT. If you choose to run this bot or any modified
version of the code, you are doing it at your own risk.
</Typography>
@@ -328,35 +373,17 @@ class AddClone extends Component {
/>
<TextField
label="BTC Initial Balance"
label="Initial Balance"
className={classNames(classes.margin, classes.textField, classes.form)}
value={this.state.balanceAssetB}
onChange={(e) => this.setState({ balanceAssetB: e.target.value })}
onBlur={(e) => this.setState({ balanceAssetBError: false })}
error={this.state.balanceAssetBError}
value={this.state.baseAssetBalance}
onChange={(e) => this.setState({ baseAssetBalance: e.target.value })}
onBlur={(e) => this.setState({ baseAssetBalanceError: false })}
error={this.state.baseAssetBalanceError}
fullWidth
/>
</React.Fragment>
}
<Typography className={classes.typography} variant='subtitle1' align='justify'>
The Time Period in which the bot will operate.
</Typography>
<TextField label="Time Period"
select
className={classNames(classes.margin, classes.textField, classes.form)}
value={this.state.timePeriod}
onChange={(e) => this.setState({ timePeriod: e.target.value })}
fullWidth
>
{availableTimePeriods.map((option, index) => (
<MenuItem key={index} value={option}>
{option}
</MenuItem>
))}
</TextField>
</React.Fragment>
}
@@ -400,7 +427,7 @@ class AddClone extends Component {
</React.Fragment>
}
{(this.state.mode === "noTime" && this.state.selectedBot.kind !== botTypes.Sensor) &&
{(this.state.mode === "noTime" && this.state.selectedBot.kind === botTypes.Indicator) &&
<React.Fragment>
<Typography className={classes.typography} variant='subtitle1' align='justify'>
The Resume Execution option let's you pick up the context of
@@ -525,21 +552,27 @@ class AddClone extends Component {
if (this.state.selectedBot.kind === "Trading") {
variables.clone.processName = 'Trading-Process'
variables.clone.timePeriod = this.state.timePeriod
variables.clone.baseAsset = this.state.baseAsset
variables.clone.market = this.state.market
if (this.state.mode === "backtest") {
variables.clone.beginDatetime = this.state.beginDatetime.valueOf() / 1000 | 0
variables.clone.endDatetime = this.state.endDatetime.valueOf() / 1000 | 0
let beginDate = DateTime.fromISO(this.state.beginDatetime.toISO({ includeOffset: false }), { zone: "UTC" });
let endDate = DateTime.fromISO(this.state.endDatetime.toISO({ includeOffset: false }), { zone: "UTC" });
variables.clone.beginDatetime = beginDate.valueOf() / 1000 | 0
variables.clone.endDatetime = endDate.valueOf() / 1000 | 0
variables.clone.waitTime = this.state.waitTime
} else {
variables.clone.keyId = this.state.keyId
variables.clone.accessCode = this.state.accessCode
variables.clone.balanceAssetB = Number(this.state.balanceAssetB)
variables.clone.baseAssetBalance = Number(this.state.baseAssetBalance)
}
} else {
let beginDate = DateTime.fromISO(this.state.beginDatetime.toISO({ includeOffset: false }), { zone: "UTC" });
variables.clone.processName = this.state.processName
variables.clone.startYear = this.state.startYear
variables.clone.endYear = this.state.endYear
variables.clone.month = this.state.month
variables.clone.beginDatetime = this.state.beginDatetime.valueOf() / 1000 | 0
variables.clone.beginDatetime = beginDate.valueOf() / 1000 | 0
}
return this.props.addCloneMutation({
@@ -561,8 +594,8 @@ class AddClone extends Component {
selectedBot: { 'id': '' },
mode: 'noTime',
resumeExecution: false,
beginDatetime: DateTime.local().minus({ days: 8 }).startOf('day'),
endDatetime: DateTime.local(),
beginDatetime: DateTime.utc().minus({ days: 8 }).startOf('day'),
endDatetime: DateTime.utc(),
waitTime: 1,
state: '',
stateDatetime: 0,
@@ -574,7 +607,9 @@ class AddClone extends Component {
keyId: '',
accessCodeOption: false,
accessCode: '',
balanceAssetB: 0.001,
baseAssetBalance: 0,
market: markets.USDT_BTC,
baseAsset: baseAssets.assetA,
// Indicator Bot
startYear: 2019,
@@ -582,7 +617,7 @@ class AddClone extends Component {
month: 1,
//TradingBot
timePeriod: '01-hs',
timePeriod: '',
//Error handlers
botError: false,
@@ -593,7 +628,7 @@ class AddClone extends Component {
processNameError: false,
keyIdError: false,
accessCodeError: false,
balanceAssetBError: false
baseAssetBalanceError: false
})
};
@@ -632,15 +667,16 @@ class AddClone extends Component {
isError = true
this.setState(state => ({ accessCodeError: true }));
}
if (this.state.balanceAssetB.length < 1 || isNaN(this.state.balanceAssetB)) {
if (this.state.baseAssetBalance.length < 1 || isNaN(this.state.baseAssetBalance)) {
isError = true
this.setState(state => ({ balanceAssetBError: true }));
this.setState(state => ({ baseAssetBalanceError: true }));
}
}
return isError;
}
}
export default compose(
+4
View File
@@ -94,6 +94,10 @@ const createClone = async (clone) => {
'value': datasetNames().get(clone.timePeriod)
})
env.push({
'name': 'BASE_ASSET',
'value': clone.baseAsset
})
env.push({
'name': 'INITIAL_BALANCE_ASSET_A',
'value': clone.balanceAssetA.toString()
@@ -52,13 +52,28 @@ const resolve = async (parent, { clone }, context) => {
// TODO Temporary Limitations on bot creation
if (clone.accessCode !== undefined && clone.accessCode.length > 0) {
if (clone.accessCode === process.env.ACCESS_CODE) {
clone.balanceAssetA = Number(process.env.DEFAULT_BALANCE_ASSET_A)
if (clone.baseAsset === 'assetB') {
clone.balanceAssetA = 0
clone.balanceAssetB = clone.balanceBaseAsset
} else if (clone.baseAsset === 'assetA') {
clone.balanceAssetA = clone.balanceBaseAsset
clone.balanceAssetB = 0
} else {
throw new Error('Invalid base asset.')
}
} else {
throw new Error('Invalid access code.')
}
} else {
clone.balanceAssetA = Number(process.env.DEFAULT_BALANCE_ASSET_A)
clone.balanceAssetB = Number(process.env.DEFAULT_BALANCE_ASSET_B)
if (clone.baseAsset === 'assetB') {
clone.balanceAssetA = 0
clone.balanceAssetB = Number(process.env.DEFAULT_BALANCE_ASSET_B)
} else if (clone.baseAsset === 'assetA') {
clone.balanceAssetA = Number(process.env.DEFAULT_BALANCE_ASSET_A)
clone.balanceAssetB = 0
} else {
throw new Error('Invalid base asset.')
}
}
if (!(clone.teamSlug === "AAMasters" || clone.teamSlug === "AAVikings")) {
@@ -94,15 +109,15 @@ const resolve = async (parent, { clone }, context) => {
await createKubernetesClone(clone)
if(clone.botType === Trading){
if (clone.botType === Trading) {
let productCodeName
if(clone.mode === LIVE){
if (clone.mode === LIVE) {
productCodeName = 'Live Trading History'
}
if(clone.mode === COMPETITION){
if (clone.mode === COMPETITION) {
productCodeName = 'Competition Trading History'
}
if(clone.mode === BACKTEST){
if (clone.mode === BACKTEST) {
productCodeName = 'Backtest Trading History'
}
+3 -2
View File
@@ -27,8 +27,9 @@ const Type = new GraphQLInputObjectType({
keyId: { type: GraphQLString },
timePeriod: { type: GraphQLString },
exchangeName: { type: GraphQLString },
balanceAssetA: { type: GraphQLFloat },
balanceAssetB: { type: GraphQLFloat },
balanceBaseAsset: { type: GraphQLFloat },
market: { type: GraphQLString },
baseAsset: { type: GraphQLString },
accessCode: { type: GraphQLString }
})
})