Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Não, esta linha é removida. Este é um cálculo de lucro, não vai funcionar dessa forma.
Onde está o comando próximo no código - lá
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
e na condição de fechamento
{CloseOrder(OrderTicket());t=TimeCurrent();}
{DeleteAll();t=TimeCurrent();}1 não conta, 2 conta corretamente, 3 não conta 0.
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
e na condição de fechamento
{CloseOrder(OrderTicket());t=TimeCurrent();}
{DeleteAll();t=TimeCurrent();}1 não conta, 2 conta corretamente, 3 não conta 0
e é isso.
{DeleteAll();}
E mais uma coisa.
Seus pedidos são fechados de acordo com o bilhete?
Então você precisa se lembrar da hora de início para fechar a série mais cedo
Ou seja, quando uma decisão de fechar uma série acaba de ser formada, não importa se ela vai realmente fechar ou não
Compreendo sua insistência, mas lhe dei uma versão funcional, com a boa função de fechar uma série de posições para negociação real, não trabalhando no testador.
Ele conta e lembra de tudo, mesmo que o terminal seja reiniciado.
Aqui está um teste, basta executá-lo no testador, e comparar os resultados com a história dos negócios
PS. Esqueci de escrever no código - aqui está a correção
Compreendo sua insistência, mas lhe dei uma versão funcional, com a boa função de fechar uma série de posições para negociação real, não trabalhando no testador.
Ele conta e lembra de tudo, mesmo que o terminal seja reiniciado.
Aqui está um teste, basta executá-lo no testador, e comparar os resultados com a história dos negócios
Como posso aplicar isto ao meu código?
O valor daLastProfitCL determina minhaação posterior
mas fora isso
{DeleteAll();}
Mais uma coisa.
Seus pedidos estão fechando com um bilhete?
Portanto, você precisa se lembrar da hora do fechamento da série ainda mais cedo.
Ou seja, quando uma decisão de fechar uma série acaba de ser formada, não importa se ela vai realmente fechar ou não
Como posso aplicar isto ao meu código?
Eu tenho o valorLastProfitCL quedetermina a ação futura
Portanto, é claro, basta aplicá-lo como você julgar conveniente.
Comment(" Последний: ",DoubleToString(LastProfit,1) ," Профит: ", DoubleToString(Profit,1) );
Declarar"LastProfit" uma vez e utilizá-lo onde for necessário
Se a ordem for fechada por uma parada, então{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();} já perderá o valor do lucro
Sim, vai.
Você pode verificar cada tique para ver quantos pedidos ao vivo restam.
Se for o mesmo, então você deve se lembrar da hora do tique anterior.
Então você terá o que precisa.
Mas paradas geralmente não acontecem em autômatos
Se fechar em uma parada,{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();} já perderá o valor de lucro
Ele contará apenas os últimos fechados no tempo, e não depende do valor do fechamento.
Em geral, a tarefa não é completamente clara, portanto, não há mais discussão.
//---------------------------------------------------------
Aqui você vê a descrição, eu não entendo mais o problema:
Aqui está tudo disposto, eu não entendo mais a tarefa:
Isto também é correto se o "cnt" estiver zerado, mas então o valor é novamente incompreensível como na captura de tela 3 (deve ser um valor de lucro de 4,27)
int cnt=0;
double LastProfit=0;
for(i=0;i<OrdersHistoryTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
}
return(LastProfit);
}