Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 658
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
Vamos verificar com um simples conselheiro...
Não há necessidade de verificar. A lógica é a mesma que na MQL4: Profit, Commission e Swap são entidades separadas.
Agora vamos verificar com uma simples EA...
Vladimir, a questão é que nos quatro eu faço isto:
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
Como o fazes em cinco?
Vladimir, a questão é que nos quatro eu faço isto:
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
Como é que o faz em cinco?
Por favor mostre-o por código, aqui está um código directo em mql5 e de preferência sem perversões.
//| Get the property value "POSITION_COMMISSION" |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP" |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
{
return(PositionGetDouble(POSITION_SWAP));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT" |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
{
return(PositionGetDouble(POSITION_PROFIT));
}
É quase impossível! Puxado de SB, código directo
//| Get the property value "POSITION_COMMISSION" |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
{
return(PositionGetDouble(POSITION_COMMISSION));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP" |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
{
return(PositionGetDouble(POSITION_SWAP));
}
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT" |
//+------------------------------------------------------------------+
Esqueceu-se de o colocar na documentação, mas será que esta"POSIÇÃO_COMISSÃO" funciona?
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
fxsaber, 2016.07.19 12:40
POSITION_COMMISSION propriedade no testador (RoboForexEU-MetaTrader 5) devolve sempre comissão zero.
Também POSITION_COMMISSION (== 8) está ausente na ajuda e meta-editor (destaque), mas é familiar ao compilador. A comissão de posição não é difícil de determinar utilizando outro método (de trabalho). POSITION_COMMISSION propriedade - um rudimento?
{
double Commission = ::PositionGetDouble(POSITION_COMMISSION);
// На случай, если POSITION_COMMISSION не работает
if (Commission == 0)
{
const ulong Ticket = MT4ORDERS::GetPositionDealIn();
if (Ticket > 0)
{
const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);
if (LotsIn > 0)
Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
}
}
return(Commission);
}
Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos
Perguntas de principiantes
fxsaber, 2016.10.29 16:23
Não estou a impor a biblioteca MT4Orders. Mas talvez fosse mais fácil simplesmente chamar a boa e velha Comissão da Ordem?
Ainda funciona não só em contas de cobertura mas também em contas líquidas.
Vamos verificar isso agora com um simples Expert Advisor...
Aqui:POSITION_PROFIT mostra o lucro da posição
. Não tem em conta a troca e afins.
Vladimir, a questão é que nos quatro eu faço isto:
swap=OrderSwap();
commission=OrderCommission();
if(swap+commission<0.0) {
costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
} else {
costs=0.0;
}
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
OrderModify(...);
}
Como é que o faço em cinco?
A comissão é tão imprevisível que só pode ser determinada num comércio fechado. Para uma posição aberta, só se pode descobrir o lucro actual (que não tem em conta nem o impacto do swap nem o impacto das comissões) e o swap. Aqui está o código:
colocar um ponto de parada na linha " m_trade.PositionClose(Symbol();" e fazer o teste sobre a história. Quando o testador pára no ponto de parada, comparar os números nas colunas Lucro e Troca com os números que não estão escritos no registo do testador.
Aqui:POSITION_PROFIT mostra o lucro da posição
. Não tem em conta a troca e afins.
Ok. Conseguimo-lo.
A solução de fxsaber é boa, eu apliquei-a.
Basicamente, transferi o meu programa MQL4 para MQL5 quase sem qualquer problema.
Os detalhes são dados acima.
Muito obrigado!