E, nesse exemplo, o cálculo é apenas para um símbolo CalcHistorySlip( const string Symb) Bem, isso pode ser resolvido chamando a função para cada símbolo.
Talvez você tenha um equivalente para o MT5 que corresponda ao MT4Orders? Caso contrário, deixarei como está ou não a incluirei no relatório geral. Como não está claro como isso pode ajudar. Agora estou gerando a soma dos volumes. Para os Expert Advisors de símbolo único, o resultado da classificação pela soma de volumes e TurnOver do MT4Orders é o mesmo. Ou seja, há um substituto para o TurnOver. Mas para os multissímbolos será diferente. Porque a soma de muitos símbolos diferentes não é equivalente em termos monetários. O TurnOver seria melhor.
E a comparação da classificação por volume com a variante para MT5 (código no link acima) não corresponde de forma alguma.
Além disso, é necessário verificar o tipo de símbolo, porque, para as corretoras que não são de câmbio, é necessário calcular o custo de um tick da moeda base para a moeda da conta (para forex, o custo de um tick é imediatamente informado na moeda da conta).
Além disso, você precisa verificar o tipo de símbolo, pois, para o não forex, é necessário calcular o valor do tick da moeda base para a moeda da conta (para o forex, o valor do tick é informado imediatamente na moeda da conta).
Copiei isso do Report.mqh. Também é assim.
// Valores diferentes para negociações lucrativas e perdedoras não são levados em consideraçãostaticdouble GetTickValue()
{
staticdouble TickValue[];
constint Pos = REPORT::GetSymbolPos(OrderSymbol());
constint Size = ::ArraySize(TickValue);
if (Pos >= Size)
TickValue[::ArrayResize(TickValue, Pos + 1) - 1] = 0; // https://www.mql5.com/ru/forum/170952/page142#comment_13691776// const double TmpPips = NormalizeDouble(OrderClosePrice() - OrderOpenPrice(), 8); // https://www.mql5.com/ru/forum/170952/page128#comment_10696343constdouble TmpPips = OrderClosePrice() - OrderOpenPrice();
constdouble Lots = OrderLots();
if (TmpPips && Lots/* && OrderProfit()*/) // O lucro pode ser zero - OrderType() > OP_SELL
TickValue[Pos] = ::MathAbs(OrderProfit() / (TmpPips * Lots));
return(TickValue[Pos]);
}
O relatório funciona para o histórico de negociação com símbolos que não estão no Market Watch há muito tempo. E ele não tem ideia se é Forex ou outra coisa. No entanto, as informações do histórico geralmente são suficientes para calcular o volume de negócios.
ZY De acordo com as fontes, se os preços de abertura e fechamento não coincidirem, o cálculo seguirá esta fórmula.
Volume de negócios - quanto dinheiro você moe. A comissão é calculada a partir desse valor em corretoras normais.
Se, por exemplo, forem exigidas condições individuais, a primeira coisa que eles perguntarão é o tamanho do volume de negócios.
Reproduzi o que é feito no Report e escrevi sobre isso na primeira postagem. A classificação por eles coincide com a classificação apenas por volumes. O problema com a variante de cálculo sem Mt4Orders. A função https://www.mql5.com/ru/forum/98421/page2#comment_2908365 fornece resultados bastante diferentes.
Um dos resultados dessa função: -149,96. O sinal - você pode remover fabs() E para o mesmo cálculo via Report: 13.839.230,40.
Talvez você tenha um equivalente para o MT5 que corresponda ao MT4Orders?
Caso contrário, a solução mais fácil é verificar se uma negociação feita por meio das funções do MT5 pode ser visualizada no histórico por meio do MT4Orders. Para usar isso
мистер o O очень хорошо знает что такое DEAL Потому что Ку. Количество пунктов - средневзвешенное по объему количество пунктов каждой из сделок. может о О вполне и подойдет предложенный Вами вариант
Caso contrário, a solução mais fácil é saber se uma negociação feita por meio das funções do MT5 pode ser visualizada no histórico por meio do MT4Orders.
É exatamente assim que o Report.mqh funciona! Ou eu não estou entendendo nada das perguntas de hoje.
lotSize = (int)SymbolInfoDouble(OrderSymbol(),SYMBOL_TRADE_CONTRACT_SIZE); // não está disponível no modo mat, mas está disponível no MT5
Obtenha o lotSize para o Virtual no modo mat a partir de OrderProfit()=(OrderClosePrice()-OrderOpenPrice())) * OrderLots() * lotSize
if(OrderProfit()!=0){lotSize=OrderProfit()/((OrderClosePrice()-OrderOpenPrice())*OrderLots());}
else{lotSize=lotSize;}// encontrar ou ignorar um caso raro do mesmo caractere
Total para Virtual
double CalcMt4TurnOver(){
double lotSize=100000, Turn_Over=0;
for (int i = 0; i < OrdersHistoryTotal(); i++){
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ){
if(OrderType()<2){
if(OrderProfit()!=0){lotSize=OrderProfit()/((OrderClosePrice()-OrderOpenPrice())*OrderLots());}////else{lotSize=lotSize;}//encontrar ou negligenciar um caso raro com o mesmo símbolo
//lotSize=_TickValue/_TickSize;// - alternativa - você precisa obtê-lo do Virtual
Turn_Over += (OrderOpenPrice() + OrderClosePrice())*OrderLots()*lotSize;
}}}
return Turn_Over;
}
Para MT5: (isso é o que eu queria obter inicialmente e acabou sendo muito mais fácil do que no exemplo ).
double CalcMt5TurnOver(){
double lotSize, Turn_Over=0;
for (int i = 0; i < ::HistoryDealsTotal(); i++){
constulong ticket = ::HistoryDealGetTicket(i);
if (((HistoryDealGetInteger(ticket,DEAL_TYPE) < 2))){
lotSize = (int)SymbolInfoDouble(HistoryDealGetString(ticket,DEAL_SYMBOL),SYMBOL_TRADE_CONTRACT_SIZE);
Turn_Over += HistoryDealGetDouble(ticket,DEAL_PRICE) * HistoryDealGetDouble(ticket,DEAL_VOLUME) * lotSize;
}
}
return Turn_Over;
}
Os resultados são exatamente os mesmos.
Mas não tenho certeza se devo usar SYMBOL_TRADE_CONTRACT_SIZE em vez de lotSize=SYMBOL_TRADE_TICK_VALUE / SYMBOL_TRADE_TICK_SIZE; Ou o resultado é o mesmo em teoria? Na prática, com um exemplo simples de um caractere, sim.
Isso é fácil de fazer, mas por quê?
No final do Report.mqh há uma entrada desse tipo.
Para mover/excluir uma coluna, você precisa alterar apenas essa sequência na fonte de acordo.
Você tem o cálculo do TurnOver em seu relatório.
Estou tentando fazer o mesmo, mas sem o MT4Ordes.
Como exemplo, encontrei sua postagem https://www.mql5.com/ru/forum/98421/page2#comment_2908365
Um dos resultados: -149,96. O sinal - você pode remover fabs()
E para o mesmo cálculo via Relatório: 13.839.230,40.
E, nesse exemplo, o cálculo é apenas para um símbolo CalcHistorySlip( const string Symb) Bem, isso pode ser resolvido chamando a função para cada símbolo.
Talvez você tenha um equivalente para o MT5 que corresponda ao MT4Orders? Caso contrário, deixarei como está ou não a incluirei no relatório geral. Como não está claro como isso pode ajudar. Agora estou gerando a soma dos volumes. Para os Expert Advisors de símbolo único, o resultado da classificação pela soma de volumes e TurnOver do MT4Orders é o mesmo. Ou seja, há um substituto para o TurnOver. Mas para os multissímbolos será diferente. Porque a soma de muitos símbolos diferentes não é equivalente em termos monetários. O TurnOver seria melhor.
E a comparação da classificação por volume com a variante para MT5 (código no link acima) não corresponde de forma alguma.
Talvez você tenha um equivalente para o MT5 que corresponda ao MT4Orders?
É isso que você quer dizer?
Caso contrário, deixarei o relatório como está ou não o incluirei no relatório geral. Como não está claro como isso pode ajudar.
Volume de negócios - quanto dinheiro você negocia. As corretoras normais calculam a comissão a partir dele.
Se, por exemplo, forem exigidas condições individuais, a primeira coisa que eles perguntarão é o tamanho do volume de negócios.
É disso que você está falando?
Volume de negócios - quanto dinheiro você moe. A comissão é calculada a partir desse valor em corretoras normais.
Se, por exemplo, forem exigidas condições individuais, a primeira coisa que eles perguntarão é o tamanho do volume de negócios.
Acho que deveria ser assim:
OrderLots() * TickValue * fabs(OrderOpenPrice() - OrderClosePrice())Além disso, é necessário verificar o tipo de símbolo, porque, para as corretoras que não são de câmbio, é necessário calcular o custo de um tick da moeda base para a moeda da conta (para forex, o custo de um tick é imediatamente informado na moeda da conta).
Parece que deveria ser:
Além disso, você precisa verificar o tipo de símbolo, pois, para o não forex, é necessário calcular o valor do tick da moeda base para a moeda da conta (para o forex, o valor do tick é informado imediatamente na moeda da conta).
Copiei isso do Report.mqh. Também é assim.
O relatório funciona para o histórico de negociação com símbolos que não estão no Market Watch há muito tempo. E ele não tem ideia se é Forex ou outra coisa. No entanto, as informações do histórico geralmente são suficientes para calcular o volume de negócios.
ZY De acordo com as fontes, se os preços de abertura e fechamento não coincidirem, o cálculo seguirá esta fórmula.
(OrderOpenPrice() + OrderClosePrice()) * MathAbs(OrderProfit() / ((OrderClosePrice() - OrderOpenPrice()))É disso que você está falando?
Volume de negócios - quanto dinheiro você moe. A comissão é calculada a partir desse valor em corretoras normais.
Se, por exemplo, forem exigidas condições individuais, a primeira coisa que eles perguntarão é o tamanho do volume de negócios.
Reproduzi o que é feito no Report e escrevi sobre isso na primeira postagem. A classificação por eles coincide com a classificação apenas por volumes.
O problema com a variante de cálculo sem Mt4Orders.
A função https://www.mql5.com/ru/forum/98421/page2#comment_2908365 fornece resultados bastante diferentes.
Um dos resultados dessa função: -149,96. O sinal - você pode remover fabs()
E para o mesmo cálculo via Report: 13.839.230,40.
Talvez você tenha um equivalente para o MT5 que corresponda ao MT4Orders?
Caso contrário, a solução mais fácil é verificar se uma negociação feita por meio das funções do MT5 pode ser visualizada no histórico por meio do MT4Orders. Para usar isso
Caso contrário, a solução mais fácil é saber se uma negociação feita por meio das funções do MT5 pode ser visualizada no histórico por meio do MT4Orders.
Então é exatamente assim que o Report.mqh funciona! Ou estou entendendo completamente errado as perguntas de hoje?
Turn_Over += (OrderOpenPrice() + OrderClosePrice()) * MathAbs(OrderProfit() / ((OrderClosePrice() - OrderOpenPrice()));Isso pode ser simplificado com a substituição:
OrderProfit()=(OrderClosePrice()-OrderOpenPrice()) * OrderLots() * lotSize
Substituir
Excluir (OrderClosePrice()-OrderOpenPrice()))
Vamos descobrir o tamanho de 1 lote/contrato:
Obtenha o lotSize para o Virtual no modo mat a partir de OrderProfit()=(OrderClosePrice()-OrderOpenPrice())) * OrderLots() * lotSize
Total para Virtual
Para MT5: (isso é o que eu queria obter inicialmente e acabou sendo muito mais fácil do que no exemplo ).
Os resultados são exatamente os mesmos.
Mas não tenho certeza se devo usar SYMBOL_TRADE_CONTRACT_SIZE em vez de lotSize=SYMBOL_TRADE_TICK_VALUE / SYMBOL_TRADE_TICK_SIZE;
Ou o resultado é o mesmo em teoria? Na prática, com um exemplo simples de um caractere, sim.
Total para Virtual
Ou seja, obtivemos o que escrevemos originalmente.
Não tenho certeza se você deve usar SYMBOL_TRADE_CONTRACT_SIZE em vez de lotSize=SYMBOL_TRADE_TICK_VALUE / SYMBOL_TRADE_TICK_SIZE;
Ou o resultado é o mesmo na teoria? Na prática, com um exemplo simples de um único símbolo, sim.
O símbolo pode não estar no Market Watch.