Ordersend y Oanda

Foro dedicado a todo lo relacionado con la versión 4 de la plataforma de Metaquotes.
Responder
Avatar de Usuario
Gamelu
Mensajes: 787
Registrado: 21 May 2009 16:49

Ordersend y Oanda

Mensaje por Gamelu »

A ver si me echan un cable los usuarios de este broker, no consigo meterle ordenes a mercado desde un EA. No se si sera por el quinto decimal o no pero he probado de todo.
Este codigo no funciona y no se por que:

OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-(700*Point),Ask+(70*Point),"My EA",12345,0,Green); //En un broker de 4 decimales si que funciona...


En el backtest si funciona, cuando no funciona es en el forward test, y si lo ejecuto sin stop y sin target si que entra, el probrema esta aqui pero no se solucionarlo..

OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"My EA",12345,0,Green); //Asi si funciona

Luego no me hace order modifi, una vez ha entrado sin stop ni target, al ser de 5 decimales le añado un 0 mas a los target y stop, con esto ya deberia de estar compensado, a ver si algun usuario de oanda me ilumina.
Saludos
CJS
Mensajes: 174
Registrado: 01 May 2008 16:54
Ubicación: Barcelona

Re: Ordersend y Oanda

Mensaje por CJS »

Hola,

Supongo que si, has verificado que tu TP no esté demasiado cercano?

MarketInfo(argSymbol,MODE_STOPLEVEL)



Saludos,
___________________________

El trading puede aportar beneficios mucho más valiosos que el dinero.
CJS
Avatar de Usuario
Gamelu
Mensajes: 787
Registrado: 21 May 2009 16:49

Re: Ordersend y Oanda

Mensaje por Gamelu »

Me devuelve 0
MarketInfo("EURUSD",MODE_STOPLEVEL)
Avatar de Usuario
Gamelu
Mensajes: 787
Registrado: 21 May 2009 16:49

Re: Ordersend y Oanda

Mensaje por Gamelu »

GetLastError( ) me devuelve error 130

http://docs.mql4.com/constants/errors


ERR_INVALID_STOPS 130 Invalid stops.
Avatar de Usuario
Gamelu
Mensajes: 787
Registrado: 21 May 2009 16:49

Re: Ordersend y Oanda

Mensaje por Gamelu »

Bueno listo, solucionado en dos pasos, primero meto la orden y luego la modifico, de momento me vale:

Código: Seleccionar todo

if(OrdersTotal()==0)
   OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"My EA",12345,0,Green);
else
  {
  int TakeProfit = 100; //points
  int StopLoss = 100;
  double SL, TP;
  OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
  SL = NormalizeDouble(OrderOpenPrice() - StopLoss * Point,Digits);
  TP = NormalizeDouble(OrderOpenPrice() + TakeProfit * Point,Digits);
  OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,Yellow);  
  }

CJS
Mensajes: 174
Registrado: 01 May 2008 16:54
Ubicación: Barcelona

Re: Ordersend y Oanda

Mensaje por CJS »

EDITO: No había visto tu último post.

------------------------------------

Está claro que el problema está en el SL o TP.

Te paso algunas funciones que uso y que "en teoría" se adaptan a 4 y 5 dígits bróker.

Declara esta variables globales:

double StopLoss = 20;
double TakeProfit=80;
int Slipagge=3;

Declara también estas 2:

double UsePoint;
int UseSlippage;

Pon esto dentro del init()

int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(),Slippage);
}

Pon estas 2 funciones personalizadas al final del programa

// Pip Point Function
double PipPoint(string Currency)
{
int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return(CalcPoint);
}
// Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return(CalcSlippage);
}

Y para lanzar la orden pon este bloque:

double OpenPrice = Ask;

// Calculate stop loss and take profit

if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);

// Open buy order

BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSlippage,
BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);

Espero te funcione.

Ya me dirás
___________________________

El trading puede aportar beneficios mucho más valiosos que el dinero.
CJS
Avatar de Usuario
Gamelu
Mensajes: 787
Registrado: 21 May 2009 16:49

Re: Ordersend y Oanda

Mensaje por Gamelu »

Gracias cjs , ya voy a probar tu codigo, por que el apaño que he echo no es suficiente, funciona cuando quiere.

El tema esta en que hay que mandar un stop de 5 decimales, y a pesar de guardar el numero en un double, luego al mostralo en pantalla solo muestra 4. Debe ser que el mt no esta preparado para 5.

Si no consigo que funcione con tu codigo tendre que tirar de una funcion de control de equidad y cierre respectivos
Avatar de Usuario
Fer137
Mensajes: 1371
Registrado: 12 Nov 2007 18:43

Re: Ordersend y Oanda

Mensaje por Fer137 »

Tienes que poner el OrderSend sin stoploss ni takeprofits, y en caso necesario incluirlos después con OrderModify.



Por ejemplo yo lo hago así para que funcione en Oanda:

Código: Seleccionar todo

  if(broker5=="OANDA"){tk=OrderSend(Symbol(),tip,NormalizeDouble(lotmult*minlot,2),NormalizeDouble(precio,Digits),slipo,0,0,comment,magicnumber,0,col);
     if(sl>0 || tp>0)while(tk>0 && !bm && i<5){i++;bm=OrderModify(tk,NormalizeDouble(precio,Digits),NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),0);}}
   else tk=OrderSend(Symbol(),tip,NormalizeDouble(lotmult*minlot,2),NormalizeDouble(precio,Digits),slipo,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),comment,magicnumber,0,col);
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Metatrader 4”