Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1129
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Existe la posibilidad, si el EA (o script) está a su disposición desde el punto de vista de tomar y corregir el código fuente. Hay que poner una condición alrededor de todas las alertas que compruebe si el botón está pulsado. Si no se pulsa el botón, no se llama a las descripciones.
GraciasVladimir - Creo que usaré tu método o pondré todo el EA en esta condición.
Gracias a Vitalie Postolache- Estudiaré su recomendación. Todavía no he estudiado mql5.
Necesito escribir los datos en un archivo hst, de modo que pueda utilizar los datos para construir un gráfico autónomo.
Llevo dos días luchando pero nada funciona.
Código:
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
ulong last_fpos=0; //
int HandleHistory=-1;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
string symbol=Symbol();
int per=Period()*9;
ResetLastError();
if(CreateHeader()==true)//если создали заголовок
{
HandleHistory=FileOpenHistory(symbol+(string)per+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
if(HandleHistory!=INVALID_HANDLE)
{
for(int i=199;i>0;i--)//заполняем данными
{
MqlRates r;
r.time=Time[i];//просто пытаюсь записать, это так для примера
r.open=Open[i];//просто пытаюсь записать, это так для примера
r.low=Low[i];
r.high=High[i];
r.close=Close[i];
r.tick_volume=(long)10;
r.spread=0;
r.real_volume=(long)10;
uint byteswritten=FileWriteStruct(HandleHistory,r);
Print("FileOpen OK ",byteswritten," ",Time[i]);
}
FileClose(HandleHistory);
// FileFlush(HandleHistory);
}
else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
}
// long id=ChartOpen(symbol,per);
//Alert(id);
}
//+------------------------------------------------------------------+
bool CreateHeader()//создаем файл с историей hst(заголовок)
{
int file_version=401;
string c_copyright;
string c_symbol=Symbol();
int i_period=Period()*9;
int i_digits=Digits;
int i_unused[13];
//---
ResetLastError();
HandleHistory=FileOpenHistory(c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);
if(HandleHistory<0)
{
Print("Error open ",c_symbol+(string)i_period,".hst file ",GetLastError());
return(false);
}
c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
ArrayInitialize(i_unused,0);
//--- write history file header
FileWriteInteger(HandleHistory,file_version,LONG_VALUE);
FileWriteString(HandleHistory,c_copyright,64);
FileWriteString(HandleHistory,c_symbol,12);
FileWriteInteger(HandleHistory,i_period,LONG_VALUE);
FileWriteInteger(HandleHistory,i_digits,LONG_VALUE);
FileWriteInteger(HandleHistory,0,LONG_VALUE);
FileWriteInteger(HandleHistory,0,LONG_VALUE);
FileWriteArray(HandleHistory,i_unused,0,13);
return(true);
}
Como resultado de la ejecución se crea un archivo con el historial, pero no se crea el gráfico autónomo.
Aquí está la información sobre el gráfico
Poralguna razón, los datos son de 2003.
Como resultado, obtengo un error al lanzar el gráfico HistoryBase: 196 errores en 'NZDCHF45'.
Entiendo que he escrito algo mal. No sé cómo escribirlo correctamente, tengo muy poca información. Quién sabe... por favor, aconséjeme.
tal vez esto es un extracto de un proyecto muy, muy viejo (C, gcc) :
/* .hst file header
*/
struct HstHeader {
uint32_t version; // +0 4 LE : database version
char copyright[64]; // +4 64 : copyright data
char symbol[12]; // +68 12 : symbol (EURUSD..)
uint32_t period; // +80 4 LE : timeframe (sec. in period)
uint32_t digits; // +84 4 LE : decimals after .
datetime timesign; // +88 4 LE : creation time sign.
datetime last_sync; // +92 4 LE : last sync. timestamp
uint8_t unused[52]; // +96 52 : reserved for feauture use
// total 148 bytes, packed, aligned by 1
};
/* .hst bar array (file payload)
*/
// when HstHeader.version==400
struct HstRates400 {
datetime ctm; // +0 4 LE : start (creation) time
double open; // +4 8 LE : open price
double low; // +12 8 LE : lowest price
double high; // +20 8 LE : highst price
double close; // +28 8 LE : close price
double volume; // +36 8 LE : volume (nr of ticks)
// total 44 bytes,packed, aligned by 1
} __attribute__((packed));
// when HstHeader.version==401
struct HstRates401 {
datetime ctm; // +0 8 LE : bar start time (with ms?)
double open; // +8 8 LE : open price
double low; // +16 8 LE : lowest price
double high; // +24 8 LE : highst price
double close; // +32 8 LE : close price
uint64_t volume; // +40 8 LE : volume (nr of ticks)
uint32_t spread; // +48 4 LE : spread
long real_volume; // +52 8 LE : real volume
// total 60 bytes,packed,aligned by 1
} __attribute__((packed));
Hola a todos, seguimos perfeccionando lo que ya tenemos
Tenemos una cuadrícula irregular de órdenes y una línea horizontal que puede estar en cualquier lugar
Tenemos que ponerlo en práctica:
si el precio está por debajo de la línea cerrar todas las órdenes
Las dificultades son las siguientes
1) si las órdenes son de tipo no uniforme y ya al poner la línea está todo hecho, y no cuando ponemos el marcado y ponemos la línea (en este caso deberíamos poner también la bandera on/off)
2) Implementación de una inscripción en la parte superior derecha de la línea por tipo (si la orden se cierra a este precio, el resultado será el mismo para el saldo, es decir, tenemos que cambiar la visualización cada tick y también al mover la línea; es básicamente similar a un trailing stop o sl si la orden se coloca manualmente, sólo que flotante y con la posibilidad de disparos erróneos inicialmente)
El robot está ahí, aparte de la etiqueta numérica todo está ya dibujado, la cuestión está en la correcta asignación de valores y el tratamiento de la información de toda la parrilla.
1) si los pedidos son de tipo irregular
Hola. No entiendo por qué iTime a veces da la hora equivocada. En la apertura de una nueva velaPERIOD_H1 debe mostrar la hora en el registro Print(iTime(NULL,PERIOD_M1,30)). En las pruebas muestra todo correctamente, pero en la realidad la hora es a veces diferente incluso por varias horas. ¿Por qué es así?
UtilizaCopyTime, yo también noté este problema al construir objetos gráficos yCopyTime solucionó el problema
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
UtilizaCopyTime, yo también noté este problema al construir objetos gráficos yCopyTime solucionó el problema
if(CopyTime(Symbol(),Period(),0,1,TM)<0) return;
TIME0=TM[0];
Es la primera vez que oigo hablar de ellos.
Aquí, el gráfico tiene 5 dígitos y el indicador tiene 4.
¿Cómo puedo hacer que la escala de mi indicador muestre 5 decimales?
Aquí, el gráfico tiene 5 dígitos y el indicador tiene 4.