Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 657
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
Parece estar tudo no ponto e mesmo com referências... Justamente quando alguém declara ter lido a documentação e pede para remover a rede (que, a propósito, é utilizada em FORTS)... é preciso ser sarcástico aqui.
Certifique-se de que não é mandado embora. )
tarde, já lá estás.
Exemplo para uma conta de cobertura:
A primeira operação é Comprar 0,02 e a segunda operação é Vender 0,01. Total de duas posições: Comprar 0,02 e Vender 0,001. Depois fechamos a posição Vender 0,01 e fechamos a posição Comprar 0,02:
//| TestEA.mq5 |
//| Copyright © 2016, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
CTrade m_trade; // trading object
CPositionInfo m_position; // trade position object
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
static long counter=0;
counter++;
if(counter%300==0 && counter<700)
{
static int number=0;
number++;
if(number==1)
m_trade.Buy(0.02);
if(number==2)
m_trade.Sell(0.01);
}
if(counter>7000)
{
int positions= PositionsTotal();
if(positions == 0)
return;
int positions_total=PositionsTotal();
for(int i=positions_total-1;i>=0;i--)
if(m_position.SelectByIndex(i))
m_trade.PositionClose(m_position.Ticket(),-1);
}
}
//+------------------------------------------------------------------+
e Jornal:
Trades 2016.02.25 00:13:35 deal #2 buy 0.02 EURUSD at 1.10167 done (based on order #2)
Trade 2016.02.25 00:13:35 deal performed [#2 buy 0.02 EURUSD at 1.10167]
Trade 2016.02.25 00:13:35 order performed buy 0.02 at 1.10167 [#2 buy 0.02 EURUSD at 1.10167]
TestEA (EURUSD,H1) 2016.02.25 00:13:35 CTrade::OrderSend: instant buy 0.02 EURUSD at 1.10167 [done at 1.10167]
Trade 2016.02.25 00:30:17 instant sell 0.01 EURUSD at 1.10157 (1.10157 / 1.10164 / 1.10157)
Trades 2016.02.25 00:30:17 deal #3 sell 0.01 EURUSD at 1.10157 done (based on order #3)
Trade 2016.02.25 00:30:17 deal performed [#3 sell 0.01 EURUSD at 1.10157]
Trade 2016.02.25 00:30:17 order performed sell 0.01 at 1.10157 [#3 sell 0.01 EURUSD at 1.10157]
TestEA (EURUSD,H1) 2016.02.25 00:30:17 CTrade::OrderSend: instant sell 0.01 EURUSD at 1.10157 [done at 1.10157]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 PositionClose #3 POSITION_TYPE_SELL 0.01
Trade 2016.02.25 02:12:06 instant buy 0.01 EURUSD at 1.10131, close #3 (1.10123 / 1.10131 / 1.10123)
Trades 2016.02.25 02:12:06 deal #4 buy 0.01 EURUSD at 1.10131 done (based on order #4)
Trade 2016.02.25 02:12:06 deal performed [#4 buy 0.01 EURUSD at 1.10131]
Trade 2016.02.25 02:12:06 order performed buy 0.01 at 1.10131 [#4 buy 0.01 EURUSD at 1.10131]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 CTrade::OrderSend: instant buy 0.01 position #3 EURUSD at 1.10131 [done at 1.10131]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 PositionClose #2 POSITION_TYPE_BUY 0.02
Trade 2016.02.25 02:12:06 instant sell 0.02 EURUSD at 1.10123, close #2 (1.10123 / 1.10131 / 1.10123)
Trades 2016.02.25 02:12:06 deal #5 sell 0.02 EURUSD at 1.10123 done (based on order #5)
Trade 2016.02.25 02:12:06 deal performed [#5 sell 0.02 EURUSD at 1.10123]
Trade 2016.02.25 02:12:06 order performed sell 0.02 at 1.10123 [#5 sell 0.02 EURUSD at 1.10123]
TestEA (EURUSD,H1) 2016.02.25 02:12:06 CTrade::OrderSend: instant sell 0.02 position #2 EURUSD at 1.10123 [done at 1.10123]
O que é que não é exactamente claro? Que precisa de abrir uma ordem oposta com o mesmo volume para fechar a posição?
Quem sabe - o"POSITION_PROFIT" inclui comissão e troca?
Se não, que parâmetro deve ser utilizado para descobrir o montante da comissão de uma encomenda na MQL5?
Quem sabe - o"POSITION_PROFIT" inclui comissão e troca?
Se não - que parâmetro é necessário para descobrir o montante da comissão acumulada na MQL5?
POSITION_PROFIT é simplesmente o lucro da posição (sem dedução de comissões, swaps ...). Para descobrir a troca acumulada deuma posição, faça o seguinte:
POSIÇÃO_SWAP
Troca acumulada
duplo
E a comissão final e o swap total, podem ser obtidos após o encerramento da posição, na história das transacções:
DEAL_COMMISSION
Deal_commission
duplo
DEAL_SWAP
Troca acumulada no fecho
duplo
Quem sabe - o"POSITION_PROFIT" inclui comissão e troca?
Se não, que parâmetro deve ser utilizado para descobrir o montante da comissão cobrada por uma encomenda na MQL5?
Em russo, uma ordem não pode ter lucro ou prejuízo e é apenas uma ordem a executar. Quando a ordem é executada, recebe a sua posição no mercado ao preço que escolheu.
POSITION_PROFIT é apenas o lucro da posição (sem quaisquer comissões, swaps ...). Pode descobrir a troca acumulada daposição desta forma:
E a comissão final e a troca final, pode descobrir após o encerramento da posição, na história das transacções:
Bem, isto está tudo errado, ou melhor, incompleto.
Porque preciso de saber a comissão após o encerramento, ou melhor, preciso de saber, mas em qualquer altura, vamos assumir que a conta tem uma comissão e um drawback ou breakeven, como posso calcular de modo a que o primeiro gatilho seja no nível em que a comissão e os swaps são sobrepostos em caso de rollback e encerramento de preços. Acrescento 1pp para cobrir a comissão. E os swaps, já que a posição pode permanecer no mercado durante uma semana e durante esse tempo pode demorar 3pp para ganhar swaps e ser fechado com um drawback quando o Breakeven é accionado?
Ou talvez eu não compreenda os cálculos?
Em russo, uma ordem não pode ser nem um lucro nem uma perda, é apenas uma ordem a executar. Uma vez executada a ordem, obtém a sua posição no mercado ao preço que escolheu.
Isto está tudo errado, ou melhor, incompleto.
Porque preciso de saber a comissão após o encerramento, ou melhor, preciso de saber, mas em qualquer altura, vamos assumir que a conta tem uma comissão e um saldo de saldo ou de break-even, como calcular para que o primeiro acerto seja a um nível que se sobreponha à comissão e troque em caso de recuo e encerramento do preço. Acrescento 1pp para cobrir a comissão. E os swaps, já que a posição pode permanecer no mercado durante uma semana e durante esse tempo pode demorar 3pp para ganhar swaps e ser fechado com um drawback quando o Breakeven é accionado?
Ou estou a perder algo nos cálculos?
Quem sabe - o"POSITION_PROFIT" inclui comissão e troca?
Se não, que parâmetro é necessário para descobrir o montante da comissão cobrada por uma encomenda na MQL5?
Não estou a impor a biblioteca MT4Orders. Mas talvez fosse mais fácil simplesmente chamar a boa e velha Comissão da Ordem?
Funciona não só em contas de cobertura, mas também em contas líquidas.
Compreendo que"POSITION_PROFIT" já inclui tudo (troca, lucro, comissão).