Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит в валюте депозита |//| закрытых с определённой даты позиций |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| dt - Дата и время в секундах с 1970 года ( 0 - с начала истории) |//+----------------------------------------------------------------------------+double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
double p=0;
int i, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
return(p);
}
// код Кима изменил на это и теперь от считает профит за сегодня и обнуляется в полночьdouble GetProfitFromDateInCurrency1(string sy="0", int op=-1, int mn=-1)
{
double p=0;
int i, k=OrdersHistoryTotal();
datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime()) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
return(p);
}
Olá. Por favor, ajude-me a calcular o lucro de negócios fechados ontem, anteontem, etc. Quero fazer Lucro para hoje: Lucro para ontem, lucro para anteontem
Eu copiei o código/ para o cálculo de lucro de hoje.
ou como fixar o lucro hoje para adiar este valor para o lucro de ontem e depois para o lucro do dia anterior
Olá. Por favor, ajude-me a calcular o lucro de negócios fechados ontem, anteontem, etc. Quero fazer Lucro para hoje: Lucro para ontem, lucro para anteontem
Para calcular o lucro de hoje, copie o código/.
ou como fazer com que o valor do lucro de hoje seja inferior ao lucro de ontem, depois ao lucro de anteontem
Adicione mais um parâmetro à descrição da função e altere a condição de verificação:
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart && dtstop<=OrderCloseTime()) {
double GetProfitFromDateInCurrency2(string sy="0", int op=-1, int mn=-1)
{
double p=0;
int i, k=OrdersHistoryTotal();
datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;
datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
return(p);
}
Eu fiz a função de anteontem assim
double GetProfitFromDateInCurrency3(string sy="0", int op=-1, int mn=-1)
{
double p=0;
int i, k=OrdersHistoryTotal();
datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60*2;
datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {
p+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
}
return(p);
}
E você pode fazer com que ela não seja zerada nos fins de semana? ou seja, fazer com que a segunda-feira de ontem fosse sexta-feira. ou seja, remover os fins de semana de alguma forma?
É possível ler um ticket de pedido.
Existe uma função similar
OrderGetTicket();para mql4?
Existe uma função similar
para mql4?
Existe, só que não exatamente o mesmo. Após selecionar uma ordem, é necessário definir o tipo de ordem e o bilhete por outras funções.
Boa tarde.
Há uma função para abrir uma grade de ordens com lote incrementado por i,
Eu preciso que a grade (lotes) seja construída por lote, ou seja, lote1 = 0,01, lote2 = 0,02, lote3 = lote2 + lote 1. ,
como isso deve ser descrito na função fLots()?
Quero verificar se há vagas em aberto no OnInit, mas por alguma razão não posso selecioná-las:
Eu recebo:
2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0
2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false
2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Posição Total = 1
Quero verificar se há vagas em aberto no OnInit, mas por alguma razão não posso selecioná-las:
Eu recebo:
2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0
2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false
2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Posição Total = 1
Imediatamente me chama a atenção:
Eu não procurei mais porque deveria ser assim em um ciclo inverso:
Imediatamente isso me chamou a atenção:
Eu não procurei mais, porque é assim que deve ser no ciclo reverso:
Eu prefiro esta notação
Eu prefiro esta entrada
Bem... Eu mostrei um compreensível para iniciantes ;)
Olá. Por favor, ajude-me a calcular o lucro de negócios fechados ontem, anteontem, etc. Quero fazer Lucro para hoje: Lucro para ontem, lucro para anteontem
Eu copiei o código/ para o cálculo de lucro de hoje.
ou como fixar o lucro hoje para adiar este valor para o lucro de ontem e depois para o lucro do dia anteriorOlá. Por favor, ajude-me a calcular o lucro de negócios fechados ontem, anteontem, etc. Quero fazer Lucro para hoje: Lucro para ontem, lucro para anteontem
Para calcular o lucro de hoje, copie o código/.
ou como fazer com que o valor do lucro de hoje seja inferior ao lucro de ontem, depois ao lucro de anteontemAdicione mais um parâmetro à descrição da função e altere a condição de verificação: