Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
ai
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
ai
Commits
2e892d60
Commit
2e892d60
authored
Jul 26, 2022
by
Ahmad Nemati
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git pull
parent
c3da859b
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
465 additions
and
2 deletions
+465
-2
test_json.js
test_json.js
+2
-2
trade.js
trade.js
+463
-0
No files found.
test_json.js
View file @
2e892d60
let
_
=
require
(
'
lodash
'
)
let
_
=
require
(
'
lodash
'
)
let
fs
=
require
(
'
fs
'
)
let
fs
=
require
(
'
fs
'
)
let
t
=
'
0,00:00,Buy,BTCUSDT,22163.4,21639.7,2022.07.25 22:54:00.000,-2.362904608498699,0.2580831460876974,-2.9887111183302264
'
let
t
=
'
btc1&7&5.8&9_btcLp1819RZDD75_2.908100846521906_-1.5056680161943328_RunupZeroDrawDown_7.5
'
// t='0,00:00,Sell,BTCUSDT,22374.3,22133.6,2022.07.25 20:09:00.000,-1.0757878458767458,3.708719378930288,-0.23062174012147219'
// t='0,00:00,Sell,BTCUSDT,22374.3,22133.6,2022.07.25 20:09:00.000,-1.0757878458767458,3.708719378930288,-0.23062174012147219'
t
=
t
.
split
(
'
,
'
)
t
=
t
.
split
(
'
_
'
)
for
(
let
i
=
0
;
i
<
t
.
length
;
i
++
)
for
(
let
i
=
0
;
i
<
t
.
length
;
i
++
)
console
.
log
(
i
,
t
[
i
])
console
.
log
(
i
,
t
[
i
])
...
...
trade.js
0 → 100644
View file @
2e892d60
let
fs
=
require
(
'
fs
'
)
var
watch
=
require
(
'
node-watch
'
);
let
ai
=
require
(
'
./ai-new
'
)
let
path
=
'
E:
\\
YashilFinal
\\
'
let
longSide
=
'
LONG
'
let
shortSide
=
'
SHORT
'
let
bybit
=
require
(
'
./test_bybit
'
)
let
zignaly
=
require
(
'
./zignaly
'
)
let
redis
=
require
(
'
redis
'
)
const
client
=
redis
.
createClient
(
{
url
:
'
redis://default:p@db.zignaly.xyz:7001
'
}
);
let
datas
=
[]
let
balance
=
0
const
ccxt
=
require
(
'
ccxt
'
)
let
exchange
let
info
init
()
async
function
init
()
{
client
.
on
(
'
error
'
,
(
err
)
=>
console
.
log
(
'
Redis Client Error
'
,
err
));
await
client
.
connect
();
info
=
await
fs
.
readFileSync
(
'
info2.json
'
,
'
utf8
'
);
info
=
JSON
.
parse
(
info
)
exchange
=
new
ccxt
.
bybit
({
apiKey
:
info
.
apiKey
,
secret
:
info
.
secret
,
enableRateLimit
:
true
,
})
// exchange.urls['api'] = exchange.urls['test'];
run
()
balanceUpdater
()
}
async
function
balanceUpdater
()
{
try
{
let
d
=
await
exchange
.
fetchFreeBalance
()
if
(
d
.
USDT
!==
balance
)
{
balance
=
d
.
USDT
appendBalanceProfitLog
(
balance
)
}
}
catch
(
e
)
{
}
await
sleep
(
60000
)
return
balanceUpdater
()
}
async
function
run
()
{
let
files
=
await
fs
.
readdirSync
(
path
)
for
(
let
i
=
0
;
i
<
files
.
length
;
i
++
)
{
if
(
!
files
[
i
].
includes
(
'
Lp
'
))
continue
let
fl
=
files
[
i
].
split
(
'
_
'
)
let
pair
=
'
BTCUSDT
'
// console.log(pair)
let
avgRunup
=
parseFloat
(
fl
[
2
])
let
avgDrawDown
=
parseFloat
(
fl
[
3
])
let
lastFile
=
await
fs
.
readFileSync
(
path
+
files
[
i
],
'
utf8
'
)
let
stats
=
await
fs
.
statSync
(
path
+
files
[
i
])
lastFile
=
lastFile
.
split
(
'
\n
'
)
// console.log(lastFile[lastFile.length - 2])
let
data
=
grabData
(
lastFile
)
let
vars
=
ai
.
run
(
data
,
avgRunup
,
avgDrawDown
)
let
sp
=
files
[
i
].
split
(
'
_
'
)
let
id
=
sp
[
0
]
let
usage
=
sp
[
4
]
let
value
=
parseFloat
(
sp
[
4
])
let
qty
=
0.001
//console.log(vars.VarProfitDrawDownZeroProfit)
datas
.
push
({
name
:
files
[
i
],
size
:
stats
.
size
,
pair
:
pair
,
vars
:
vars
,
id
:
id
,
usage
:
usage
,
value
:
(
-
1
*
value
),
avgRunup
:
avgRunup
,
avgDrawDown
:
avgDrawDown
,
qty
:
qty
})
}
// checker()
console
.
log
(
datas
)
}
function
grabData
(
data
)
{
// console.log(data)
let
arr
=
[]
for
(
let
i
=
0
;
i
<
data
.
length
;
i
++
)
{
try
{
let
d
=
data
[
i
].
split
(
'
,
'
)
let
profit
=
parseFloat
(
d
[
7
])
let
runUp
=
parseFloat
(
d
[
8
])
let
drawDown
=
parseFloat
(
d
[
9
])
let
t
=
d
[
6
]
t
=
t
.
split
(
'
:
'
)
let
closeTime
=
t
[
0
]
+
'
:
'
+
t
[
1
]
if
(
isNaN
(
profit
))
continue
arr
.
push
({
profit
,
runUp
,
drawDown
,
closeTime
})
}
catch
(
e
)
{
}
}
return
arr
}
async
function
checker
()
{
let
arr
=
[]
// console.log('check')
let
files
=
await
fs
.
readdirSync
(
path
)
for
(
let
i
=
0
;
i
<
files
.
length
;
i
++
)
{
if
(
!
files
[
i
].
includes
(
'
Lp
'
))
continue
arr
.
push
(
make
(
files
[
i
]))
}
await
Promise
.
all
(
arr
)
await
sleep
(
50
)
return
checker
()
}
async
function
make
(
name
)
{
let
stats
=
await
fs
.
statSync
(
path
+
name
)
let
size
=
getSizeFromName
(
name
)
if
(
size
!==
stats
.
size
)
{
// console.log(name + ' changes')
updateSizeFromName
(
name
,
stats
.
size
)
await
updateVars
(
name
)
}
}
async
function
updateVars
(
name
)
{
let
lastFile
=
await
fs
.
readFileSync
(
path
+
name
,
'
utf8
'
)
lastFile
=
lastFile
.
split
(
'
\n
'
)
let
lastData
=
lastFile
[
lastFile
.
length
-
2
]
let
sig
=
''
let
allData
=
getAllFromName
(
name
)
if
(
lastData
.
includes
(
'
Buy
'
))
sig
=
allData
.
id
+
'
_Buy
'
else
sig
=
allData
.
id
+
'
_Sell
'
let
data
=
grabData
([
lastData
])
closer
(
sig
,
data
[
0
].
closeTime
,
data
[
0
],
allData
.
id
,
allData
.
pair
)
let
vars
=
ai
.
run
(
data
,
allData
.
avgRunup
,
allData
.
avgDrawdown
,
getVarsFromName
(
name
))
let
varUsage
=
getVarFromUsage
(
vars
,
allData
.
usage
)
console
.
log
(
allData
.
id
,
allData
.
usage
,
allData
.
value
,
varUsage
)
if
(
varUsage
<
allData
.
value
)
{
// console.log(allData.id +' '+'Try Add usage:'+allData.usage +' with current var '+varUsage +' and less than '+allData.value)
if
(
lastData
.
includes
(
'
Buy
'
))
sig
=
allData
.
id
+
'
_Sell
'
else
sig
=
allData
.
id
+
'
_Buy
'
adder
(
sig
,
allData
.
qty
,
data
[
0
].
closeTime
,
data
[
0
],
allData
.
pair
)
}
// console.log(name,vars)
updateVarsFromName
(
name
,
vars
)
}
function
getVarFromUsage
(
vars
,
usage
)
{
if
(
usage
===
'
fft
'
)
{
return
vars
.
countDrop
}
else
if
(
usage
===
'
ddPlusRunCount
'
)
{
return
vars
.
drawDownPlusRunUpCount
}
else
if
(
usage
===
'
ProfitZeroProfit
'
)
{
return
vars
.
allLossProfit
}
else
if
(
usage
===
'
RunupDrawDownZeroRunupDrawDown
'
)
{
return
vars
.
drawDownPlusRunUpPercent
}
else
if
(
usage
===
'
ProfitZeroDrawDown
'
)
{
return
vars
.
ProfitZeroDrawDownPercent
}
else
if
(
usage
===
'
fftRunup
'
)
{
return
vars
.
countDropRunup
}
else
if
(
usage
===
'
ProfitZeroDrawDownProfit
'
)
{
return
vars
.
diffDrawdownProfitAll
}
else
if
(
usage
===
'
ProfitZeroProfitRunup
'
)
{
return
vars
.
canCreateRunupPercent
}
else
if
(
usage
===
'
ProfitZeroRunupProfit
'
)
{
return
vars
.
VarProfitZeroRunupProfit
}
else
if
(
usage
===
'
ProfitZeroRunupDrawDown
'
)
{
return
vars
.
VarProfitZeroRunupDrawDown
}
else
if
(
usage
===
'
RunUpDrawDownZeroProfit
'
)
{
return
vars
.
RunUpDrawDownAllLossProfit
}
else
if
(
usage
===
'
RunUpDrawDownZeroDrawDownProfit
'
)
{
return
vars
.
RunupDrawDownDiffDrawdownProfitAll
}
else
if
(
usage
===
'
RunUpDrawDownZeroDrawdown
'
)
{
return
vars
.
runUpDrawDownZeroDrawDownPercent
}
else
if
(
usage
===
'
RunUpDrawDownZeroRunupProfit
'
)
{
return
vars
.
VarDrawDownZeroProfit
}
else
if
(
usage
===
'
RunupZeroRunupDrawDown
'
)
{
return
vars
.
VarRunupZeroRunupDrawDown
}
else
if
(
usage
===
'
RunupZeroProfit
'
)
{
return
vars
.
VarRunupZeroProfit
}
else
if
(
usage
===
'
RunupZeroProfitDrawDown
'
)
{
return
vars
.
VarRunupZeroProfitDrawDown
}
else
if
(
usage
===
'
RunupZeroDrawDown
'
)
{
return
vars
.
VarRunupZeroDrawDown
}
else
if
(
usage
===
'
RunupZeroProfitRunup
'
)
{
return
vars
.
VarRunupZeroProfitRunup
}
else
if
(
usage
===
'
DrawDownZeroDrawDown
'
)
{
return
vars
.
VarDrawDownZeroDrawDown
}
else
if
(
usage
===
'
DrawDownnZeroProfit
'
)
{
return
vars
.
VarDrawDownnZeroProfit
}
else
if
(
usage
===
'
DrawDownZeroProfitDrawDown
'
)
{
return
vars
.
VarDrawDownZeroProfitDrawDown
}
else
if
(
usage
===
'
DrawDownZeroProfitRunup
'
)
{
return
vars
.
VarDrawDownZeroProfitRunup
}
else
if
(
usage
===
'
DrawDownZeroRunupDrawDown
'
)
{
return
vars
.
VarDrawDownZeroRunupDrawDown
}
else
if
(
usage
===
'
ProfitDrawDownZeroDrawDown
'
)
{
return
vars
.
VarProfitDrawDownZeroDrawDown
}
else
if
(
usage
===
'
ProfitDrawDownZeroProfit
'
)
{
return
vars
.
VarProfitDrawDownZeroProfit
}
else
if
(
usage
===
'
ProfitDrawDownZeroProfitDrawDown
'
)
{
return
vars
.
VarProfitDrawDownZeroProfitDrawDown
}
else
if
(
usage
===
'
ProfitDrawDownZeroProfitRunup
'
)
{
return
vars
.
VarProfitDrawDownZeroProfitRunup
}
else
if
(
usage
===
'
ProfitDrawDownZeroRunupDrawDown
'
)
{
return
vars
.
VarProfitDrawDownZeroRunupDrawDown
}
else
if
(
usage
===
'
ProfitRunupZeroDrawDown
'
)
{
return
vars
.
VarProfitRunupZeroDrawDown
}
else
if
(
usage
===
'
ProfitRunupZeroProfit
'
)
{
return
vars
.
VarProfitRunupZeroProfit
}
else
if
(
usage
===
'
ProfitRunupZeroProfitDrawDown
'
)
{
return
vars
.
VarProfitRunupZeroProfitDrawDown
}
else
if
(
usage
===
'
ProfitRunupZeroProfitRunup
'
)
{
return
vars
.
VarProfitRunupZeroProfitRunup
}
else
if
(
usage
===
'
ProfitRunupZeroRunupDrawDown
'
)
{
return
vars
.
VarProfitRunupZeroRunupDrawDown
}
}
async
function
closer
(
sig
,
date
,
bigData
,
id
,
pair
)
{
let
lastToken
=
sig
+
'
_2
'
+
date
lastToken
=
lastToken
.
replace
(
/_/g
,
''
).
replace
(
/Lp/g
,
''
).
replace
(
/BTC/g
,
''
).
replace
(
/ /g
,
''
)
const
[
data
,
delStatus
]
=
await
client
.
multi
()
.
get
(
info
.
apiKey
+
'
_
'
+
sig
)
.
del
(
info
.
apiKey
+
'
_
'
+
sig
)
.
exec
();
if
(
delStatus
!==
1
)
{
return
}
let
d
let
newData
=
JSON
.
parse
(
data
)
let
qty
=
newData
.
qty
console
.
log
(
'
try reduce
'
,
sig
,
qty
)
if
(
sig
.
includes
(
'
Buy
'
))
{
try
{
d
=
await
exchange
.
createMarketOrder
(
pair
,
'
Sell
'
,
qty
,
0
,
{
reduceOnly
:
true
,
order_link_id
:
lastToken
})
}
catch
(
e
)
{
try
{
d
=
await
exchange
.
createMarketOrder
(
pair
,
'
Sell
'
,
qty
,
0
,
{
reduceOnly
:
true
,
order_link_id
:
lastToken
})
}
catch
(
e
)
{
console
.
log
(
'
Error ->
'
,
sig
,
qty
,
'
Sell
'
,
'
Reduce true
'
)
}
}
}
else
{
try
{
d
=
await
exchange
.
createMarketOrder
(
pair
,
'
Buy
'
,
qty
,
0
,
{
reduceOnly
:
true
,
order_link_id
:
lastToken
})
}
catch
(
e
)
{
try
{
d
=
await
exchange
.
createMarketOrder
(
pair
,
'
Buy
'
,
qty
,
0
,
{
reduceOnly
:
true
,
order_link_id
:
lastToken
})
}
catch
(
e
)
{
console
.
log
(
'
Error ->
'
,
sig
,
qty
,
'
Buy
'
)
}
}
}
// await sleep(60000)
// d = await exchange.fetchOrder(d.id, d.info.symbol)
// let profit = getCalculateProfit(newData.price, d.average)
// if (newData.side === 'sell')
// profit = profit * -1
//
// let det = 'side:' + newData.side + ' bybit open price:' + newData.price + ' bybit close price:' + d.average
//
// let t = id + ' :' + det + ' bybit profit:' + ' ' + profit + ' yashil profit:' + bigData.profit + ' diff:' + (profit - bigData.profit)
// appendDiffProfitLog(t)
}
async
function
adder
(
sig
,
qty
,
date
,
allData
,
pair
)
{
let
lastToken
=
sig
+
'
_
'
+
date
if
(
pair
===
'
BNBUSDT
'
)
qty
=
0.06
else
if
(
pair
===
'
BTCUSDT
'
)
qty
=
0.001
else
if
(
pair
===
'
ETHUSDT
'
)
qty
=
0.01
lastToken
=
lastToken
.
replace
(
/_/g
,
''
).
replace
(
/Lp/g
,
''
).
replace
(
/BTC/g
,
''
).
replace
(
/ETH/g
,
''
).
replace
(
/eth/g
,
''
).
replace
(
/BNB/g
,
''
).
replace
(
/bnb/g
,
''
).
replace
(
/ /g
,
''
)
console
.
log
(
'
Add db and ex :
'
,
lastToken
)
let
d
// console.log(pair,qty)
if
(
sig
.
includes
(
'
Buy
'
))
{
d
=
await
exchange
.
createMarketOrder
(
pair
,
'
Buy
'
,
qty
,
0
,
{
order_link_id
:
lastToken
})
// console.log('Add Suc With id',sig)
}
else
{
d
=
await
exchange
.
createMarketOrder
(
pair
,
'
Sell
'
,
qty
,
0
,
{
order_link_id
:
lastToken
})
// console.log('Add Suc With id',sig)
}
if
(
typeof
d
.
id
!==
"
undefined
"
)
{
console
.
log
(
'
Add Suc With id
'
,
d
.
id
,
sig
)
const
[
add
]
=
await
client
.
multi
()
.
set
(
info
.
apiKey
+
'
_
'
+
sig
,
JSON
.
stringify
({
pair
:
d
.
info
.
symbol
,
side
:
d
.
side
,
qty
:
d
.
amount
,
price
:
d
.
price
}))
.
exec
();
}
// console.log(d)
// if (typeof d.id !== "undefined") {
// await sleep(60000)
// try {
// d = await exchange.fetchOrder(d.id, d.info.symbol)
// console.log('Add Suc With id', d.id, sig)
// const [add] = await client
// .multi()
// .set(sig, JSON.stringify({pair: d.info.symbol, side: d.side, qty: d.amount, price: d.average}))
// .exec();
// }
// catch (e)
// {
//
// console.log('Add Suc With id', d.id, sig)
// console.log(sig,'Have Problem Reding Order so try offline')
// const [add] = await client
// .multi()
// .set(sig, JSON.stringify({pair: d.info.symbol, side: d.side, qty: d.amount, price: d.price}))
// .exec();
// }
//
// }
}
function
getVarsFromName
(
name
)
{
for
(
let
i
=
0
;
i
<
datas
.
length
;
i
++
)
if
(
datas
[
i
].
name
===
name
)
return
datas
[
i
].
vars
}
function
getSizeFromName
(
name
)
{
for
(
let
i
=
0
;
i
<
datas
.
length
;
i
++
)
if
(
datas
[
i
].
name
===
name
)
return
datas
[
i
].
size
}
function
getAllFromName
(
name
)
{
for
(
let
i
=
0
;
i
<
datas
.
length
;
i
++
)
if
(
datas
[
i
].
name
===
name
)
return
datas
[
i
]
}
function
updateVarsFromName
(
name
,
vars
)
{
for
(
let
i
=
0
;
i
<
datas
.
length
;
i
++
)
if
(
datas
[
i
].
name
===
name
)
datas
[
i
].
vars
=
vars
}
function
updateSizeFromName
(
name
,
size
)
{
for
(
let
i
=
0
;
i
<
datas
.
length
;
i
++
)
if
(
datas
[
i
].
name
===
name
)
datas
[
i
].
size
=
size
}
async
function
sleep
(
millis
)
{
return
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
millis
));
}
function
getCalculateProfit
(
basePrice
,
value
)
{
return
((
value
-
basePrice
)
/
basePrice
)
*
100
}
function
appendDiffProfitLog
(
log
)
{
fs
.
appendFile
(
'
C:
\\
Users
\\
Administrator
\\
.pm2
\\
logs
\\
change-profit-diff.txt
'
,
log
+
'
\n
'
,
function
(
err
)
{
if
(
err
)
throw
err
;
});
}
function
appendBalanceProfitLog
(
log
)
{
fs
.
appendFile
(
'
C:
\\
Users
\\
Administrator
\\
.pm2
\\
logs
\\
change-balance.txt
'
,
log
+
'
\n
'
,
function
(
err
)
{
if
(
err
)
throw
err
;
});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment