Maldito error 130 al infierno

 

Alguien sabe por qué estaría recibiendo el error 130, me he asegurado de que mi SL es lo suficientemente amplia y que está en el lado derecho del mercado (es decir, por debajo de una compra). Cualquier ayuda sería muy apreciada y un gran alivio* suspiro

if(COMPRA)
{
if(stoploss > 0) //SL se fija en 35
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//¡COMPRA!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY");

Gracias a todos,

Pat

 
FXpipclash:

Alguien sabe por qué estaría recibiendo el error 130, me he asegurado de que mi SL es lo suficientemente amplia y que está en el lado derecho del mercado (es decir, por debajo de una compra). Cualquier ayuda sería muy apreciada y un gran alivio* suspiro

si(COMPRA)
{
if(stoploss > 0) //SL se fija en 35
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//¡COMPRA!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY");

Gracias a todos,

Pat

prueba esto... Creo que estás mezclando cuando usar Bid y Ask


si(COMPRA)
{
if(stoploss > 0) //SL se fija en 35
realSL = Bid-(stoploss * Punto);
if(takeprofit > 0)
realTP = Bid+ takeprofit * Punto;
// ¡¡¡COMPRA!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY");



************************************

Regla de oro... si entras en el ask, sales con el bid, si entras en el Bid sales con el ask


LongStop = Oferta-(stoploss*Punto)

LongLimit = Oferta+(límite*Punto)

LongEntry = ASK

LongTrail = Oferta-(stoploss*Punto)



ShortStop = Oferta+(stoploss*Punto)

ShortLimit =Ask-(limit*Point)

ShortEntry= BID

ShortTrail = Ask+(stoploss*Point)




Lobo marino

 
seawolf wrote >>

prueba esto... Creo que estás mezclando cuando usar Bid y Ask

if(COMPRA)
{
if(stoploss > 0) //SL se fija en 35
realSL = Bid-(stoploss * Punto);
if(takeprofit > 0)
realTP = Bid+ takeprofit * Punto;
// ¡¡¡COMPRA!!!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY");

************************************

Regla de oro... si entras en el ask, sales con el bid, si entras en el Bid sales con el ask

LongStop = Bid-(stoploss*Point)

LongLimit = Oferta+(límite*Punto)

LongEntry= ASK

LongTrail = Oferta-(stoploss*Punto)

ShortStop = Oferta+(stoploss*Punto)

ShortLimit =Ask-(limit*Point)

ShortEntry= BID

ShortTrail = Ask+(stoploss*Point)

Seawolf

Gracias por tu respuesta seawolf, entonces en mi trozo de código original, si voy a comprar, ¿no debería usar el precio de venta para mi cálculo, porque ese va a ser el precio que voy a tener que pagar?

 
¿Quién es su agente?
 

es el precio que pagas al entrar, pero tienes que cubrir el spread por lo que pagas el otro precio al salir... el hecho de que estés usando el ask para entradas Y salidas es absolutamente erróneo.


sigue la regla general que te he dado y todo funcionará bien... Sé que puede ser muy confuso, por eso lo tengo escrito en mi pizarra y después de muchos años de operar y programar, todavía lo consulto casi a diario. He encontrado muchos artículos que ni siquiera lo hacen bien, así que no te sientas mal.

 

Hola

Aunque el código original es incorrecto porque estás usando Bid en lugar de Ask para comprar, debería haber funcionado si el stoploss es realmente de 35 puntos. Asegúrese de que el sistema que está ejecutando en no ha cambiado a 5 decimales de lo contrario el stoploss debe ser 350 puntos. Interbank estaba ejecutando 5 decimales en la demo pero 4 en el sistema en vivo en un momento dado.

 
FXpipclash:

Alguien sabe por qué estaría recibiendo el error 130, me he asegurado de que mi SL es lo suficientemente amplia y que está en el lado derecho del mercado (es decir, por debajo de una compra). Cualquier ayuda sería muy apreciada y un gran alivio* suspiro

if(BUYING)
{
if(stoploss > 0) //SL se establece en 35
realSL = Ask - (stoploss * Point);
if(takeprofit > 0)
realTP = Ask + takeprofit * Point;
//¡BUYING!
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, realSL, realTP, nameEA, 887722,0,Red);

if(ticket < 0)
Print("OrderSend (",nameEA,") failed with error #", GetLastError());
Alert("CODE_TEST: BUY BUY BUY");

Gracias a todos,

Pat

Bueno, puedo afirmar categóricamente que Seawolf y Ruptor están hablando por su trasero colectivo.

Para una orden OP_BUY, tienes toda la razón al utilizar el precio Ask para generar tu precio de entrada y stops.

Lo que tiene que hacer es comprobar los valores de sus paradas utilizando una declaración Print("realSL =, "DoubleToStr(realSL,Digits)," realTP=",DoubleToStr(realTP,Digits)) directamente antes de enviar su orden para asegurarse de que los valores son los esperados. Si son como usted espera, entonces debe comprobar los valores aceptables utilizando la función MarketInfo() con el identificador MODE_STOPLEVEL.

 
¿Está utilizando un broker de 5 dígitos? Si es así, su variable "Punto" hará que todos sus SL/TP sean una décima parte del valor real.
 
cloudbreaker wrote >>

Bueno, puedo afirmar categóricamente que Seawolf y Ruptor están hablando de su trasero colectivo.

Para una orden OP_BUY, tienes toda la razón al utilizar el precio Ask para generar tu precio de entrada y stops.

Lo que tiene que hacer es comprobar los valores de sus paradas utilizando una declaración Print("realSL =, "DoubleToStr(realSL,Digits)," realTP=",DoubleToStr(realTP,Digits)) directamente antes de enviar su orden para asegurarse de que los valores son los esperados. Si son como usted espera, entonces debería comprobar los valores aceptables utilizando la función MarketInfo() con el identificador MODE_STOPLEVEL.

Gracias cloudbreaker, sabía que tenía razón con lo de pagar el ask, en ningún sitio digo que también estoy pagando el ask al salir de la operación, imprimir el valor del SL es una gran idea, gracias por todas tus aportaciones.

 
eacoder wrote >>
¿Estás usando un broker de 5 dígitos? Si es así, su variable "Punto" hará que todos sus SL/TP sean 1/10 del valor real.

No, estoy usando FXDD que es un broker de 4 dígitos, todo el asunto es bastante misterioso para mí, voy a intentar

 
FXpipclash wrote >>

Gracias cloudbreaker, sabia que estaba en lo cierto con lo de pagar el ask, en ningún sitio digo que también estoy pagando el ask al salir de la operación, imprimir el valor del SL es una gran idea, gracias por toda tu aportación.

Muy bien Nube, este me estaba dando vueltas pero creo que lo resolví, por alguna razón tanto el TP como el SL estaban siendo retronados como 1.0 (demasiado pequeños) así que rastreé mis variables a través de todo el proceso y noté que declaré los valores de takeprofit y stoploss como dobles y los valores de realSL realTP como enteros, cambiar realTP y realSL a dobles arregló el problema, gracias de nuevo.