Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 46
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Bonjour.
Je peux vous demander de l'aide ?
Comment puis-je savoir que la perte depuis le début de la journée, pour les positions fermées, était de 10% ?
Ce conseiller expert affiche dans le coin supérieur gauche le pourcentage de profit ou de perte pour une période donnée.
//| 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);
}
//+------------------------------------------------------------------+
...
Ce conseiller affiche dans le coin supérieur gauche le pourcentage de profit ou de perte pour une période donnée.
Merci.
Il existe une fonction qui calcule le nombre de positions perdantes pour l'ensemble de la période.
Que puis-je changer pour voir le nombre de positions perdantes fermées aujourd'hui d'affilée ?
{
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);
}
Merci.
Il existe une fonction qui compte le nombre de positions perdantes dans le temps.
Que dois-je changer pour connaître le nombre de positions perdantes fermées aujourd'hui d'affilée ?
{
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);
}
Ajoutez une condition supplémentaire : si l'heure de clôture de l'ordre est inférieure à l'heure d'ouverture de la bougie D1 actuelle, alors continuez;
Merci.
Merci.
Pas tout à fait comme ça.
Comme ceci - OrderSymbol()
Ou comme ça :
Pas tout à fait comme ça.
Comme ceci - OrderSymbol()
Merci.
Chéri. Veuillez m'indiquer comment ajouter du texte à la fenêtre des paramètres d'entrée de l'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";
Merci + en rep. J'ai compris, j'ai lu le tutoriel sur les variables d'entrée externes, ce n'est pas très bien décrit. C'est plus clair et plus évident dans l'exemple.
Merci + en rep. J'ai compris, j'ai lu le tutoriel sur les variables d'entrée externes, ce n'est pas très bien décrit. C'est de plus en plus clair dans l'exemple.
Si vous ajoutez des commentaires à chaque ligne, ce sera plus intéressant :
input bool MetaQuotes2 = true; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
input string MetaQuotes4 = "Corp"; // Описание входного параметра 4
et si vous faites une énumération et l'utilisez au lieu d'un bool, c'est encore plus intéressant :
{
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
et sinput vous permet d'exclure une variable de la liste des variables à optimiser. Par exemple, la variable MetaQuotes4 dans ce contexte n'est pas nécessaire pour l'optimisation, et elle peut être exclue :
{
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