[Invalid stops] Ordens não abrem

 

Estou desenvolvendo um EA de cruzamento de medias, não dá erros de compilação, mas as ordens não abrem, ele da erro.

2019.07.04 12:35:20.732 2019.06.03 01:16:35   failed market buy 5.00 EURUSD sl: -28.88274 tp: 31.11726 [Invalid stops]
2019.07.04 12:35:20.732 2019.06.03 01:16:35   CTrade::OrderSend: market buy 5.00 EURUSD sl: -28.88274 tp: 31.11726 [invalid stops]
2019.07.04 12:35:20.732 2019.06.03 01:16:36   failed market buy 5.00 EURUSD sl: -28.88275 tp: 31.11725 [Invalid stops]
2019.07.04 12:35:20.732 2019.06.03 01:16:36   CTrade::OrderSend: market buy 5.00 EURUSD sl: -28.88275 tp: 31.11725 [invalid stops]
2019.07.04 12:35:20.733 2019.06.03 01:16:38   failed market buy 5.00 EURUSD sl: -28.88274 tp: 31.11726 [Invalid stops]
2019.07.04 12:35:20.733 2019.06.03 01:16:38   CTrade::OrderSend: market buy 5.00 EURUSD sl: -28.88274 tp: 31.11726 [invalid stops]
2019.07.04 12:35:20.737 2019.06.03 01:16:39   failed market buy 5.00 EURUSD sl: -28.88275 tp: 31.11725 [Invalid stops]
2019.07.04 12:35:20.737 2019.06.03 01:16:39   CTrade::OrderSend: market buy 5.00 EURUSD sl: -28.88275 tp: 31.11725 [invalid stops]
2019.07.04 12:35:20.737 2019.06.03 01:16:40   failed market buy 5.00 EURUSD sl: -28.88274 tp: 31.11726 [Invalid stops]
2019.07.04 12:35:20.737 2019.06.03 01:16:40   CTrade::OrderSend: market buy 5.00 EURUSD sl: -28.88274 tp: 31.11726 [invalid stops]
2019.07.04 12:35:20.738 2019.06.03 01:16:42   failed market buy 5.00 EURUSD sl: -28.88275 tp: 31.11725 [Invalid stops]
2019.07.04 12:35:20.738 2019.06.03 01:16:42   CTrade::OrderSend: market buy 5.00 EURUSD sl: -28.88275 tp: 31.11725 [invalid stops]

Aqui está o codigo:


//+------------------------------------------------------------------+
//|                                                   Cruzamento.mq5 |
//|                                                  Henrique Araújo |
//|                                              araujo_br@yahoo.com |
//+------------------------------------------------------------------+
#property copyright "Henrique Araújo"
#property link      "araujo_br@yahoo.com"
#property version   "1.00"
#include <Trade/Trade.mqh>
CTrade       trade;

input int media_curta;
input int media_longa;
input int lotes;
input int stop_loss;
input int take_profit;
string sinal="";
double last_price;
double smaArray[];
int smaHandle;
double ask, bid;
void OnTick()
  { 
   
    Comment("SINAL: ", sinal);
    ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
    bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
    last_price = SymbolInfoDouble(_Symbol,SYMBOL_LAST);
    smaHandle = iMA(_Symbol,_Period,media_curta,0,MODE_SMA,PRICE_CLOSE);
    ArraySetAsSeries(smaArray, true);
    CopyBuffer(smaHandle, 0, 0, 3, smaArray);
    
    if(last_price>smaArray[0])
    {
    sinal="COMPRA";
    trade.Buy(lotes,_Symbol,ask,ask-stop_loss,ask+take_profit,"");
    }
    
    else if (last_price<smaArray[0])
    {
    sinal="VENDA";
    }
    
    
  }

EDIT

O problema é o take profit e o stop loss, removendo ele o EA funciona perfeitamente.

 
Henrique Araújo:

Estou desenvolvendo um EA de cruzamento de medias, não dá erros de compilação, mas as ordens não abrem, ele da erro.

Aqui está o codigo:


EDIT

O problema é o take profit e o stop loss, removendo ele o EA funciona perfeitamente.

Não existe Stop Loss negativo.
 

Além do stop-loss negativo, o take-profit da ordem de compra também está um valor muito abaixo do preço de mercado do EURUSD.

Com esses valores de SL e TP a ordem jamais vai ser aceita.

 
verifica suas variáveis, ASK BID são e estão como Double mas seu SL e TP como Inteiros....estranho isso
 
