Boa noite pessoal, estou codificando um EA para day trade em Mini dólar. Quando tento alterar os valores de sl e tp de uma operação aberta, recebo um erro de 'Invalid request'. Alguém pode me indicar a possível saída?
Bom dia,
Você está tentando alterar o trade da posição 0(zero) da lista de posições, request.position=PositionGetTicket(0 ) e eu te pergunto: Tem certeza que a posição de índice zero é do trade do WDOU19 em questão?
Bom dia,
Você está tentando alterar o trade da posição 0(zero) da lista de posições, request.position=PositionGetTicket(0 ) e eu te pergunto: Tem certeza que a posição de índice zero é do trade do WDOU19 em questão?
Bom dia novamente,
acho que você não entendeu a msg de erro! A msg diz que você quer alterar o trade #8 para WDOU19, mas não quer dizer que o trade #8 é para WDOU19.
Bom se tem apenas um posição aberta o índice da posição é 0(zero) . Mas o seu código não é o correto.
Para ter certeza que pegou o TICKET correto da posição do aberta para um instrumento faz o seguinte:
void DoExistsPositions() { for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i))) if(PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)== MagicNumber) { Ticket=PositionGetTicket(i); } } }
Bom dia novamente,
acho que você não entendeu a msg de erro! A msg diz que você quer alterar o trade #8 para WDOU19, mas não quer dizer que o trade #8 é para WDOU19.
Bom se tem apenas um posição aberta o índice da posição é 0(zero) . Mas o seu código não é o correto.
Para ter certeza de pegar a posição do aberta para _Symbol dentro da lista de posições abertas faz o seguinte:
Olá Rogério, obrigado por seguir me auxiliando.
Rodei o seguinte código, conforme você sugeriu:
ulong ticket; for(int i=PositionsTotal()-1; i>=0; i--) { if(PositionSelectByTicket(PositionGetTicket(i))) { string position_symbol = PositionGetString(POSITION_SYMBOL); string symbol = _Symbol; int position_magic = PositionGetInteger(POSITION_MAGIC); if(position_symbol == symbol && position_magic == qtdBarrasDia) { ticket = PositionGetTicket(i); } } }
Alterei para o mini dólar WDOV19, apenas para ser o ativo vigente nesse mês. Como imaginei, caiu dentro do if mais interno do loop, preenchendo a variável ticket com a posição 4 (posição para o exemplo atual). Observe os valores das variáveis do código:
position_symbol: WDOV19
_Symbol: WDOV19
position_magic: 66
qtdBarrasDia: 66
ticket: 4
Segue o erro:
2019.09.02 09:29:39.546 2019.08.27 12:15:16 failed modify #4 buy 1.00 WDOV19 sl: 4168.000, tp: 4177.000 -> sl: 4175.000, tp: 4178.000 [Invalid request]
Alguma sugestão? obrigado.
Alguma sugestão? obrigado.
Não, mais nenhuma. Boa sorte.
Não, mais nenhuma. Boa sorte.
Descobri, era só adicionar o comando ZeroMemory(request) e ZeroMemory(result):
MqlTradeRequest request; MqlTradeResult result; ZeroMemory(request); ZeroMemory(result); request.action = TRADE_ACTION_SLTP; request.position = PositionGetTicket(0); request.symbol = _Symbol; request.sl = stopLoss; request.tp = stopGain; request.magic = qtdBarrasDia; OrderSend(request, result));
Obrigado.
Parabéns.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa noite pessoal, estou codificando um EA para day trade em Mini dólar. Quando tento alterar os valores de sl e tp de uma operação aberta, recebo um erro de 'Invalid request'. Alguém pode me indicar a possível saída?
Segue código utilizado.
Mensagem de erro:
2019.09.02 00:28:59.115 2019.08.29 13:16:43 failed modify #8 buy 1.00 WDOU19 sl: 4155.000, tp: 4170.000 -> sl: 4168.000, tp: 4171.000 [Invalid request]
Observações relevantes:
- O valor do mini dolar está em 4168.5 quando faço essa chamada, mas já testei colocar o 4160 e também deu mesmo erro.
- Eu controlo para ter apenas uma operação em aberto, por isso passo indice 0 na position. Já chamei o método PositionsTotal() e confirmei ter uma posição ativa.
- Caso ajude, segue meu código utilizado para fazer a compra que estou querendo modificar os stops:
Aguardo por alguma ajuda. Muito obrigado.