Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 938
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
Quiero crear un array unidimensional en el que de 0 a 4 elementos se almacene double, de 5 a 9 se almacene datetame, de 10 a 14 se almacene int. ¿Es posible organizarlo en mql4? Si es así, ¿podrías mostrarme cómo, he visto un ejemplo con estructuras en C++, pero he perdido el enlace al sitio?
Si tienes celdas de array específicas asignadas para cada tipo, haz una estructura en lugar de un array.
Si tienes celdas de array específicas asignadas para cada tipo, entonces haz una estructura en lugar de un array.
Por desgracia, ni siquiera puede formalizar la tarea
por un lado parece que quiere alejarse de la tipificación estricta en C++ / MQL , aquí hay un buen hilo de discusión, aunque dudo que le ayudehttps://www.mql5.com/ru/forum/294094
En el transcurso de esta discusión (creo que ya lleva 3 meses...) resulta que@Seric29 necesita alejarse de la descripción de las firmas de las funciones y obtener unafunción "fantasma" que puede tener un número arbitrario de parámetros pasados a ella
Luego, durante la discusión, resulta que en todo esto deben intervenir matrices dinámicas multidimensionales, y estas matrices deben pasarse a la función como parámetros
Es decir, se trata de una tarea no formalizada, cuya solución termina constantemente en "gritos desde el campo", los desarrolladores redujeron la funcionalidad de algo y me dan el código fuente de los operadores de bucle, yo los rehago, entonces este último:
Cómo escribir una carta a los desarrolladores de mql4 cómo ver el código del compilador, ¿hay alguna forma de añadirle más funciones para que no sea tan estático?
... eso es todo... la frase "alucinante" es lo menos que se puede decir ))))
Por eso no doy detalles.
No hay que dejar de aprender lo básico.
No hay que dejar de aprender lo básico.
Es interesante que un hombre no aprenda lo básico, sino que intente demostrar que ya lo sabe todo, y que todos vosotros se áis metacitas que le impiden hacer su trabajo)
es interesante que el hombre no aprenda lo básico, sino que intente demostrar que ya lo sabe todo, y que todos vosotros se áis metacitas que le impiden hacer su trabajo)
Saludos. He visto el video del Asesor Experto "De MQL4 a MQL5 - Cómo reescribir un EA para Metatrader 5".
Muchas gracias al autor. He decidido probarlo yo mismo. Decidí probarlo yo mismo. La idea es la siguiente:
1. He puesto dtriger = 1 en las entradas - Se abre la compra.
2. He puesto dtriger = -1 - Vender abre. 3.
3. He puesto dtriger = 0 en los multienchufes - todos los abiertos están cerrados.
He leído en el FAQ que en MT5 no es posible mantener posiciones opuestas,
y yo los tengo.
Pregunta: ¿Cómo puedo prescribir correctamente el cierre de una posición abierta?
La pregunta es: ¿Cómo prescribir correctamente el cierre de una posición activa en la apertura de una flecha (inversa)?
Muchas gracias.
#include <Trade\PositionInfo.mqh>.
#include <Trade\Trade.mqh>
#include <TradeSymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo o_position;
CTrade o_trade;
CSymbolInfo o_símbolo;
COrderInfo o_order;
input int triger = 0;
input double LoteInicial = 0,01;
input double lpos_volume = 1.0;
input int Paso = 10;
input int MagicNumber = 12345; // Número mágico
input int Deslizamiento = 30; // deslizamiento
int dtriger;
int dPaso;
//+------------------------------------------------------------------+
//| Función de inicialización de expertos|
//+------------------------------------------------------------------+
int OnInit()
{
dPaso = Paso ;
dtriger = triger ;
if (!o_symbol.Name(Symbol()))
return(INIT_FAILED);
RefreshRates();
o_trade.SetExpertMagicNumber(MagicNumber) ;
if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK))
{
o_trade.SetTypeFilling(ORDER_FILLING_FOK);
}
else if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC))
{
o_trade.SetTypeFilling(ORDER_FILLING_IOC);
}
si no
{
o_trade.SetTypeFilling(ORDER_FILLING_RETURN);
}
o_trade.SetDeviationInPoints(Slippage);
if (o_symbol.Digits() == 3 || o_symbol.Digits() == 5 )
{
dPaso = 10 ;
}
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización de expertos|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| función de tic experto|
//+------------------------------------------------------------------+
void OnTick()
{
datetimelpos_time = 0;
double lpos_price_open = 0.0;
ENUM_POSITION_TYPE lpos_type = -1;
intpos_count = 0;
double suma_ganancia = 0;
for (int i = PositionsTotal() - 1; i>=0; i--)
{
if (o_position.SelectByIndex(i))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
if (o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //OrderOpenTime();
lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice();
lpos_type = o_position.PositionType() ; //OrderTipe();
}
pos_count++;
suma_ganancia = suma_ganancia + o_posición.Comisión() + o_posición.Intercambio() + o_posición.Ganancia() ;
}
}
}
// Contar el número de órdenes pendientes
int cuenta_de_parada=0;
for (int i=OrdersTotal()-1; i >=0; i--)
{
if (o_order.SelectByIndex(i))
{
if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
si (!RefreshRates())
volver ;
if(dtriger == 0 )
{
CloseAll();
volver;
}
// + ----- Abrir la primera orden ++++++++++
if (pos_count == 0 && stop_count == 0 )
{
if ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL)
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111
}
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111
}
}
// + ----- Reverse ++++++++++++++++++++++++++++
si (pos_count>0)
{
if(lpos_type == POSITION_TYPE_BUY )
{
si ( dtriger == -1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++
}
}
if (lpos_type==POSITION_TYPE_SELL )
{
si ( dtriger == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++
}
}
}
if(pos_count>0 && stop_count>0)
BorrarPedidosParados() ;
}
//-----------------------------------------------------------
bool RefreshRates()
{
if (!o_symbol.RefreshRates())
return(false) ;
if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0)
return(false);
return(true);
}
//--- ---------------------------------------------------------
bool IsFillingTypeAllowed (string symbol, int fill_type)
{
int relleno = (int)SymbolInfoInteger(símbolo, SYMBOL_FILLING_MODE);
return((filling && fill_type) == fill_type) ;
}
// --------------------------------------------------
void CloseAll()
{
for (int index = PositionsTotal()-1; index >=0; index--)
{
if (o_position.SelectByIndex(index))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
o_trade.PositionClose(o_position.Ticket())
}
}
}
}
//-----------------------------------------------------------
// Borrar todas las órdenes pendientes
//-------------------------------------
void BorrarPedidosParados()
{
for (int i = OrdersTotal() - 1; i >= 0; i-- )
{
if (o_order.SelectByIndex(i))
if(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket())
}
}
//+------------------------------------------------------------------+
Saludos....
Por favor, introduzca el código correctamente:
Por favor, introduzca el código correctamente:
empieza a leer al menos un libro sobre C++, tus preguntas son una pasada, escribes términos técnicos, a primera vista parece que estás haciendo una pregunta concreta, pero en realidad sólo operas en términos sin entender la esencia .... ¿qué devolverá la macro? ¿dónde devolverá? en el cuerpo de la macro una función recargable.... No puedo ni empezar a explicar cómo es tu pregunta.
Para entender lo que es una macro, deletrea el término correctamente, macroSETTING , quizás te sea más fácil entender lo que es
En mql4 se reducen las capacidades y C++, es decir, es un lenguaje demasiado estático. Puedo decir que mi idea fracasó, escribí una simple sobrecarga sin clases, añadí argumentos y les di 0, intenté llamarla en una macro, me dio un error diciendo que hay 3 funciones, así que resulta que tengo que describir todavía a cuál llamar y cómo, y no digo nada sobre qué tipo de tropiezos tendré que enfrentar después. Probablemente sea mejor no hacer nada, así no te equivocarás.
mql4 tiene características recortadas y C++, es decir, un lenguaje demasiado estático.
¿Qué se ha recortado exactamente?
En otras palabras, no es necesario, especialmente ni siquiera google sabe" lenguajedemasiado estático", C++ es un lenguaje estáticamente tipado y pensar en ello no tiene sentido - simplemente lo es.
Probablemente sea mejor no hacer nada, así no te equivocarás.
Seré breve RTFM ( lurkmore )
La cuestión es puramente estética.
¿Cómo hago para que haya una imagen propia aquí? MT4