Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 63
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Gumko:
Lleva 2 días parado.
Hola a todos.
Modificación y problemas.
Función externa:
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){
//---- estructura vinculante y resultados comerciales
Solicitud MqlTradeRequest;
MqlTradeResult resultado;
//---- estructura de inicialización de la búsqueda de comercio MqlTradeRequest para la modificación de la posición
request.action = TRADE_ACTION_SLTP;
request.symbol = symbol;
request.sl = StopLoss;
request.tp = Takeprofit;
cadena palabra = "";
StringConcatenate(word,
"<< ============ Modifyposition(): Modifica la posición ",
símbolo," ============ >>>");
Print(word);
//---- modificar la posición y comprobar los resultados de la búsqueda de operaciones
if(!OrderSend(request,result)|| result.deal==0)
{
Print("Modificar error =", GetLastError();
return(false);
}
return(true);
}
Pero no funciona así.
¿Cómo hacerlo?
Gracias :)
Inténtalo de esta manera:
Inténtalo de esta manera:
Yedelkin,
Gracias, no funcionó.
He comprobado si cuenta correctamente para el inicio de la llamada a la función.
Así es como lo hice:
double Oferta = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
if(Open > 0){
start_buy = Ask - Open; Print("start_buy=",start_buy);
start_sel = Open - Bid;Print("start_sel=",start_sel);
}
Sorpresa en el registro:
MR 0 Core 1 10:21:49 2012.10.01 10:12:42 deal #2 sell 0.10 EURUSD at 1.28146 done (based on order #2)
GH 0 Core 1 10:21:49 2012.10.01 01 01:12:42 operación realizada [#2 vender 0,10 EURUSD a 1,28146]
NI 0 Core 1 10:21:49 2012.10.01 01 01:12:42 orden realizada vender 0.10 a 1.28146 [#2 vender 0.10 EURUSD a 1.28146 (0.00000)
OF 0 Core 1 10:21:49 2012.10.01 01 01:12:43 start_buy=0.00012999999999635
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
LE 0 Core 1 10:21:49 2012.10.01 01:12:43 start_buy=0.000109999998325
ES 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=7.00000000000145e-005
Por supuesto, me preguntaba sólo sela, ¿de dónde salieron los números?
Creo que he escrito la función correctamente como se muestra:
Modificación de SL y TP
Orden de operación para modificar los niveles de StopLoss y/o TakeProfit. Requiere 4 campos:
¿Qué es lo que ha "fallado" exactamente?
Inserte el código correctamente (Ctrl+Alt+M):
En este caso, la normalización debe utilizarse en una secuencia diferente.
1. como los valores de tipo SymbolInfoDouble(Currency,SYMBOL_BID) provienen del servidor, ya se consideran normalizados. Y no es necesario normalizarlos por segunda vez. Es decir, pueden escribirse simplemente:
2. Pero después de cualquier operación aritmética la normalización desaparece, así que si necesitas obtener un número normalizado, debes escribirlo así:
Todavía estoy pensando en el resto.
DR 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=5.000000000010552e-005
ES 0 Core 1 10:21:49 2012.10.01 01:12:43 start_sel=7.0000000145e-005
Por supuesto, sólo se interesa por el sel - ¿de dónde salen esas cifras?
7,00000000000145e-005 es sólo una de las formas de escribir el valor de un número real. Creo que se llama "científico". Para más detalles, véase."Guía de referencia MQL5 / Conceptos básicos del lenguaje / Tipos de datos / Tipos reales (double, float)".
Yedelkin,
Gracias por abordar el problema.
Aquí está el código. Las funciones para abrir la posición fueron escritas por Nikolay Kositsin.
Por ejemplo, he añadido una MA a MFI y quiero registrar esta MA en mi EA. No sé dónde y cómo hacerlo.
Gracias por su respuesta)
1. Yo diría lo siguiente: utiliza el código de otra persona con mucho cuidado. Porque el código de otro significa también los errores de otro.
2. Aquí(https://www.mql5.com/ru/forum/6343/page64#comment_357008) te sugerí que intentaras poner a cero correctamente las variables antes de utilizarlas. Pero su código aún no ha implementado esta sugerencia. Además, su código contiene construcciones del tipo
Como ves, en esta construcción las variables request y result se ponen a cero no antes de ser utilizadas sino después de serlo. Además, cuando estas variables locales se ponen a cero, la función deja de funcionar, es decir, dicha puesta a cero no tiene sentido. En otras palabras, esta construcción es un buen ejemplo de cómo las variables MqlTradeRequest y MqlTradeResult no deben ponerse a cero. Por lo tanto, si usted está ansioso, por favor, trate de limpiar las variables correctamente. Si algo va mal, por favor, describa con detalle qué es lo que "no funciona".
3. La Biblioteca Estándar tiene una clase de comercio"MQL5 Reference / Standard Library / Trade Classes / CTrade". Intenta averiguar cómo aplicarlo en la práctica. En la fase inicial de inmersión en el idioma, esta clase puede ser suficiente. Por ejemplo, esta clase tiene el siguiente método:"MQL5 Reference / Standard Library / Trade Classes / 2CTrade/ PositionModify". Se implementa de la siguiente manera:
La línea 'ClearStructures();' en ella borra la variable m_request antes de usarla.