} //+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
Thanks + in rep. Figured it out, I read the tutorial about externalinput variables, it's not very well described. It's clearer and more obvious from the example.
Thanks + in rep. Figured it out, I read the tutorial about externalinput variables, it's not very well described. It's clearer and clearer in the example.
sinputstring MetaQuotes = "бла бла текс";
If you add comments to each line, it'll be more interesting:
inputint MetaQuotes1 = 30; // Описание входного параметра 1 inputbool MetaQuotes2 = true; // Описание входного параметра 2 inputdouble MetaQuotes3 = 20.3; // Описание входного параметра 3 inputstring MetaQuotes4 = "Corp"; // Описание входного параметра 4
and if you make an enumeration and use it instead of a bool, it's even more interesting:
enum enumYN { enYes = 1, // Да enNo = 0, // Нет };
inputint MetaQuotes1 = 30; // Описание входного параметра 1 input enumYN MetaQuotes2 = enYes; // Описание входного параметра 2 inputdouble MetaQuotes3 = 20.3; // Описание входного параметра 3 inputstring MetaQuotes4 = "Corp"; // Описание входного параметра 4
and sinput allows you to exclude a variable from the list of variables for optimization. For example, the variable MetaQuotes4 in this context is not necessary for optimization, and it can be excluded:
enum enumYN { enYes = 1, // Да enNo = 0, // Нет };
inputint MetaQuotes1 = 30; // Описание входного параметра 1 input enumYN MetaQuotes2 = enYes; // Описание входного параметра 2 inputdouble MetaQuotes3 = 20.3; // Описание входного параметра 3 sinputstring MetaQuotes4 = "Corp"; // Описание входного параметра 4
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
Hello.
I am asking for help.
How do I know that the loss from the beginning of the day, for closed positions was 10%?
This Expert Advisor shows in the upper left corner the percentage of profit or loss for a set period
//| 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);
}
//+------------------------------------------------------------------+
...
This advisor shows in the upper left corner the percentage of profit or loss for a set period
Thank you.
There is a function which calculates the number of losing positions for the whole period.
What can I change to see the number of losing positions closed today in a row?
{
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);
}
Thank you.
There is a function which counts the number of losing positions over time.
What should I change to find out the number of losing positions closed today in a row?
{
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);
}
Add one more condition: if the closing time of the order is less than the opening time of the current D1 candle, then continue;
Thank you.
Thank you.
Not quite like this.
Like this - OrderSymbol()
Or like this:
Not quite like this.
Like this - OrderSymbol()
Thank you.
Dear. Please advise how to add text to the EA input parameters window.
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";
Thanks + in rep. Figured it out, I read the tutorial about externalinput variables, it's not very well described. It's clearer and more obvious from the example.
Thanks + in rep. Figured it out, I read the tutorial about externalinput variables, it's not very well described. It's clearer and clearer in the example.
If you add comments to each line, it'll be more interesting:
input bool MetaQuotes2 = true; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
input string MetaQuotes4 = "Corp"; // Описание входного параметра 4
and if you make an enumeration and use it instead of a bool, it's even more interesting:
{
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
and sinput allows you to exclude a variable from the list of variables for optimization. For example, the variable MetaQuotes4 in this context is not necessary for optimization, and it can be excluded:
{
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