MT4历史浮亏统计指标
MT4复盘侠最新指标,可查看历史最大浮亏,最大浮亏比例。 //+------------------------------------------------------------------+//| 历史最大浮亏和最大浮亏比例指标 |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1Red
#property indicator_color2Blue
// 指标缓冲区
double MaxDrawdownBuffer[];
double MaxDrawdownPercentBuffer[];
// 全局变量
double g_MaxDrawdown = 0;
double g_MaxDrawdownPercent = 0;
int MODE_POINTVALUE;
//+------------------------------------------------------------------+
//| 自定义指标初始化函数 |
//+------------------------------------------------------------------+
int init()
{
// 指标缓冲区赋值
SetIndexBuffer(0, MaxDrawdownBuffer);
SetIndexBuffer(1, MaxDrawdownPercentBuffer);
// 设置指标名称
IndicatorShortName("历史最大浮亏和最大浮亏比例");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 自定义指标计算函数 |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
int limit = Bars - counted_bars - 1;
// 初始化最大浮亏和最大浮亏比例
g_MaxDrawdown = 0;
g_MaxDrawdownPercent = 0;
// 遍历历史订单
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderType() < OP_SELL) // 只处理开仓订单
{
double open_price = OrderOpenPrice();
double lot = OrderLots();
double initial_margin = MarketInfo(OrderSymbol(), MODE_MARGINREQUIRED) * lot;
// 模拟持仓过程,计算浮亏
int ticket = OrderTicket();
for (int j = Bars - 1; j >= 0; j--)
{
double current_price = (OrderType() == OP_BUY)? iClose(NULL, 0, j) : iOpen(NULL, 0, j);
double profit = (OrderType() == OP_BUY)? (current_price - open_price) * Point * lot * MarketInfo(OrderSymbol(),MODE_POINTVALUE) : (open_price - current_price) * Point * lot * MarketInfo(OrderSymbol(), MODE_POINTVALUE);
if (profit < 0)
{
double drawdown = -profit;
double drawdown_percent = (drawdown / initial_margin) * 100;
if (drawdown > g_MaxDrawdown)
{
g_MaxDrawdown = drawdown;
}
if (drawdown_percent > g_MaxDrawdownPercent)
{
g_MaxDrawdownPercent = drawdown_percent;
}
}
}
}
}
}
// 将最大浮亏和最大浮亏比例写入缓冲区
for (int k = 0; k < limit; k++)
{
MaxDrawdownBuffer = g_MaxDrawdown;
MaxDrawdownPercentBuffer = g_MaxDrawdownPercent;
}
return(0);
}
页:
[1]