Henrique Araújo:

Estou desenvolvendo um EA de cruzamento de medias, não dá erros de compilação, mas as ordens não abrem, ele da erro.

Aqui está o codigo:


EDIT

O problema é o take profit e o stop loss, removendo ele o EA funciona perfeitamente.

Olá  Henrique Araújo, seu problema é muito simples: você está confundindo valor absoluto (preço) e relativo (pontos, pips, etc.) de S/L.

Como na função a ser passada você deve passar um preço para S/L, deve antes converter seu S/L em pontos (int) para um preço (double), como o exemplo abaixo (em metalinguagem):

S/L (preço) = Ask - S/L (pontos) * Point();

Sds.,
Rogério Figurelli


 

 
Estou com o mesmo problema, até agora sem solução
 
Rogerio Figurelli:

Olá  Henrique Araújo, seu problema é muito simples: você está confundindo valor absoluto (preço) e relativo (pontos, pips, etc.) de S/L.

Como na função a ser passada você deve passar um preço para S/L, deve antes converter seu S/L em pontos (int) para um preço (double), como o exemplo abaixo (em metalinguagem):

Sds.,
Rogério Figurelli


 

Entendi o código que você escreveu, mas, implementei no meu EA e não funcionou irmão, continuou com o mesmo problema.
 

Estudei o código pois estava com o mesmo problema e consegui resolver a questão, utilizei a variável MqlTicks/SymbolInfoTicks para ter o valor de ask e bid e coloquei SymbolInfoTicks dentro de OnTick e resolveu o meu problema, espero que vocês tenham entendido e que consigam resolver também.

 
Forex não têm LAST PRICE, só BID e ASK
 

Olá, estou tendo um problema para rodar meu robô. 
Alguém pode me dá um help pvf?

Essa parte abaixo foi retirada de lá.

input double Gain = 0.100;

input double Loss = 0.100;

input double Volume = 0.01;


void Compra()

{
  double price = simbolo.Ask();
  printf("Chegou aqui Compra %d", price);
  double stoploss = price - Loss;
   printf("Chegou aqui stoploss %d", stoploss);
  double takeprofit = price + Gain;
   printf("Chegou aqui takeprofit %d", takeprofit);
  negocio.Buy(Volume, NULL, price, stoploss, takeprofit, "Compra cruzamento média EA");
   printf("Chegou aqui negocio");


resultado das variáveis:

2021.03.18 04:49:04.562 2021.03.16 14:21:13   Chegou aqui Compra -1697371075

2021.03.18 04:49:04.562 2021.03.16 14:21:13   Chegou aqui stoploss 749042296

2021.03.18 04:49:04.562 2021.03.16 14:21:13   Chegou aqui takeprofit -749042296


esse é o erro gerado:

2021.03.18 04:49:04.562 2021.03.16 14:21:13   failed market buy 10 EURUSD sl: -8.80520 tp: 11.19480 [Invalid stops]


 
ruan_analista:

Olá, estou tendo um problema para rodar meu robô. 
Alguém pode me dá um help pvf?

Essa parte abaixo foi retirada de lá.

input double Gain = 0.100;

input double Loss = 0.100;

input double Volume = 0.01;


void Compra()

{
  double price = simbolo.Ask();
  printf("Chegou aqui Compra %d", price);
  double stoploss = price - Loss;
   printf("Chegou aqui stoploss %d", stoploss);
  double takeprofit = price + Gain;
   printf("Chegou aqui takeprofit %d", takeprofit);
  negocio.Buy(Volume, NULL, price, stoploss, takeprofit, "Compra cruzamento média EA");
   printf("Chegou aqui negocio");


resultado das variáveis:

2021.03.18 04:49:04.562 2021.03.16 14:21:13   Chegou aqui Compra -1697371075

2021.03.18 04:49:04.562 2021.03.16 14:21:13   Chegou aqui stoploss 749042296

2021.03.18 04:49:04.562 2021.03.16 14:21:13   Chegou aqui takeprofit -749042296


esse é o erro gerado:

2021.03.18 04:49:04.562 2021.03.16 14:21:13   failed market buy 10 EURUSD sl: -8.80520 tp: 11.19480 [Invalid stops]


Você sabe Programar em MQL5??

De novo, se você LEU todos os posts e sabe como um Livro de Ofertas funciona:  NÃO existe Stop Loss Negativo!

Razão: