Commit 7baf508c authored by Ahmad Nemati's avatar Ahmad Nemati

git pull

parent e5d15cf2
let fs = require('fs') let fs = require('fs')
var watch = require('node-watch'); var watch = require('node-watch');
let ai = require('./ai-new') let ai = require('./ai-new')
let db=require('./db') let db = require('./db')
let path = 'YashilFinal/' let path = 'YashilFinal/'
let longSide = 'LONG' let longSide = 'LONG'
let shortSide = 'SHORT' let shortSide = 'SHORT'
...@@ -18,7 +18,6 @@ let balance = 0 ...@@ -18,7 +18,6 @@ let balance = 0
const ccxt = require('ccxt') const ccxt = require('ccxt')
let info let info
let accs let accs
var cors = require('cors') var cors = require('cors')
...@@ -27,7 +26,7 @@ let express = require('express'); ...@@ -27,7 +26,7 @@ let express = require('express');
let moment = require('moment-timezone') let moment = require('moment-timezone')
let app = express(); let app = express();
let files=[] let files = []
var bodyParser = require('body-parser') var bodyParser = require('body-parser')
...@@ -51,7 +50,7 @@ app.post('/signal', (req, res) => { ...@@ -51,7 +50,7 @@ app.post('/signal', (req, res) => {
res.send('Done') res.send('Done')
console.log(req.body) console.log(req.body)
analyse(req.body) analyse(req.body)
}) })
...@@ -60,34 +59,28 @@ app.post('/', (req, res) => { ...@@ -60,34 +59,28 @@ app.post('/', (req, res) => {
res.send('Done') res.send('Done')
console.log(req.body) console.log(req.body)
analyse(req.body) analyse(req.body)
}) })
async function init() { async function init() {
files = await fs.readdirSync('YashilFinal') files = await fs.readdirSync('YashilFinal')
client.on('error', (err) => console.log('Redis Client Error', err)); client.on('error', (err) => console.log('Redis Client Error', err));
await client.connect(); await client.connect();
accs=await db.getAllAccounts() accs = await db.getAllAccounts()
for (let i=0;i<accs.length;i++) for (let i = 0; i < accs.length; i++) {
{ let exchange = new ccxt.bybit({
let exchange = new ccxt.bybit({
apiKey: accs[i].key, apiKey: accs[i].key,
secret: accs[i].secret, secret: accs[i].secret,
enableRateLimit: true, enableRateLimit: true,
}) })
if (accs[i].testnet ===1) if (accs[i].testnet === 1)
exchange.urls['api'] = exchange.urls['test']; exchange.urls['api'] = exchange.urls['test'];
accs[i].exchange=exchange accs[i].exchange = exchange
} }
// info = await fs.readFileSync('info2.json', 'utf8'); // info = await fs.readFileSync('info2.json', 'utf8');
// info = JSON.parse(info) // info = JSON.parse(info)
...@@ -98,21 +91,18 @@ async function init() { ...@@ -98,21 +91,18 @@ async function init() {
// //
// }) // })
// exchange.urls['api'] = exchange.urls['test']; // exchange.urls['api'] = exchange.urls['test'];
// run() run()
balanceUpdater() balanceUpdater()
dbEquityUpdater() dbEquityUpdater()
} }
async function dbEquityUpdater() async function dbEquityUpdater() {
{
try { try {
for (let i=0;i<accs.length;i++) for (let i = 0; i < accs.length; i++)
db.updateEquityByid(accs[i].id,accs[i].equity) db.updateEquityByid(accs[i].id, accs[i].equity)
} } catch (e) {
catch (e)
{
} }
...@@ -122,23 +112,22 @@ async function dbEquityUpdater() ...@@ -122,23 +112,22 @@ async function dbEquityUpdater()
async function balanceUpdater() { async function balanceUpdater() {
let arr=[] let arr = []
try { try {
for (let i=0;i<accs.length;i++) for (let i = 0; i < accs.length; i++)
arr.push(balanceGetter(accs[i])) arr.push(balanceGetter(accs[i]))
await Promise.all(arr) await Promise.all(arr)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} }
await sleep(60000) await sleep(60000)
return balanceUpdater() return balanceUpdater()
} }
async function balanceGetter(acc) async function balanceGetter(acc) {
{
try { try {
let d = await acc.exchange.fetchBalance() let d = await acc.exchange.fetchBalance()
if (parseFloat(d.info.result.USDT.equity) !== parseFloat(acc.equity)) { if (parseFloat(d.info.result.USDT.equity) !== parseFloat(acc.equity)) {
...@@ -194,9 +183,9 @@ async function run() { ...@@ -194,9 +183,9 @@ async function run() {
} }
// checker() // checker()
console.log(datas) // console.log(datas)
} }
...@@ -214,7 +203,7 @@ async function updateVars(name, lastData) { ...@@ -214,7 +203,7 @@ async function updateVars(name, lastData) {
let data = grabData([lastData]) let data = grabData([lastData])
closer(sig, data[0].closeTime, data[0], allData.id, allData.pair) closer(sig, data[0].closeTime)
let vars = ai.run(data, allData.avgRunup, allData.avgDrawdown, getVarsFromName(name)) let vars = ai.run(data, allData.avgRunup, allData.avgDrawdown, getVarsFromName(name))
...@@ -226,8 +215,8 @@ async function updateVars(name, lastData) { ...@@ -226,8 +215,8 @@ async function updateVars(name, lastData) {
sig = allData.id + '_Sell' sig = allData.id + '_Sell'
else else
sig = allData.id + '_Buy' sig = allData.id + '_Buy'
adder(sig, allData.qty, data[0].closeTime, data[0], allData.pair) adder(sig, data[0].closeTime)
// console.log('adder') // console.log('adder')
} }
// console.log(name,vars) // console.log(name,vars)
updateVarsFromName(name, vars) updateVarsFromName(name, vars)
...@@ -235,107 +224,109 @@ async function updateVars(name, lastData) { ...@@ -235,107 +224,109 @@ async function updateVars(name, lastData) {
} }
async function closer(sig, date) {
async function closer(sig, date, bigData, id, pair) {
let lastToken = sig + '_2' + date let lastToken = sig + '_2' + date
lastToken = lastToken.replace(/_/g, '').replace(/Lp/g, '').replace(/BTC/g, '').replace(/ /g, '').replace(/btc2/g, '').replace(/btc3/g, '').replace(/btc4/g, '').replace(/&/g, '').replace(/btc/g, '').replace(/:/g, '') lastToken = lastToken.replace(/_/g, '').replace(/Lp/g, '').replace(/BTC/g, '').replace(/ /g, '').replace(/btc2/g, '').replace(/btc3/g, '').replace(/btc4/g, '').replace(/&/g, '').replace(/btc/g, '').replace(/:/g, '')
lastToken=removeDot(lastToken) lastToken = removeDot(lastToken)
const [data, delStatus] = await client let arr = []
.multi() for (let i = 0; i < accs.length; i++) {
.get(info.apiKey + '_' + sig) arr.push(syncAllCloser(accs[i], sig, lastToken))
.del(info.apiKey + '_' + sig) }
await Promise.all(arr)
.exec();
}
if (delStatus !== 1) {
return async function syncAllCloser(acc, sig, lastToken) {
} const [data, delStatus] = await client
.multi()
.get(acc.key + '_' + sig)
.del(acc.key + '_' + sig)
.exec();
if (delStatus !== 1)
return
let d let d
let newData = JSON.parse(data) let newData = JSON.parse(data)
let qty = newData.qty let qty = newData.qty
console.log('try reduce', sig, qty) console.log('try reduce', acc.name, sig, qty)
if (sig.includes('Buy')) { if (sig.includes('Buy')) {
try { try {
d = await exchange.createMarketOrder(pair, 'Sell', qty, 0, { d = await acc.exchange.createMarketOrder('BTCUSDT', 'Sell', qty, 0, {
reduceOnly: true, reduceOnly: true,
order_link_id: lastToken order_link_id: lastToken
}) })
} catch (e) { } catch (e) {
try { try {
d = await exchange.createMarketOrder(pair, 'Sell', qty, 0, { d = await acc.exchange.createMarketOrder('BTCUSDT', 'Sell', qty, 0, {
reduceOnly: true, reduceOnly: true,
order_link_id: lastToken order_link_id: lastToken
}) })
} catch (e) { } catch (e) {
console.error(e) console.error(e)
console.log('Error ->', sig, qty, 'Sell', 'Reduce true') console.log('Error ->', acc.name, sig, qty, 'Sell', 'Reduce true')
} }
} }
} else { } else {
try { try {
d = await exchange.createMarketOrder(pair, 'Buy', qty, 0, {reduceOnly: true, order_link_id: lastToken}) d = await acc.exchange.createMarketOrder('BTCUSDT', 'Buy', qty, 0, {
reduceOnly: true,
order_link_id: lastToken
})
} catch (e) { } catch (e) {
try { try {
d = await exchange.createMarketOrder(pair, 'Buy', qty, 0, { d = await acc.exchange.createMarketOrder('BTCUSDT', 'Buy', qty, 0, {
reduceOnly: true, reduceOnly: true,
order_link_id: lastToken order_link_id: lastToken
}) })
} catch (e) { } catch (e) {
console.error(e) console.error(e)
console.log('Error ->', sig, qty, 'Buy') console.log('Error ->', acc.name, 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, date) {
async function adder(sig, qty, date, allData, pair) {
let lastToken = sig + '_' + date let lastToken = sig + '_' + date
if (pair === 'BNBUSDT')
qty = 0.06
else if (pair === 'BTCUSDT')
qty = 0.002
else if (pair === 'ETHUSDT')
qty = 0.01
lastToken = lastToken.replace(/_/g, '').replace(/Lp/g, '').replace(/BTC/g, '').replace(/ /g, '').replace(/btc2/g, '').replace(/btc3/g, '').replace(/btc4/g, '').replace(/&/g, '').replace(/btc/g, '').replace(/:/g, '') lastToken = lastToken.replace(/_/g, '').replace(/Lp/g, '').replace(/BTC/g, '').replace(/ /g, '').replace(/btc2/g, '').replace(/btc3/g, '').replace(/btc4/g, '').replace(/&/g, '').replace(/btc/g, '').replace(/:/g, '')
lastToken=removeDot(lastToken) lastToken = removeDot(lastToken)
console.log('Add db and ex :', lastToken)
let arr=[]
for (let i=0;i<accs.length;i++)
{
if (accs[i].active ===1)
arr.push(syncAdder(accs[i],sig,lastToken))
}
Promise.all(arr)
}
async function syncAdder(acc,sig,lastToken)
{
console.log('Add db and ex :',acc.name, lastToken)
let d let d
// console.log(pair,qty)
if (sig.includes('Buy')) { if (sig.includes('Buy')) {
d = await exchange.createMarketOrder(pair, 'Buy', qty, 0, {order_link_id: lastToken}) d = await acc.exchange.createMarketOrder('BTCUSDT', 'Buy', acc.qty, 0, {order_link_id: lastToken})
// console.log('Add Suc With id',sig)
} else { } else {
d = await exchange.createMarketOrder(pair, 'Sell', qty, 0, {order_link_id: lastToken}) d = await acc.exchange.createMarketOrder('BTCUSDT', 'Sell', acc.qty, 0, {order_link_id: lastToken})
// console.log('Add Suc With id',sig)
} }
if (typeof d.id !== "undefined") { if (typeof d.id !== "undefined") {
console.log('Add Suc With id', d.id, sig) console.log('Add Suc With id',acc.name, d.id, sig)
const [add] = await client const [add] = await client
.multi() .multi()
.set(info.apiKey + '_' + sig, JSON.stringify({ .set(acc.kebabCase + '_' + sig, JSON.stringify({
pair: d.info.symbol, pair: d.info.symbol,
side: d.side, side: d.side,
qty: d.amount, qty: d.amount,
...@@ -344,8 +335,6 @@ async function adder(sig, qty, date, allData, pair) { ...@@ -344,8 +335,6 @@ async function adder(sig, qty, date, allData, pair) {
.exec(); .exec();
} }
} }
function grabData(data) { function grabData(data) {
...@@ -455,7 +444,7 @@ function getVarFromUsage(vars, usage) { ...@@ -455,7 +444,7 @@ function getVarFromUsage(vars, usage) {
async function analyse(body) { async function analyse(body) {
let t = body.split(',') let t = body.split(',')
let obj = {} let obj = {}
if (typeof t[0] ==="undefined") if (typeof t[0] === "undefined")
return return
obj.symbol = t[0] obj.symbol = t[0]
obj.entry = parseFloat(t[1]) obj.entry = parseFloat(t[1])
...@@ -465,8 +454,8 @@ async function analyse(body) { ...@@ -465,8 +454,8 @@ async function analyse(body) {
obj.runUp = parseFloat(t[5]) obj.runUp = parseFloat(t[5])
obj.drawDown = parseFloat(t[6]) obj.drawDown = parseFloat(t[6])
obj.profit = getPercent(obj.entry, obj.exit) obj.profit = getPercent(obj.entry, obj.exit)
if (obj.side ==='Short' ) if (obj.side === 'Short')
obj.profit=obj.profit*-1 obj.profit = obj.profit * -1
obj.runUp = getPercent(obj.entry, (obj.runUp + obj.entry)) obj.runUp = getPercent(obj.entry, (obj.runUp + obj.entry))
obj.drawDown = getPercent(obj.entry, (obj.drawDown + obj.entry)) obj.drawDown = getPercent(obj.entry, (obj.drawDown + obj.entry))
obj.closeTime = moment().utc().format('YYYY.MM.DD HH:mm') + ':00.000' obj.closeTime = moment().utc().format('YYYY.MM.DD HH:mm') + ':00.000'
...@@ -492,7 +481,7 @@ async function analyse(body) { ...@@ -492,7 +481,7 @@ async function analyse(body) {
appendCsv(final, indicator) appendCsv(final, indicator)
indicator = indicator.replace('Kelt', 'btc4').replace('SOTT', 'btc3').replace('Pmax', 'btc2').replace('PPST', 'btc1').replace('.csv', '') indicator = indicator.replace('Kelt', 'btc4').replace('SOTT', 'btc3').replace('Pmax', 'btc2').replace('PPST', 'btc1').replace('.csv', '')
appendCsvtoMain(final,indicator) appendCsvtoMain(final, indicator)
// updateVars(indicator,final) // updateVars(indicator,final)
} }
...@@ -507,21 +496,18 @@ function appendCsv(data, name) { ...@@ -507,21 +496,18 @@ function appendCsv(data, name) {
async function appendCsvtoMain(data, config) { async function appendCsvtoMain(data, config) {
for (let i = 0; i < files.length; i++) { for (let i = 0; i < files.length; i++) {
if (files[i].startsWith(config + '_')) { if (files[i].startsWith(config + '_')) {
appendtoFile(files[i],data) appendtoFile(files[i], data)
} }
} }
} }
function appendtoFile(name,data) function appendtoFile(name, data) {
{ fs.appendFile('YashilFinal/' + name, data + '\n', function (err) {
fs.appendFile('YashilFinal/'+name, data + '\n', function (err) {
if (err) throw err; if (err) throw err;
}); });
...@@ -531,15 +517,15 @@ function getPercent(basePrice, value) { ...@@ -531,15 +517,15 @@ function getPercent(basePrice, value) {
return ((value - basePrice) / basePrice) * 100 return ((value - basePrice) / basePrice) * 100
} }
function removeDot(text) function removeDot(text) {
{ let token = ''
let token='' for (let i = 0; i < text.length; i++)
for (let i=0;i<text.length;i++) if (text[i] !== '.')
if (text[i] !=='.' ) token = token + text[i]
token=token+text[i]
return token return token
} }
function getVarsFromName(config) { function getVarsFromName(config) {
for (let i = 0; i < datas.length; i++) for (let i = 0; i < datas.length; i++)
if (datas[i].name.startsWith(config + '_')) if (datas[i].name.startsWith(config + '_'))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment