Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 189

 
En qué se diferencia Metatrader 5 de los anteriores 4 es más difícil de trabajar o no. Todos los corredores ofrecen estos programas, ¿por qué no hay un programa para todos los corredores para no tener que instalar muchos de ellos?
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik:
En qué se diferencia Metatrader 5 de los anteriores 4 es más difícil de trabajar o no. Todos los corredores ofrecen estos programas, ¿por qué no hay un programa para todos los corredores para no tener que instalar un montón de ellos.
Descargue ambos terminales, trabaje con ellos en cuentas demo y compruébelo usted mismo.
 

Estoy tratando de hacer una función que devuelva el resultado de la última posición cerrada (más o menos). Esta función está diseñada para un Asesor Experto multidivisa y debe seleccionar la última posición cerrada de todos los pares de divisas, y estoy teniendo algunos problemas con ella. ¿Puede corregir la función?

double last_profit()
{  
int dir = 0;
double prof = 0;
ulong d_ticket;

if (HistorySelect(0,TimeCurrent())) 
    {
       int j=HistoryDealsTotal()-1;
       if(j>0)
      {
         d_ticket = HistoryDealGetTicket(j);
         if (d_ticket>0)
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if(prof < 0)dir = -1;
if(prof > 0)dir = 1;
if(prof == 0)dir =0;

return(dir);
} 

 
Automated-Trading:

OBJ_ALL_PERIODS=2097151

Gracias, pero no funcionó. El problema es que los cálculos de los periodos D1 y ...... deberían aparecer en todos los marcos temporales, pero no sale tal cual. ¿Qué hacer?
Archivos adjuntos:
macd2.mq5  4 kb
 
Reshetov:

¿Qué quiere decir: métodos no utilizados en sus clases? Esta no es la práctica en OOP. Un programador normal de POO, a diferencia de la programación algorítmica, crea clases con todos los campos y métodos necesarios, como se dice, para todas las ocasiones, ya que la misma clase puede ser utilizada posteriormente en otras aplicaciones o pasar a formar parte de la biblioteca de clases. Por no mencionar el hecho de que incluso dentro de un proyecto es mejor crear clases completas, no despojadas, para no tener que buscar en el código fuente y añadir los campos y métodos necesarios más tarde.

En OOP cualquier economía, a la que mucha gente se acostumbra en la programación algorítmica, puede resultar perjudicial más adelante. Todo lo que no se utiliza debe ser excluido del código por el compilador y no por el programador.

Por supuesto, la programación orientada a objetos da lugar a un código fuente más grande en comparación con la programación algorítmica. Pero esto no es un inconveniente, sino una ventaja, porque gran parte del código "innecesario" de un determinado proyecto puede reutilizarse en otros.

No es necesario tratar de hacer un acertijo, es decir, todo en una sola clase. Es necesario crear bibliotecas de clases, es decir, dividir la funcionalidad en clases separadas y no olvidar añadir comentarios a este feudo, y entonces todo estará en orden. Al principio, cuando empecé a aprender Java después de Pascal, yo también intenté hacerlo todo de una sola vez, es decir, en lugar de utilizar la POO, creé una clase con todo lo que necesitaba para una determinada tarea, al igual que en la programación algorítmica. El resultado era un lío no universal que era imposible de aplicar en cualquier lugar después, por no mencionar que era difícil de entender dicho código.

Entiendo todo eso muy bien. Pero, ¿podemos al menos mostrar las variables privadas que no se utilizarán como se hace en VisualStudio?

La cuestión es que las clases se diseñan durante el proceso de desarrollo. Simplemente no se puede tener en cuenta todo lo anterior a la creación. Por eso se crean clases de marcos con la menor funcionalidad posible. Al interactuar con estas clases del marco, se empieza a elaborar la arquitectura general. Algunos métodos simplemente se eliminan, otros se trasladan a la sección privada y otros se migran de una clase a otra. En el proceso, inevitablemente aparecen variables, métodos e incluso clases enteras olvidadas. Esto es normal porque es algo parecido al principio de Okama en acción: primero escribimos código malo y redundante. Entonces formalizamos la tarea más claramente y algunas de las entidades simplemente desaparecen. La redundancia no sirve para nada. Y es en este proceso, la ayuda del compilador sería muy útil - para ver las variables no utilizadas y al menos los métodos privados sería muy útil.

 

Hola.

Entiendo que la funciónOnCalculate() que se utiliza en los indicadores se genera por sí misma, es decir, sin el evento de cambio de precio ,

¿Qué función se puede aplicar en el indicador que genera sólo cuando se produce un evento de cambio de precio? Gracias

 
Vikon:

Hola.

Entiendo que la funciónOnCalculate() que se utiliza en los indicadores se genera por sí misma, es decir, sin el evento de cambio de precio ,

¿Qué función se puede aplicar en el indicador que genera sólo cuando se produce un evento de cambio de precio? Gracias

El eventoCalcular se genera para los indicadores inmediatamente después del evento Init y en cualquier cambio de datos de precios. Es manejado por la funciónOnCalculate. Cuando se cambia el historial (cuando el historial está paginado) este evento también generaráOnCalculate.

La funciónOnCalculate es la más importante para el indicador, en la que se realizan todos los cálculos del indicador en caso de que cambien los datos del precio.

 
barabashkakvn:

El eventoCalculate se genera sólo para los indicadores inmediatamente después de que se envíe el evento Init y ante cualquier cambio en los datos del precio. Este evento es manejado por la funciónOnCalculate. El mismoOnCalculate se genera cuando se cambia el historial (cuando el historial está paginado).

La funciónOnCalculate es la más importante para el indicador, en la que se realizan todos los cálculos del indicador en caso de cambios en los datos del precio.

Aquí tiene algo de bucle, es decir, siempre genera y cuando el periodo cambia, las lecturas cambian. ¿Cuál es el error?

#property copyright "Copyright 2014, MetaQuotes Software Corp.
#enlace de propiedad "http://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad ventana_del_gráfica_del_indicador
//+------------------------------------------------------------------+
//| Función de inicialización de indicadores personalizada |

int EMA1=12;
int EMA2=26;
int SMA=9;

ENUM_TIMEFRAMES period_macd;
datetime t_MACD[];
doble MACD[];
bool high_low=false;
int cambio_nachalo;
double w_MACD[]; d_MACD[];
int w_MACD_handle,d_MACD_handle;

int barDown=0;
int barUP=0;

//+------------------------------------------------------------------+ return(0);
int OnInit()
{
w_MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE);
d_MACD_handle=iMACD(NULL,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE);
ArraySetAsSeries(MACD,true);
ArraySetAsSeries(t_MACD,true);
ArraySetAsSeries(w_MACD,true);
ArraySetAsSeries(d_MACD,true);
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+ MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//| Función de iteración de indicadores personalizada |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculado,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{

ObjectsDeleteAll(0,0,-1);
////////////////////////////////////////////////////////
period_macd=PERIOD_D1;
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD);
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY);
nachalo();
ObjectCreate(0, "lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0);
ObjectSetInteger(0, "lin_2",OBJPROP_BACK,true);
ObjectSetInteger(0, "lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
ObjectSetInteger(0, "lin_2",OBJPROP_COLOR,clrYellow);
ObjectSetInteger(0, "lin_2",OBJPROP_STYLE,1);
return(rates_total);
}
//+------------------------------------------------------------------+
//////////////////////////////////////////////////////////////////////////////
void nachalo() //comienzo de una nueva ola
{
doble nachalo_bajo[],nachalo_alto[];
CopyTime(NULL,period_macd,0,1000,t_MACD);
si (MACD[1]>0)
{high_low=false;
while (MACD[barDown]>0)
{barDown++;}
barUP=barDown;
while (MACD[barUP]<0)
{barUP++;}
CopyLow(NULL,period_macd,0,barUP,low_nachalo);
ArraySetAsSeries(low_nachalo,true);
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1));
}
si (MACD[1]<0)
{high_low=true;
while (MACD[barUP]<0)
{barUP++;}
barDown=barUP;
while (MACD[barDown]>0)
{barDown++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo);

ArraySetAsSeries(alto_nachalo,true);

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1));
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
Archivos adjuntos:
macd2.mq5  4 kb
 
Vikon:

Aquí es donde se produce el bucle, es decir, genera constantemente y cuando cambia el periodo, cambian las lecturas. ¿Cuál es el error?


Cómo insertar el código correctamente en el foro.

 
Vikon:


Fíjate en el error:

No hay topes indicadores atados

Utilizar:

//---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer()
Lea también el artículo"Cómo escribir un indicador en MQL5".