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

 
Kot:

¡Buenas tardes!


Tengo un EA que hace ciertos cálculos. Utiliza diferentes operaciones matemáticas, matrices, bucles. Guarda el resultado en un archivo. Tiene que empezar todo desde el principio después de haber realizado todas las acciones. Ha hecho todos los cálculos una vez y luego se cuelga por segunda vez sin ninguna otra acción. ¿Puede indicar si es necesario poner a cero las variables, borrar las matrices o alguna otra cosa antes de iniciar un nuevo cálculo?

¿Has probado a cerrar el archivo?

 
Buenas tardes! Necesito ayuda para un humanitario (yo) que está tratando de hacer un indicador con el más mínimo conocimiento de cómo hacerlo))) pero tienen una comprensión de lo que debe aparecer)) Así que:
Cómo programar una muleta/indicador/script (como un indicador con pestañas "sobre, general, parámetros de entrada, colores, pantalla") para MT4 para que tome los datos de un archivo .csv, por ejemplo el formatodel archivo fuente:
EUR;TF;1.192;1.1733
EUR;TN;1.2037;1.1663
EUR;AB1;1.1906499615;1.1797479615
CHF;TF;1.0362;1.0183
CHF;TN;1.0479;1.0121
CHF;AB1;1.03484132734247;1.02549513556164


Es decir,
el indicador tomó los datos registrados de un archivo y los pusocomo un segmento de línea (TF, TA) o una banda de color(EA) con los parámetros de la extensión igual a "un día". (desde el borde hasta el borde de los separadores verticales de días en МТ4), para las líneas la selección del color de la línea, el tipo de línea, la selección del color del texto y el tamaño del comentario y la sustitución de la línea de comentario como "TF - 1,192" la segunda línea "TF - 1,1733" que se toman de las líneas correspondientes del archivo. El rango es puramente horizontal y a partir de la línea EUR;TF;1.192;1,1733 toma el primer dígito para una ranura y el segundo dígito para la segunda como el inicio de la ranura 1.192 y el final de la ranura 1.192.
También hay rangos, por ejemplo EA, el principio es el mismo desde el principio hasta el final del día, pero el precio es diferente y la línea comienza y termina con CHF;AB1;1.03484132734247;1.02549513556164 principio es
1.03484132734247 final del rango1.02549513556164. Se ejecuta cuando se enciende MT4 (como un indicador normal en el gafik), todos los días en el gráfico y añade todos los datos exactamente para el día actual una vez, todas las líneas aplicadas anteriormente no se elimina de la tabla y no se duplica. Con todo esto selecciona y muestra todos los segmentos y rangos del día, sólo donde está la ventana activa ahora y en otras ventanas activas (es decir, donde está funcionando) (es decir, abrió un par y el indicador dibujó todos los segmentos y rangos del día actual y se calmó y así para los pares).

Por ejemplo, cómo debe ser la pestaña del indicadorParámetros de entrada:

Переменная________Значение
Funtik________//--Общие настройки--//
Dibujar TF________true
Dibujar TN _______true
Dibujar AB1______true
Dibujar AB2______false
Color del título del texto _______Negro
Шрифт подписей__________________Arial
Tamaño de letra para los pies de texto ________9
Línea TF color ______________
Tipo de línea TF _______________
TN Línea de color ______________
Tipo de línea TN _______________
Color de la banda AB1__________
Color de la banda AB2__________
Frecuencia del archivo en segundos ______2
Nombre del archivo ___________5.csv

¡¡¡¡¡¡¡¡trató de garabatear a mí mismo, pero no conseguir una maldita cosa, aunque parecía fácil (pero yo soy un humanitario, ¿qué se puede hacer....) Ayuda por favor ahogar !!!!!!!!


//+------------------------------------------------------------------+
//|                                                        Funtik.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
 
