¿Podríais decirme cómo dibujar un rectángulo relleno con el color de fondo en la esquina superior izquierda con una pequeña sangría (por estética) encima del gráfico y debajo del texto que muestra el experto?
if(!trend)
{
(if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) // Если бар соответствует требуемым признакам..
cnt++; // .. прибавим 1 к счётчикуif (Close[i] < Open[i]) // Если бар, не соответствует основному признаку..
cnt = 0;
}
else
{
...
}
Chicos, ¿dónde se puede descargar una biblioteca de notificaciones de sonido. es decir, para reproducir una voz como "posición de compra cerrada en takeprofit". por lo que puede ser reproducido en PlaySound("Buy_close_tp.wav");
Puedes ir en coche o conducir en coche. Si pasas la variable de tendencia como un valor numérico, puedes multiplicar la diferencia por +1 o -1 por ejemplo (yo no lo haría)
Pregunta sobre el funcionamiento del probador: Después deejecutar una prueba, se cambian los parámetros (fechas, par de divisas, marco temporal), se vuelve a ejecutar la prueba - se ejecuta, pero cuando termina la información en las pestañas como "gráfico" e "informe" no cambia en absoluto - todo sigue siendo de la prueba anterior. El informe guardado también resulta ser antiguo. ¿Cuál es el motivo y cómo se puede solucionar? ¿Tal vez haya alguna función para restablecer los resultados?
He leído el manual, los artículos, he buscado en el foro - no he encontrado ninguna mención a ese problema...
No debería ser así, ¿quizás tienes marcada la opción "Optimización"?
Este no debería ser el caso, ¿quizás tienes marcada la opción "Optimizar"?
Parece que es así: al realizar una nueva prueba no me di cuenta de que la optimización estaba activada, pensé que no era crítica. Una solución de interfaz un poco extraña...
TarasBY: No he profundizado en la lógica, pero algo me dice que hay algunos cálculos innecesarios. Hace un año y medio estaba resolviendo el mismo problema con la recogida de citas y la formación de velas M1 con corte claro al principio del minuto astronómico. Si le interesa, puede echar un vistazo a algunos momentos de pura optimización de su código (archivo). Realmente, si hablamos seriamente de optimización, hay que medir el tiempo de ejecución del código. ;)
Ahora estoy probando una forma diferente desde cero.
Pregunta para Vadim sobre la cartografía. Así que... Empezó de cero. Tomamos el TF original:
En principio, la lógica es sencilla: cogemos un bidask, formamos RateInfo, pero ponemos tiempo al Volumen, y simulamos el Tiempo. Ahora, sin preocuparnos de cómo simular el Tiempo, quitamos la simulación por completo y lo hacemos por TOLHCV estándar y antes ponemos "si han pasado más de 0 segundos desde la última llamada de start()". Si fue menor en otra rama de la misma condición, edita Alta-Baja e incrementa el Volumen. En esencia, es lo mismo que antes pero con el ciclo completamente eliminado, es decir, obtenemos la segunda TF "con huecos" (con los segundos que faltan):
También dejó la calificación de alcista-bajista completamente apagada. ¿Merece la pena la apuesta? Vamos a comprobarlo, pon GetTickCount() con encogimiento a esta variante y a la inicial del propietario, ejecútalas simultáneamente en un gráfico, mira el registro:
16:14:56 Сек.тф с проп. AUDUSD,M1: 016:14:56 Тик.тф AUDUSD,M1: 016:14:56 Сек.тф с проп. AUDUSD,M1: 016:14:56 Тик.тф AUDUSD,M1: 016:14:56 Сек.тф с проп. AUDUSD,M1: 016:14:57 Тик.тф AUDUSD,M1: 016:14:57 Сек.тф с проп. AUDUSD,M1: 016:14:58 Тик.тф AUDUSD,M1: 016:14:58 Сек.тф с проп. AUDUSD,M1: 016:14:58 Тик.тф AUDUSD,M1: 016:14:58 Сек.тф с проп. AUDUSD,M1: 016:14:58 Тик.тф AUDUSD,M1: 016:14:58 Сек.тф с проп. AUDUSD,M1: 016:15:00 Тик.тф AUDUSD,M1: 016:15:00 Сек.тф с проп. AUDUSD,M1: 016:15:00 Тик.тф AUDUSD,M1: 016:15:00 Сек.тф с проп. AUDUSD,M1: 016:15:04 Тик.тф AUDUSD,M1: 016:15:04 Сек.тф с проп. AUDUSD,M1: 016:15:04 Тик.тф AUDUSD,M1: 016:15:04 Сек.тф с проп. AUDUSD,M1: 016:15:05 Тик.тф AUDUSD,M1: 016:15:05 Сек.тф с проп. AUDUSD,M1: 016:15:05 Тик.тф AUDUSD,M1: 016:15:05 Сек.тф с проп. AUDUSD,M1: 016:15:05 Тик.тф AUDUSD,M1: 016:15:05 Сек.тф с проп. AUDUSD,M1: 016:15:06 Тик.тф AUDUSD,M1: 016:15:06 Сек.тф с проп. AUDUSD,M1: 016:15:07 Тик.тф AUDUSD,M1: 016:15:07 Сек.тф с проп. AUDUSD,M1: 016:15:08 Тик.тф AUDUSD,M1: 016:15:08 Сек.тф с проп. AUDUSD,M1: 016:15:08 Тик.тф AUDUSD,M1: 016:15:08 Сек.тф с проп. AUDUSD,M1: 016:15:09 Тик.тф AUDUSD,M1: 016:15:09 Сек.тф с проп. AUDUSD,M1: 016:15:09 Тик.тф AUDUSD,M1: 016:15:09 Сек.тф с проп. AUDUSD,M1: 016:15:09 Тик.тф AUDUSD,M1: 1616:15:09 Сек.тф с проп. AUDUSD,M1: 016:15:10 Тик.тф AUDUSD,M1: 016:15:10 Сек.тф с проп. AUDUSD,M1: 1616:15:11 Тик.тф AUDUSD,M1: 016:15:11 Сек.тф с проп. AUDUSD,M1: 016:15:11 Тик.тф AUDUSD,M1: 016:15:11 Сек.тф с проп. AUDUSD,M1: 016:15:12 Тик.тф AUDUSD,M1: 016:15:12 Сек.тф с проп. AUDUSD,M1: 15
Esto está en el código de los segundos tf. Para el EA que va a rondar el propio secondtf, los valores de TOLHCV hace x segundos se pueden obtener entonces como ind[GlobalVariableGet("final")]-ind[GlobalVariableGet("final")-x]+1, si por supuesto este array se pasa de alguna manera. Por lo tanto, vamos a utilizar el mapeo:
//в шапке#import "SharedMemoryMT4.dll"int MemoryCreate(int nArea, string sPrefixArea, int hFileUser, int nIndex, string sName, int nSize);
bool MemoryWriteInt(int nArea, string sPrefixArea, int nIndex, string sName, int nStartByte, int nValue);
bool MemoryCloseHandle(int nArea, string sPrefixArea, int hMemory);
#import//в инит
hMapping=MemoryCreate(1, "", NULL, -1, "ind", 60*GlobalVariableGet("ADXBars"));
//в деинит
MemoryCloseHandle(1, "", hMapping);
//в старт вместо for(; i<Σ; i++) MemoryWriteInt(1, "", -1, "ind", i, iBars(sn, 1));//ind[i]=iBars(sn, 1);
Escribimos un script de prueba que pasará por encima de los segundos y leerá los valores deTOLHCV hace x segundos (no los candelabros):
#property show_inputs#import "SharedMemoryMT4.dll"int MemoryOpen(int nArea, string sPrefixArea, int nIndex, string sName);
int MemoryReadInt(int nArea, string sPrefixArea, int nIndex, string sName, int nStartByte);
#importexternint x;//сколько секунд назад с данного момента прикрепления смотрим значения TOLHCVint init()
{
MemoryOpen(1, "", -1, "ind");
return(0);
}
int start()
{
//MemoryReadInt(1, "", -1, "ind", i) это ind[i], GlobalVariableGet("final") это последний элемент в массиве, а ф-ла выглядит так: n=ind[final]-ind[final-x]+1int n=MemoryReadInt(1, "", -1, "ind", GlobalVariableGet("final"))-MemoryReadInt(1, "", -1, "ind", GlobalVariableGet("final")-x)+1;
Alert(TimeToStr(TimeCurrent(),TIME_SECONDS), ": Time=", TimeToStr(Time[n], TIME_SECONDS), ", Open=", Open[n], ", High=", High[n], ", Low=", Low[n], ", Close=", Close[n], ", Volume=", Volume[n]);
return(0);
}
Corremos el plazo de los segundos. En la inicialización, se mostrará una ventana
Ошибка в методе "Utils::Memory::Mapping::Create()".
В файловом отображении ""
не выделена память при отсутствии дескриптора пользовательского файла.
Hay 58.572 veces en el registro
10:45:42 SandyEw7-2.4 EURUSD,M1: function 'MemoryWriteInt' call from dll 'SharedMemoryMT4.dll' critical error c0000005 at 02CA05A3.
...
10:48:43 SandyEw7-2.4 EURUSD,M1: function 'MemoryWriteInt' call from dll 'SharedMemoryMT4.dll' critical error c0000005 at 02CA05A3.
y en la desinicialización muestra una ventana
В методе "MT4::Memory::SearchIndexOrHandle()" не установлен параметр для поиска в области памяти терминала.
Bueno deinitializatsii más tarde, puse la secuencia de comandos - la alerta una vez. Anulo MemoryCreate y MemoryCloseHandle, no aparece nada (el script mantiene la alerta), el registro
- y eso es todo. Así que, lógicamente, estoy utilizando las llamadas en un orden incorrecto o declarándolas mal. Mi sistema operativo es WinXP. Vadim, al menos dime qué dirección tomar.
Hola gurú de la programación
¿Podríais decirme cómo dibujar un rectángulo relleno con el color de fondo en la esquina superior izquierda con una pequeña sangría (por estética) encima del gráfico y debajo del texto que muestra el experto?
Gracias de antemano
if(!trend) { (if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) // Если бар соответствует требуемым признакам.. cnt++; // .. прибавим 1 к счётчику if (Close[i] < Open[i]) // Если бар, не соответствует основному признаку.. cnt = 0; } else { ... }es lo mismo... Para describirlo también, sólo que para una situación diferente.
¿No es eso?
Artem, no te importa escribir el código, ¿verdad? O dame esa cosa que tienes en la mano y acabaré con esta miseria...
Pregunta sobre el funcionamiento del probador: Después deejecutar una prueba, se cambian los parámetros (fechas, par de divisas, marco temporal), se vuelve a ejecutar la prueba - se ejecuta, pero cuando termina la información en las pestañas como "gráfico" e "informe" no cambia en absoluto - todo sigue siendo de la prueba anterior. El informe guardado también resulta ser antiguo. ¿Cuál es el motivo y cómo se puede solucionar? ¿Tal vez haya alguna función para restablecer los resultados?
He leído el manual, los artículos, he buscado en el foro - no he encontrado ninguna mención a ese problema...
No debería ser así, ¿quizás tienes marcada la opción "Optimización"?
Este no debería ser el caso, ¿quizás tienes marcada la opción "Optimizar"?
Parece que es así: al realizar una nueva prueba no me di cuenta de que la optimización estaba activada, pensé que no era crítica. Una solución de interfaz un poco extraña...
Pero ahora funciona, ¡muchas gracias!
No he profundizado en la lógica, pero algo me dice que hay algunos cálculos innecesarios. Hace un año y medio estaba resolviendo el mismo problema con la recogida de citas y la formación de velas M1 con corte claro al principio del minuto astronómico.
Si le interesa, puede echar un vistazo a algunos momentos de pura optimización de su código (archivo). Realmente, si hablamos seriamente de optimización, hay que medir el tiempo de ejecución del código. ;)
Ahora estoy probando una forma diferente desde cero.
Pregunta para Vadim sobre la cartografía. Así que... Empezó de cero. Tomamos el TF original:
En principio, la lógica es sencilla: cogemos un bidask, formamos RateInfo, pero ponemos tiempo al Volumen, y simulamos el Tiempo. Ahora, sin preocuparnos de cómo simular el Tiempo, quitamos la simulación por completo y lo hacemos por TOLHCV estándar y antes ponemos "si han pasado más de 0 segundos desde la última llamada de start()". Si fue menor en otra rama de la misma condición, edita Alta-Baja e incrementa el Volumen. En esencia, es lo mismo que antes pero con el ciclo completamente eliminado, es decir, obtenemos la segunda TF "con huecos" (con los segundos que faltan):
También dejó la calificación de alcista-bajista completamente apagada. ¿Merece la pena la apuesta? Vamos a comprobarlo, pon GetTickCount() con encogimiento a esta variante y a la inicial del propietario, ejecútalas simultáneamente en un gráfico, mira el registro:
como se esperaba. Garrapata - original, segundos con espacios - modificado. Ahora forma una matriz auxiliar antes de time=TimeCurrent():
Esto está en el código de los segundos tf. Para el EA que va a rondar el propio secondtf, los valores de TOLHCV hace x segundos se pueden obtener entonces como ind[GlobalVariableGet("final")]-ind[GlobalVariableGet("final")-x]+1, si por supuesto este array se pasa de alguna manera. Por lo tanto, vamos a utilizar el mapeo:
Escribimos un script de prueba que pasará por encima de los segundos y leerá los valores deTOLHCV hace x segundos (no los candelabros):
Corremos el plazo de los segundos. En la inicialización, se mostrará una ventana
Hay 58.572 veces en el registro
y en la desinicialización muestra una ventana
В методе "MT4::Memory::SearchIndexOrHandle()" не установлен параметр для поиска в области памяти терминала.Bueno deinitializatsii más tarde, puse la secuencia de comandos - la alerta una vez. Anulo MemoryCreate y MemoryCloseHandle, no aparece nada (el script mantiene la alerta), el registro
- y eso es todo. Así que, lógicamente, estoy utilizando las llamadas en un orden incorrecto o declarándolas mal. Mi sistema operativo es WinXP. Vadim, al menos dime qué dirección tomar.