import bingx from "../../bingx.app.mjs";
export default {
name: "BingX Custom Calculate Leveraged Position",
version: "0.0.4",
key: "bingx-custom-calculate-leveraged-position",
description: "Calculate leveraged position based on entry, stop price and account balance",
props: {
bingx,
symbol: {
propDefinition: [
bingx,
"symbol",
],
},
currency: {
propDefinition: [
bingx,
"currency",
],
},
tradeType: {
propDefinition: [
bingx,
"tradeType",
],
},
limitPrice: {
label: "Limit Price",
description: "Limit Price (Applicable only for limit orders)",
type: "string",
optional: true,
},
stopPrice: {
label: "Stop Loss Price",
description: "Stop Loss Price for trade",
type: "string",
optional: false,
},
profitPrice: {
label: "Take Profit Loss Price",
description: "Take Profit Price for trade",
type: "string",
optional: false,
},
riskOnCapital: {
label: "Risk",
description: "Risk Percentage of capital",
type: "string",
default: "2",
optional: false,
},
},
type: "action",
async run({ $ }) {
let entryPrice = this.limitPrice;
if (!entryPrice)
entryPrice = await this.bingx.getLatestPrice({
params: {
symbol: this.symbol,
},
$,
});
let tradeDirection = entryPrice > this.stopPrice
? "BID"
: "ASK";
let tpDirection = entryPrice > this.stopPrice
? "ASK"
: "BID";
const balanceQuery = await this.bingx.getBalance({
params: {
currency: this.currency,
},
$,
});
console.log(balanceQuery);
if (balanceQuery.code) {
throw new Error(balanceQuery.msg);
}
const balance = balanceQuery.data.balance.balance;
const risk = this.bingx.convertToFloat(this.riskOnCapital) * balance / 100;
const stopDiff = Math.abs(entryPrice - this.stopPrice);
const profitDiff = Math.abs(entryPrice - this.profitPrice);
const leverage = Math.floor(entryPrice * 0.9 / stopDiff);
const qty = risk / stopDiff;
const profit = qty * profitDiff;
const returnValue = {
"entryPrice": entryPrice,
"stopPrice": this.stopPrice,
"targetPrice": this.profitPrice,
"entryDirection": tradeDirection,
"exitDirection": tpDirection,
"leverage": leverage,
"quantity": qty,
"riskAmount": risk,
"profitAmount": profit,
"riskReward": profit / risk,
};
if (returnValue.code) {
throw new Error(returnValue.msg);
} else {
$.export("$summary", `Calculated bracket order for ${this.symbol}`);
}
return returnValue;
},
};