[Invalid stops] Ordens não abrem - página 2

 

Estou desenvolvendo um EA de compras e vendas automáticas mas está dando esse erro:

2023.01.04 22:39:21.886 Robô de compra e venda (EURUSD,D1)      CTrade::OrderSend: instant sell 100.00 EURUSD at 1.06207 sl: 51.06207 tp: -48.93799 [invalid stops]

O código que eu estou usando a seguir:

//+------------------------------------------------------------------+
//|                                       Robô de compra e venda.mq5 |
//|                                                    Matheus Silva |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Matheus Silva"
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
#include <Trade/Trade.mqh>
CTrade trade;
MqlTick tick;
int flag = 0;
int OnInit()
  {
//---
    trade.SetAsyncMode(false);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if (flag == 0)
   {
     flag = 1;
     SymbolInfoTick(_Symbol, tick);
   double bid = tick.bid;
   double ask = tick.ask;
   double tp = ask + 1.7;
   double al = bid - 1.7;
     
     int volume = 50;
   trade.Buy(volume, _Symbol, bid, tp, "testando robô de compra");
   trade.Sell(volume,_Symbol, ask, ask + 1.7, bid - 1.7,NULL);  
   }
   
   
  }
//+------------------------------------------------------------------+
 
theubr78 #:

Estou desenvolvendo um EA de compras e vendas automáticas mas está dando esse erro:

O código que eu estou usando a seguir:

1) Nao ignore parametros que nao vai passar, se o sistema diz que tem que ser preco, sl, tp, etc. Passe-os na ordem que ele pediu, se nao quiser passar, coloque o valor padrao que ele mesmo esta indicando (maior parte dos casos eh zero);

2) Seu preco e tp nao esta normalizado por isso o invalid stop, no CSymbolInfo tem uma funcao que faz isso pra voce certinho;

3) Se voce for comprar a mercado, voce nao coloca a melhor compra e sim a melhor venda. Colocando a melhor compra pode causar reject ou requote;

4) Idem ao acima, mas para venda, quando voce VENDE, voce pede como preco a melhor compra.

No caso, seu trade buy deveria ser: Buy(volume, _Symbol, ask, 0.0, tp, "testando robo de compra");

Ja no caso da venda, deveria ser: Sell(volume, _Symbol, bid, bid + 1.7, bid - 1.7);

No caso ao inves de perder tempo escrevendo _Symbol daria pra escrever NULL que ele entende que eh o atual do robo, mesma coisa compra/venda a mercado nao precisa informar o ask/bid pode colocar 0.0 que internamente o metodo recupera o valor correto.

 
Ricardo Rodrigues Lucca #:

1) Nao ignore parametros que nao vai passar, se o sistema diz que tem que ser preco, sl, tp, etc. Passe-os na ordem que ele pediu, se nao quiser passar, coloque o valor padrao que ele mesmo esta indicando (maior parte dos casos eh zero);

2) Seu preco e tp nao esta normalizado por isso o invalid stop, no CSymbolInfo tem uma funcao que faz isso pra voce certinho;

3) Se voce for comprar a mercado, voce nao coloca a melhor compra e sim a melhor venda. Colocando a melhor compra pode causar reject ou requote;

4) Idem ao acima, mas para venda, quando voce VENDE, voce pede como preco a melhor compra.

No caso, seu trade buy deveria ser: Buy(volume, _Symbol, ask, 0.0, tp, "testando robo de compra");

Ja no caso da venda, deveria ser: Sell(volume, _Symbol, bid, bid + 1.7, bid - 1.7);

No caso ao inves de perder tempo escrevendo _Symbol daria pra escrever NULL que ele entende que eh o atual do robo, mesma coisa compra/venda a mercado nao precisa informar o ask/bid pode colocar 0.0 que internamente o metodo recupera o valor correto.

Opa, primeiramente, obrigado pela resposta irmão! Porém, as alternativas que vc mandou para as funções trade buy e trade sell não estão compilando, no caso eu tenho que declarar buy como variável? Desculpe pelas dúvidas, é pq eu sou iniciante
 
theubr78 #:
Opa, primeiramente, obrigado pela resposta irmão! Porém, as alternativas que vc mandou para as funções trade buy e trade sell não estão compilando, no caso eu tenho que declarar buy como variável? Desculpe pelas dúvidas, é pq eu sou iniciante

colocou trade.Buy? ou voce apagou o "trade."?

Recomendo fortemente se esta aprendendo a programar tenta fazer em alguma linguagem um jogo da forca pegando palavras em arquivos antes de tentar se aventurar com robo pra tentar ver se entende a logica da programacao. Ou se quiser encurtar caminho tem os freelancers...

 
Olá, estou com uma conta Demo da C-trader marketing de $ 10.000,00 e minhas ordens não estão abrindo.
 
tgbahia #:
Olá, estou com uma conta Demo da C-trader marketing de $ 10.000,00 e minhas ordens não estão abrindo.

Amigo, nao roube o topico de outra pessoa e voce precisa explicar mais que assim vai ter que ser na base da adivinhacao.

Razão: