} //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ voidOnTick() { Profit=LastProfit(iTime(_Symbol,TimeFrame,0),Symbols,Magic,ModeType); prev_balans=Balans(0,iTime(_Symbol,TimeFrame,0)); if(prev_balans!=0.0)procent=Profit/prev_balans*100.0; Comment( "\nTime = ",iTime(_Symbol,TimeFrame,0), "\nProfit = ",DoubleToStr(Profit,2), "\nprev_balans = ",DoubleToStr(prev_balans,2), "\nprocent = ",DoubleToStr(procent,4)," %" ); } //+------------------------------------------------------------------+ double LastProfit( datetime time, // Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года. string symbol=NULL, // символ, если NULL то любой символ int magic=-1, // идентификатор, если -1 то любой идентификатор int cmd=-1// торговая операция, если -1 любая торговая операция ) { double profit=0; int total=OrdersHistoryTotal(); for(int i=total-1;i>=0;i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; if(OrderSymbol()==symbol || symbol!=NULL) { if(OrderMagicNumber()==magic || magic==-1) { if(OrderType()==cmd || cmd==-1) { if(OrderCloseTime()<time)continue; profit+=OrderProfit()+OrderCommission()+OrderSwap(); } } } } return(profit); } //+------------------------------------------------------------------+ double Balans( datetime start_time,// C какой даты. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года. datetime stop_time,// По какую дату. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года. ) { double profit=0; int total=OrdersHistoryTotal(); for(int i=0; i<total; i++) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; if(OrderCloseTime()<start_time || OrderCloseTime()>stop_time)continue; profit+=OrderProfit()+OrderCommission()+OrderSwap(); } return(profit); } //+------------------------------------------------------------------+
你好。
我可以寻求一些帮助吗?
我怎么知道从当天开始,平仓 的损失是10%?
该专家顾问在左上角显示了设定时期的盈利或亏损的百分比
//| test02.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum mode_type
{
BUY=OP_BUY,
SELL=OP_SELL,
ALL = -1
};
input string Symbols=NULL;
input int Magic=-1;//Identification number
input mode_type ModeType=ALL;
input ENUM_TIMEFRAMES TimeFrame=PERIOD_D1;
double procent=0.0;
double prev_balans=0.0;
double Profit=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Profit=LastProfit(iTime(_Symbol,TimeFrame,0),Symbols,Magic,ModeType);
prev_balans=Balans(0,iTime(_Symbol,TimeFrame,0));
if(prev_balans!=0.0)procent=Profit/prev_balans*100.0;
Comment(
"\nTime = ",iTime(_Symbol,TimeFrame,0),
"\nProfit = ",DoubleToStr(Profit,2),
"\nprev_balans = ",DoubleToStr(prev_balans,2),
"\nprocent = ",DoubleToStr(procent,4)," %"
);
}
//+------------------------------------------------------------------+
double LastProfit(
datetime time, // Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
string symbol=NULL, // символ, если NULL то любой символ
int magic=-1, // идентификатор, если -1 то любой идентификатор
int cmd=-1 // торговая операция, если -1 любая торговая операция
)
{
double profit=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderSymbol()==symbol || symbol!=NULL)
{
if(OrderMagicNumber()==magic || magic==-1)
{
if(OrderType()==cmd || cmd==-1)
{
if(OrderCloseTime()<time)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
return(profit);
}
//+------------------------------------------------------------------+
double Balans(
datetime start_time,// C какой даты. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
datetime stop_time,// По какую дату. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
)
{
double profit=0;
int total=OrdersHistoryTotal();
for(int i=0; i<total; i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderCloseTime()<start_time || OrderCloseTime()>stop_time)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
return(profit);
}
//+------------------------------------------------------------------+
...
该顾问在左上角显示了设定时期的利润或损失的百分比
谢谢你。
有一个函数可以计算出整个时期的亏损头寸数量。
我可以改变什么来查看今天 连续关闭的亏损 头寸的数量?
{
int PosCnt = 0;
int cnt = HistoryTotal();
for (int i = cnt-1; i >=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
int type = OrderType();
if (type != OP_BUY && type != OP_SELL) continue;
if (OrderProfit()+OrderSwap()+OrderCommission() > 0) break;
PosCnt++;
}
return (PosCnt);
}
谢谢你。
有一个函数可以计算出一段时间内的亏损头寸数量。
要想知道今天 连续平仓的亏损 头寸数量,我应该怎么改?
{
int PosCnt = 0;
int cnt = HistoryTotal();
for (int i = cnt-1; i >=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
int type = OrderType();
if (type != OP_BUY && type != OP_SELL) continue;
if (OrderProfit()+OrderSwap()+OrderCommission() > 0) break;
PosCnt++;
}
return (PosCnt);
}
再增加一个条件:如果订单的收盘时间小于当前D1蜡烛图的开盘时间,则继续。
谢谢你。
谢谢你。
不太像这样。
像这样 -OrderSymbol()
或者像这样。
不太像这样。
像这样 -OrderSymbol()
谢谢你。
亲爱的。请告知如何在EA输入参数 窗口添加文本。
input bool MetaQuotes = true;
input double MetaQuotes = 20.3;
input string MetaQuotes = "Corp";
input bool MetaQuotes = true;
input double MetaQuotes = 20.3;
input string MetaQuotes = "Corp";
谢谢+在代表。想通了,我读了关于外部输入变量的教程, 它 的描述不是很好。从这个例子来看,它更清楚、更明显。
谢谢+在代表。想通了,我读了关于外部输入变量的教程, 它 的描述不是很好。这在例子中越来越清晰了。
如果你在每行加入注释,会更有趣。
input bool MetaQuotes2 = true; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
input string MetaQuotes4 = "Corp"; // Описание входного параметра 4
如果你做一个枚举,用它来代替bool,那就更有意思了。
{
enYes = 1, // Да
enNo = 0, // Нет
};
input int MetaQuotes1 = 30; // Описание входного параметра 1
input enumYN MetaQuotes2 = enYes; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
input string MetaQuotes4 = "Corp"; // Описание входного параметра 4
和sinput 允许你将一个变量从优化的变量列表中排除。例如,在这种情况下,变量MetaQuotes4对于优化来说是没有必要的,它可以被排除。
{
enYes = 1, // Да
enNo = 0, // Нет
};
input int MetaQuotes1 = 30; // Описание входного параметра 1
input enumYN MetaQuotes2 = enYes; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
sinput string MetaQuotes4 = "Corp"; // Описание входного параметра 4