Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1415
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
Gracias por el código. Lo único que faltaba era la adaptación a un tamaño de lote intermedio válido:
Tengo otra pregunta: Si calculo la pérdida de una operación stopped out con TICK_VALUE o con deltaValue como arriba, el resultado es siempre ligeramente diferente del cálculo interno de MQL5:
¿Esto se debe a que la pérdida/ganancia por tick es diferente para una cuenta EUR y para precio de mercado 1.0 y precio de mercado 1.2? Porque si introduzco, por ejemplo, "price + 0.1" en lugar de price y "sl + 0.1" en lugar de sl en el código de abajo, entonces la distancia por tick (diff) es la misma, pero los respectivos resultados emitidos por OrderCalcProfit son diferentes. Y cuando miro los beneficios/pérdidas que obtengo de las operaciones manuales, esto último parece confirmarse.
Si estoy en lo cierto, entonces el siguiente código sería más preciso:
P.D. Gracias de nuevo por la idea básica: vincular el factor de riesgo no al saldo sino al margen libre tiene claramente sentido.El siguiente código fue creado según el propio sar parabólico experto de mql 5. ¿Puedo invertir aquí el funcionamiento de la señal de compra y de la señal de venta? Es decir, cuando llegue la señal de compra, quiero que abra venta en lugar de compra. ¿alguien me puede ayudar?
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Incluir |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- señales disponibles
#include <ExpertoSeñalSAR.mqh>
//--- señales disponibles
#include <Expert\Trailing\TrailingNone.mqh>
//--- gestión de dinero disponible
#include <Expert\Money\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Entradas |
//+------------------------------------------------------------------+
//--- entradas para el experto
input string Expert_Title ="sar"; // Nombre del documento
ulong Expert_MagicNumber =13831; //
bool Expert_EveryTick =false; //
//--- entradas para la señal principal
input int Signal_ThresholdOpen =10; // Valor umbral de la señal a abrir [0...100]
input int Signal_ThresholdClose=10; // Valor umbral de la señal para cerrar [0...100]
input double Signal_PriceLevel =0.0; // Nivel de precio para ejecutar una operación
input int Signal_Expiration =4; // Vencimiento de las órdenes pendientes (en compases)
input double Signal_SAR_Step =0.02; // Incremento de velocidad del SAR Parabólico(0.02,0.2)
input double Signal_SAR_Maximum =0.2; // Parabolic SAR(0.02,0.2) Velocidad máxima
input double Señal_SAR_Peso =1.0; // Parabólica SAR(0.02,0.2) Peso [0....1.0]
//--- entradas para dinero
input double Money_FixLot_Percent =10.0; // Porcentaje
input double Money_FixLot_Lots =0.1; // Volumen fijo
//+------------------------------------------------------------------+
//| Objeto experto global
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Función de inicialización del experto
//+------------------------------------------------------------------+
int OnInit()
{
//--- Inicialización del experto
if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//----- falló
printf(__FUNCTION__+": error inicializando experto");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creando señal
CExpertSignal *signal=nueva CExpertSignal;
if(señal==NULL)
{
//----- falló
printf(__FUNCTION__+": error creando señal");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//---
ExtExpert.InitSignal(señal);
signal.ThresholdOpen(Señal_UmbralAbrir);
signal.ThresholdClose(Señal_UmbralCierre);
signal.PriceLevel(Señal_NivelPrecio);
signal.Expiration(Señal_Expiración);
//--- Creación del filtro CSignalSAR
CSignalSAR *filtro0=nuevo CSignalSAR;
if(filtro0==NULL)
{
//----- fallido
printf(__FUNCTION__+": error creando filtro0");
ExtExpert.Deinit();
return(INIT_FAILED);
}
signal.AddFilter(filter0);
//--- Establece los parámetros del filtro
filter0.Paso(Señal_SAR_Paso);
filter0.Máximo(Señal_SAR_Máximo);
filter0.Peso(Señal_SAR_Peso);
//--- Creación del objeto trailing
CTrailingNone *trailing=nuevo CTrailingNone;
if(trailing==NULL)
{
//----- fallido
printf(__FUNCTION__+": error creando trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Añadir trailing al experto (se borrará automáticamente))
if(!ExtExpert.InitTrailing(trailing))
{
//----- falló
printf(__FUNCTION__+": error inicializando trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Establecer parámetros de trailing
//--- Creación del objeto dinero
CMoneyFixedLot *money=nuevo CMoneyFixedLot;
if(dinero==NULL)
{
//----- falló
printf(__FUNCTION__+": error creando dinero");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Añade dinero al experto (se borrará automáticamente))
if(!ExtExpert.InitMoney(dinero))
{
//----- falló
printf(__FUNCTION__+": error inicializando dinero");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Establecer parámetros de dinero
money.Porcentaje(Money_FixLot_Percent);
money.Lots(Money_FixLot_Lots);
//--- Comprobar todos los parámetros de los objetos de negociación
if(!ExtExpert.ValidationSettings())
{
//----- falló
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Ajuste de todos los indicadores necesarios
if(!ExtExpert.InitIndicators())
{
//----- falló
printf(__FUNCTION__+": error inicializando indicadores");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- ok
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización del experto |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+
//| Función manejadora del evento "Tick
//+------------------------------------------------------------------+
void OnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+
//| Función manejadora del evento "Trade
//+------------------------------------------------------------------+
void OnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+
//| Función manejadora del evento "Timer" |
//+------------------------------------------------------------------+
void OnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
Ahora he tenido tiempo de estudiar tu solución. Es más precisa (mientras que la otra es más cautelosa ya que se tiene en cuenta la comisión...) y es aparentemente menos propensa a errores, como se puede ver con el oro y la plata en la cuenta demo en MQ - con Roboforex es, como era de esperar, algo más cautelosa que su solución:
En la cuenta de MQ, el tamaño de los lotes sería demasiado alto.
Aquí está mi script para comparar los dos métodos:
Derivé la dirección de in > sl (comprar) o in < sl (vender). Entonces no habría problemas con las órdenes pendientes
Gracias por sus pruebas. Sí, si se comparan los resultados entre sí, se puede ver por un lado la consistencia de OrderCalcProfit y por otro lado, al menos para EURUSD y RoboForex, que los resultados difieren en aproximadamente "Lot size * CommissionPerLot". Esto se podría añadir:
Si he utilizado correctamente la búsqueda del foro, no hay manera de consultar el valor "CommissionPerLot" directamente utilizando MQL5, ¿verdad?
Si he utilizado correctamente la búsqueda del foro, entonces no hay manera de consultar el valor "CommissionPerLot" directamente utilizando MQL5, ¿verdad?Sí, no directamente en el terminal, sino solicitándolo al broker o en el historial de operaciones: DEAL_COMMISSION.
Estimados miembros~.
Estoy tratando de contar velas. por favor ayuda~~
int Barcount;
if(Barcount != Bars)
Print("pt=",pt) ;
int OT,SHi;
if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
{ }
OT = OrderOpenTime();
}
SHi = iBarShift(Symbol(),0,OT);
Imprimir("SHi=",SHi);
Hola.
Pregunta de aficionado sobre CFDs.
¿Puede alguien explicar la naturaleza de los swaps para CFD sobre materias primas/acciones? ¿De dónde viene el swap que se acumula durante la noche? ¿Cuál es la explicación?