Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1165

 
Igor Makanu:

Dudo que pueda explicar, si eso es lo que estás preguntando

el objeto es ... digamos que una variable de tipo de clase

en su sección de código es la clase CPrograma

en algún lugar de su código debe decir

y tendrá que ser llamado

¡¡Tú eres DIOS!! Te entendí y todo salió bien)
 

¿Puede decirme qué significa?

el valor de retorno de'OrderSend' debe ser comprobado TestLibrary.mq4 64 6

 
MakarFX:

¿Puede decirme qué significa?

el valor de retorno de 'OrderSend' debe ser comprobado TestLibrary.mq4 64 6

Hay que comprobarel resultado de OrderSend. :-)

 
Maxim Kuznetsov:

El resultado de OrderSend debe ser verificado. :-)

Sé inglés)))

¿cómo comprobarlo?

 
MakarFX:

Sé inglés)))

¿Cómo se comprueba?

result=SomeOperation(....)

if (result!=ok) {

Print("Error");

}

 
Maxim Kuznetsov:

result=SomeOperation(....)

if (result!=ok) {

Print("Error");

}

Gracias
 
//+------------------------------------------------------------------+
//| TEST_V01.mq4 ||
//| Copyright 2019, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#enlace de propiedad "https://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad estricta
#define MAGICMA 20131111
//--- Entradas
input int Riesgo = 1;
input int Max_Risk = 8;
input int SL = 100;
//+------------------------------------------------------------------+
//| Función de inicialización de expertos |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización experta |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Función de garrapata experta ||
//+------------------------------------------------------------------+
void OnTick()
{
if(PedidosTotal()==0)
if(OrderSend(Symbol(), OP_BUY, Lot_Calculate(Symbol(), Risk, Max_Risk, SL), Ask, 30, NormalizeDouble(Ask - SL*Point, Digits), NormalizeDouble(Ask + SL*Point, Digits),",MAGICMA,0,Blue)==-1)
Print("Error: ",GetLastError());
}
//+------------------------------------------------------------------+
//-----------------------------------------------------------------
// Lot_Calculate |
//-----------------------------------------------------------------
double Calcular_lote(cadena _símbolo, int _riesgo, int _m_riesgo, int _pips)
{
_m_risk = Max_Risk;
_pips +=20;
double minlot = MarketInfo(_symbol,MODE_MINLOT);
double maxlot = MarketInfo(_symbol,MODE_MAXLOT);
double steplot = MarketInfo(_symbol,MODE_LOTSTEP);
double dinero_riesgo = NormalizeDouble(AccountEquity()*_risk/100,2);
double calk_pip_cost = NormalizeDouble(money_risk/_pips,2); // coste por punto
double lot_pip_cost = MarketInfo(_symbol,MODE_TICKVALUE); // el coste de un pip en un cambio de precio por volumen de un lote estándar
// while(!MathIsValidNumber(lot_pip_cost || lot_pip_cost ==0)
//{
// lot_pip_cost = MarketInfo(_symbol,MODE_TICKVALUE);
//}
doble lote = coste de calk_pip/coste de lot_pip;
//-------------------------------------------------------------
double money_m_risk = NormalizeDouble(AccountEquity()*2*_risk/100,2); // También duplico el riesgo
double _m_calk_pip_cost = NormalizeDouble(money_m_risk/_pips,2); // cálculo del valor de un punto después de la duplicación
double lote_m = _m_calk_pip_cost/lot_pip_cost; // cálculo del lote después de la duplicación
if(lote <= minlot) lote = minlot;
else if(lot >= maxlot) lot = maxlot;
else if(lot > minlot && lot < maxlot)
{
int k = int((lote - minlote)/lote de paso);
lote = NormalizeDouble(minlot+k*steplot,2);
}
devolución(lote);
// ------------------------------------------------------
{
if(lot_m <= minlot) lot_m = minlot; // a partir de esta línea, mi yo
else if(lot_m >= maxlot) lot_m = maxlot;
else if(lot_m > minlot && lot_m < maxlot)
{
int k = int((lote - minlote)/lote de paso);
lot_m = NormalizeDouble(minlot+k*steplot,2);
}
return(lote_m);
if(OrderProfit()>0) lote--;
if(OrderProfit()<0) lot_m++;
}
if(_m_risk == Max_Risk) lot_m = lot; // aquí no se entiende nada
return(0);

}


Llevo dos días luchando con esto. No puedo escribir la función que recalcula el riesgo.

Si una operación se cierra por TP, el riesgo seguirá siendo el mismo.

Si el riesgo se cierra por SL, el riesgo se incrementa en 2 veces y así sucesivamente, hasta el valor prescrito en las variables de entrada del Asesor Experto, digamos Max_Risk = 8;

y luego se restablece el riesgo inicial Riesgo = 1;

Pues bien, si después de doblar la operación se cierra en TR, volvemos de nuevo al Riesgo inicial = 1;

¿Puede ayudar?

Gracias de antemano.

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. и снова dll и маркет День добрый! Правило №1 dll на...
 
No es eso en absoluto.
 

¡Buenas tardes!

Los profesionales, por favor, ayuden. No puedo resolver un problema. Aquí está el código:


datetime some_time=TimeCurrent();

int inicio()

{

doble suma;

doble razn;

int k=iBarShift(",PERIOD_M5,some_time);

double VAL0=MathAbs(iATR(NULL,0,1,1))/Punto;

double VAL1=MathAbs(iATR(NULL,0,1,0))/Punto;

si (VAL1>VAL0)

{

razn =MathAbs((iATR(NULL,0,1,0))-(iATR(NULL,0,1,1))/Punto;

for(int i = k; i >= 1; i--)

{

summ=summ+razn;

}

Comentario("Períodos utilizados: ",k,"\Nde la misma manera que los períodos anteriores,

"ATR anterior: "+VAL0+"\N-\N-\N-,

"Corriente ATR: ",VAL1,"\n",

"Diferencia ATR: ",razn,"\n",

"Diferencia ATR:",summ,"\n");

}

return(0);

}

La idea es la siguiente: el Asesor Experto cuenta la diferencia entre el valor actual del ATR y el anterior. Pero sólo con el aumento de ATR.

Esta diferencia se muestra en la variable "razn". Necesito que el valor de la variable "razn" se sume/acumule a la variable "summ" con cada llegada de una nueva barra.

En la versión actual la acumulación de "summ" no funciona correctamente.

Sospecho que se trata de bucles.


Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql5-программа.
 
Buenas tardes a los miembros del foro. No puedo encontrar ninguna información. ¿Existe alguna herramienta que dibuje automáticamente líneas (no horizontales) de mínimos y máximos hasta un determinado nivel de pips? En otras palabras, ¿se define el mínimo o el máximo y se traza la línea hasta la vela que fija la distancia en pips desde el máximo o el mínimo? Encontré que el indicador Fractal hace la determinación de baja y alta. Pero no he podido encontrar un complemento de este tipo que me permita trazar una línea hasta el punto de cambio de precio por un número determinado de puntos.
Razón de la queja: