Does anyone have a code-snippet to calculate a basket break even price (1..n buy/sell trades with different lot sizes, including commissions and swap)?
Does anyone have a code-snippet to calculate a basket break even price (1..n buy/sell trades with different lot sizes, including commissions and swap)?
I'm not good enough at maths to figure it out...
Any help is highly appreciated!
Best Regards,
Andy
I don't do any basket trading, so this may be a stupid question, but the heck is a break even "price" for an entire basket?
// Global
extern bool useAverageBE = false; // Use average breakeven closure.
//Put in start
if (RunningTrades(Symbol()) > 1 && useAverageBE && countProfit(Symbol()) <= 0)
{
CloseTrades(Symbol(), 10, MagicNumber);
Alert("Orders, ", symbol, ", closed at breakeven.");
}
int RunningTrades(string symbol)
{
int trades = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
continue;
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == symbol && OrderType() == OP_BUY || OrderType() == OP_SELL)
{
trades++;
}
}
return(trades);
}
//+------------------------------------------------------------------+
//| expert Get profit/loss for all trades for this symbol function
//+------------------------------------------------------------------+
double countProfit(string symbol)
{
double cash = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if ((OrderSymbol() == symbol) && OrderMagicNumber() == MagicNumber)
{
cash += (OrderProfit() + OrderSwap() + OrderCommission());
}
}
return(cash);
}
//+------------------------------------------------------------------+
//| Close All Button Function |
//+------------------------------------------------------------------+
void CloseTrades(string symbol, int Slippage, int MagicNumber)
{
bool closed = false;
for (int i = OrdersTotal(); i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
while (IsTradeContextBusy())
Sleep(100);
RefreshRates();
if (OrderType() == OP_BUY && (MagicNumber == OrderMagicNumber() && OrderSymbol() == symbol))
{
closed = OrderClose(OrderTicket(), OrderLots(),
NormalizeDouble(MarketInfo(OrderSymbol(), MODE_BID), MarketInfo(OrderSymbol(), MODE_DIGITS)), Slippage, CLR_NONE);
refreshGrid();
}
if (OrderType() == OP_SELL && (MagicNumber == OrderMagicNumber() && OrderSymbol() == symbol))
{
closed = OrderClose(OrderTicket(), OrderLots(),
NormalizeDouble(MarketInfo(OrderSymbol(), MODE_ASK), MarketInfo(OrderSymbol(), MODE_DIGITS)), Slippage, CLR_NONE);
refreshGrid();
}
}
}