#property indicator_chart_window
//---- input parameters
extern string    Funtik="5.csv";
//+------------------------------------------------------------------+
//| extern variables                                       |
//+------------------------------------------------------------------+
extern  bool    РисоватьTB = false      ;
extern  bool    РисоватьTN = false      ;
extern  bool    РисоватьTF = false      ;
extern  bool    РисоватьAB1 = false     ;
extern  bool    РисоватьAB2 = false     ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
      int handle,sst=1;
     double  NameCena;
     string NameF ,NameTi,NameFT;
      bool h1;
      
   while(sst>0)
                 {
   handle=FileOpen(Funtik,FILE_CSV|FILE_READ,';');
 //  Comment ("Файл ",Funtik,"открыт");
   if(handle>=0)
    {
     NameF=FileReadString(handle);           // Читается наименование бумаги
     NameTi=FileReadString(handle);          // Читается первая котировка и подставляется в начало первого отрезка линии или диапазона
     NameCena=FileReadNumber(handle);        // Читается цена последней котировки для первого отрезка линии или диапазона
     NameFT=FileReadString(handle);          // Читается последняя котировка для диапазона
     
     Alert(NameF," ",NameTi," ",NameCena," ",NameFT);
       if(FileIsEnding(h1))
       {
     FileClose(h1);
     return(false);
     sst=0;
       }
    }
               }
     FileClose(handle);   
 
  //fComment(Funtik);
//----
   return(0);
  }
//+------------------------------------------------------------------+

 

¡Hola!

¡¡¡Por favor, ayúdenme a encontrar un error en el siguiente programa!!!

//+------------------------------------------------------------------+
//|prueba.mq4 |
//| Copyright 2018, MetaQuotes Software Corp.
//|https://www.mql5.com |||
//+------------------------------------------------------------------+
#property copyright "365_MA"
#enlace de propiedad "https://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad estricta

extern Periodo_MA = 365; //Periodo MA 1
extern double Delta = 0.0010; //La distancia a la que se puede abrir la orden

string Symb; //Nombre del instrumento comercial
//int Total; //número de pedidos

