noob1: Hola. Estoy tratando de calcular el StopLoss desde el mínimo y el máximo de la primera barra, después de colocar la orden pendiente, para comprar y vender respectivamente. Pero no obtuve ningún resultado, sólo 130 de error, eso es todo. Gracias de antemano.
¿Es el mismo billete? Y la distancia al stoploss puede ser demasiado pequeña.
Compruebe si OrderOpenPrice() está demasiado cerca del SL y si los stops están "a la derecha del precio". Puede leerlo aquí:
Los precios StopLoss y TakeProfit no pueden estar demasiado cerca del mercado. La distancia mínima del stop en pips puede obtenerse utilizando la función MarketInfo() con el parámetro MODE_STOPLEVEL. El error 130 (ERR_INVALID_STOPS) se generará en caso de paradas erróneas o no normalizadas.
En este caso, es decir, para una orden pendiente, el "mercado" es su "precio abierto pendiente".
Enel probador de estrategias el comandoMarketInfo(Symbol(),MODE_TICKVALUE) = 0(!) Esto ocurre en situaciones en las que, por ejemplo, el instrumento es EURUSD y la moneda de balance es RUR .... y en otras combinaciones. Tengo entendido que la moneda de equilibrio debe ser la misma que el nombre de la segunda moneda del par de divisas. En caso contrario, devuelve el valor cero (en el probador de estrategias), lo que hace imposible realizar pruebas con las combinaciones deseadas. ¿Cómo resolver este problema?
Enel probador de estrategias el comandoMarketInfo(Symbol(),MODE_TICKVALUE) = 0(!) Esto ocurre en situaciones en las que, por ejemplo, el instrumento es EURUSD y la moneda de balance es RUR .... y en otras combinaciones. Tengo entendido que la moneda de equilibrio debe ser la misma que el nombre de la segunda moneda del par de divisas. En caso contrario, devuelve el valor cero (en el probador de estrategias), lo que imposibilita la realización de pruebas con las combinaciones deseadas. ¿Cómo resolver este problema?
El resaltado no es correcto. Estoy calculando en EUR conEURUSD, GBPUSD, etc. Sólo cuando se habilita, puede dar 0 hasta que se reciba el primer dato, por eso pongo una condiciónantes de los cálculos conTICKVALUE que si != 0;
En el probador,MarketInfo() puede no funcionar, así que sabiendo el precio aproximado de un tick, lo establezco con la condición IsTesting() || IsOptimization() | IsVisualMode().
NULL oSymbol() significa un par de gráficos. Puede utilizar la cadena mySymbol = Symbol() para distinguirlos, luego puede utilizar 2 copias del EA en los gráficos correspondientes y asignar diferentes símbolos mágicos para asegurarse. Buena suerte.
// в OnTick()double open_nzdusd_CUR=GetNormalizeOpenPriceBySymbol("NZDUSD",Period(),0); // цена открытия текущей свечи NZDUSDdouble open_audusd_M15=GetNormalizeOpenPriceBySymbol("AUDUSD",PERIOD_M15,1); // цена открытия прошлой свечи AUDUSD на M15//+------------------------------------------------------------------+// функция вне тела OnTick()//+------------------------------------------------------------------+double GetNormalizeOpenPriceBySymbol(string sy, int timeframe, int shift) {
int digits=(int)SymbolInfoInteger(sy,SYMBOL_DIGITS);
return(NormalizeDouble(iOpen(sy,timeframe,shift),digits));
}
//+------------------------------------------------------------------+
Con la apertura, aquí sólo está el concepto en sí:
string symbol="AUDUSD";
double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);
double bid=SymbolInfoDouble(symbol,SYMBOL_BID);
double pt=SymbolInfoDouble(symbol,SYMBOL_POINT);
int spread=(int)SymbolInfoInteger(symbol,SYMBOL_SPREAD);
int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
int value=(int)SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL);
int level=(value==0)?spread*2:value;
//---double sl_b=(StopLoss==0)?0:NormalizeDouble(fmin(ask-StopLoss*pt,ask-(level+1)*pt),digits);
double tp_b=(TakeProfit==0)?0:NormalizeDouble(fmax(ask+TakeProfit*pt,ask+(level+1)*pt),digits);
ticket_b=OrderSend(symbol,OP_BUY,Lots,ask,3,sl_b,tp_b,"",0,0,clrGreen);
//---double sl_s=(StopLoss==0)?0:NormalizeDouble(fmax(bid+StopLoss*pt,bid+(level+1)*pt),digits);
double tp_s=(TakeProfit==0)?0:NormalizeDouble(fmin(bid-TakeProfit*pt,bid-(level+1)*pt),digits);
ticket_s=OrderSend(symbol,OP_SELL,Lots,bid,3,sl_s,tp_s,"",0,0,clrRed);
Hoy el Navegador del terminal se ha expandido de repente a todo el ancho de la pantalla, ¡ocultando las cartas! Siempre ha tenido la misma anchura que el Market Watch. ¡Busco y no encuentro cómo devolverle su tamaño anterior! ¡Ayuda a quien sabe cómo lidiar con esta nueva molestia! ¡¡¡Gracias!!!
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Hola. Estoy tratando de calcular el StopLoss desde el mínimo y el máximo de la primera barra, después de colocar la orden pendiente, para comprar y vender respectivamente. Pero no obtuve ningún resultado, sólo 130 de error, eso es todo. Gracias de antemano.
Compruebe si OrderOpenPrice() está demasiado cerca del SL y si los stops están "a la derecha del precio". Puede leerlo aquí:
Los precios StopLoss y TakeProfit no pueden estar demasiado cerca del mercado. La distancia mínima del stop en pips puede obtenerse utilizando la función MarketInfo() con el parámetro MODE_STOPLEVEL. El error 130 (ERR_INVALID_STOPS) se generará en caso de paradas erróneas o no normalizadas.
En este caso, es decir, para una orden pendiente, el "mercado" es su "precio abierto pendiente".
¿Puedes decirme cómo obtener la dirección IP actual del ordenador desde MT?
Enel probador de estrategias el comandoMarketInfo(Symbol(),MODE_TICKVALUE) = 0(!) Esto ocurre en situaciones en las que, por ejemplo, el instrumento es EURUSD y la moneda de balance es RUR .... y en otras combinaciones. Tengo entendido que la moneda de equilibrio debe ser la misma que el nombre de la segunda moneda del par de divisas. En caso contrario, devuelve el valor cero (en el probador de estrategias), lo que hace imposible realizar pruebas con las combinaciones deseadas. ¿Cómo resolver este problema?
Enel probador de estrategias el comandoMarketInfo(Symbol(),MODE_TICKVALUE) = 0(!) Esto ocurre en situaciones en las que, por ejemplo, el instrumento es EURUSD y la moneda de balance es RUR .... y en otras combinaciones. Tengo entendido que la moneda de equilibrio debe ser la misma que el nombre de la segunda moneda del par de divisas. En caso contrario, devuelve el valor cero (en el probador de estrategias), lo que imposibilita la realización de pruebas con las combinaciones deseadas. ¿Cómo resolver este problema?
El resaltado no es correcto. Estoy calculando en EUR conEURUSD, GBPUSD, etc. Sólo cuando se habilita, puede dar 0 hasta que se reciba el primer dato, por eso pongo una condiciónantes de los cálculos conTICKVALUE que si != 0;
En el probador,MarketInfo() puede no funcionar, así que sabiendo el precio aproximado de un tick, lo establezco con la condición IsTesting() || IsOptimization() | IsVisualMode().
Por favor, ayúdenme a crear una primicia que negocie dos pares al mismo tiempo.
Si en el primer par la variable será así
double a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);
¿cómo será para el segundo?
O el código para abrir una operación por el primer carácter será
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,",0,0,Green);
cómo será el código del segundo símbolo
Por favor, ayúdame a crear un búho que negocie dos pares al mismo tiempo.
Si en el primer par la variable será así
double a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);
¿cómo será para el segundo?
O el código para abrir una operación por el primer carácter será
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,",0,0,Green);
cómo será el código del segundo símbolo
Por favor, ayúdenme a crear búhos que operen en dos pares al mismo tiempo.
Si en el primer par la variable será así
double a = NormalizeDouble(iOpen(NULL,PERIOD_CURRENT, 0), Digits);
¿cómo será para el segundo?
O el código para abrir una operación por el primer carácter será
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,",0,0,Green);
cómo será el código del segundo símbolo
Con la apertura, aquí sólo está el concepto en sí:
sin comprobar los códigos de retorno del servidor comercial.