//+------------------------------------------------------------------+
//| función de inicialización de expertos|
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| función de desinicialización experta|
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("Obj_Label");
ObjectDelete("Obj_Label2");
//----
return(0);
}
//+------------------------------------------------------------------+
//| función de inicio experto|
//+------------------------------------------------------------------+
int inicio()
{



doble prise = Oferta;//precio actual
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //el valor de la media móvil
double Precio2MA = precio - ValorCurrMA;//distancia entre MA y precio
datetime NextClose = Time(0) + Period()*60*2;//hora de cerrar
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1; //tiempo de cierre en minutos

//int err;



//actualizar la información del texto en el gráfico

ObjectSetText ("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 4) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Delta " + DoubleToStr(Delta,4) + ", MA value " + DoubleToStr(CurrMAValue, 4) + ", distance to MA " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//considerar el precio y generar alertas

if ((MathAbs(Price2MA) < Delta) && // si la distancia a МА es menor que delta
(Precio > CurrMAValue) && // y el precio es superior a la MA
(Open(0) > CurrMAValue+Delta) // y la vela actual abrió por encima de MA+Delta
(
Alerta ("El precio se acerca a la MA desde arriba;)
)

if ((MathAbs(Price2MA) < Delta) && // si la distancia a la MA es menor que el delta
(precio < CurrMAValue) && // y el precio está por debajo de la MA
(Open(0) < CurrMAValue-Delta)) // y la vela actual abrió por debajo del delta de la MA
(

Alerta ("El precio se acercó por debajo de la MA;)
)

return(0);


//+------------------------------------------------------------------+

Después de la compilación aparece el siguiente error

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Куда исчезли "Сообщения"? У меня в профиле исчез раздел...
Archivos adjuntos:
Error.jpg  60 kb
 
berkley75:

¡Hola!

¡¡¡Por favor, ayúdenme a encontrar un error en el siguiente programa!!!


Tras la compilación aparece el siguiente error.

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "365_MA"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int    Period_MA = 365;  //Период МА 1
extern double Delta = 0.0010;   //На каком расстоянии открывать ордер

string Symb;                  //Название торгового инструмента
//int Total;                  //количество ордеров

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
 {
//----
 
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
 {
//----
   ObjectDelete("Obj_Label");
   ObjectDelete("Obj_Label2");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
 {
   
 

double prise = Bid;                                                             //текущая цена
double CurrMAValue = iMA(Symb, Period(),Period_MA, 0,Mode_EMA, PRICE_CLOSE, 0); //значение скользящей средней
double Price2MA = price - CurrMAValue;                                          //расстояние о МА до цены
datetime NextClose = Time(0) + Period()*60*2;                                   //время до закрытия
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;                    //время до закрытия в минутах

//int err;



//обновление текст информации на графике

ObjectSetText ("Obj_Label", "ТФ" + Period() + ", " + DoubleToStr(price, 4) + ", тик " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10,
ObjectSetText ("Obj_Label2", "Дельта " + DoubleToStr(Delta,4) + ", знач МА " + DoubleToStr(CurrMAValue, 4) + ", расст до МА " + DoubleToStr(Price2MA, 4), 10, "Arial", DarkGreen );
//анализ цены и выдача алертов

if ((MathAbs(Price2MA) < Delta) &&   // если расстоание до МА меньше дельты
   (Price > CurrMAValue) &&          // и цена выше МА
   (Open(0) > CurrMAValue+Delta))    // и текущая свеча открылась выше, чем МА+дельта
( 
   Alert ("Цена подощла к МА сверху");
)

if ((MathAbs(Price2MA) < Delta) &&   // если расстояние до МА меньше дельты
   (price < CurrMAValue) &&          // и цена ниже МА
   (Open(0) < CurrMAValue-Delta))    // и текущая свеча открылась ниже, чем МА-дельта
( 

   Alert ("Цена подошла к МА снизу");
)

   return(0);
}
   
   
//+------------------------------------------------------------------+


Se ha omitido un corchete.

 
Por favor, aconseje cómo solucionar el error de cantidad de lotes no válidos para la función FreeMarginCheck en el EA, cuando accidentalmente se establece un valor negativo de volumen (lote). Para tener un mensaje sobre el lote equivocado, sin mensaje de error, en el probador
 
Roman Sharanov:

Tengo que integrar el zigzag en mi propio indicador (ahora cuenta por asa)

El caso es que mi indicador no utiliza OnCalculate().

Entonces, ¿cómo hago funcionar el zigzag y cómo obtengo rates_total y prev_calculated?

El rates_total es el número de barras del gráfico. Se determina mediante la función Bares.

prev_calculated - crea un análogo por tu cuenta, decláralo globalmente (o estáticamente) y escribe allí el número de barras realmente calculado en la iteración actual. Esto significa que, después de los cálculos exitosos de los valores del indicador, necesitamos registrar el número de barras actuales en él. Si los cálculos no tienen éxito, es mejor anularlo para recalcular los valores del indicador para cada barra del historial en la siguiente iteración.

 

Re: Alekseu Fedotov

¿Qué es un corsé, lo siento?

 
berkley75:

Re: Alekseu Fedotov

¿Qué es un corsé, lo siento?

Entre paréntesis, el argumento de la función sin(30)
Entre corchetes, el índice de la matriz x[25].
void start()
{
En el bloque de operadores con llaves
}
 
Hola, ¿podríais decirme cómo mostrar/eliminar un símbolo concreto en la ventana de "visión general del mercado"?
 
STARIJ:
Entre paréntesis el argumento de la función sin(30)
entre corchetes el índice de la matriz x[25]
void start()
{
En el bloque de operadores con llaves
}
Gracias, ¡todavía no compila! ¡¡¡¡Incluso si pones una llave rizada al final, lo cual noté!!!!