// El indicador corta todos los intentos de comercio a través de Asesores Expertos. Sólo permite operar con las manos.// Para evitar la tentación de apagarlo mientras el Terminal está en marcha, el indicador está en modo invisible.#property indicator_chart_window#property indicator_buffers0#property indicator_plots0#include <Symbol.mqh> // https://www.mql5.com/es/code/18855#include <fxsaber\Expert.mqh> // https://www.mql5.com/es/code/19003void MyAlert( conststring Str )
{
string StrArray[];
for (int i = StringSplit(Str, '\n', StrArray) - 1; i >= 0; i--)
Alert(StrArray[i]);
}
bool NextOnCalculate( conststring SymbName = NULL )
{
const SYMBOL Symb(SymbName);
MqlRates Rates[1] = {0};
Rates[0].time = TimeCurrent();
return(Symb.IsCustom() ? Symb.CloneRates(Rates) : ChartSetSymbolPeriod(0, _Symbol, _Period));
}
const SYMBOL SymbTimer("Timer");
voidOnInit()
{
if (_Symbol == SymbTimer.Name)
ChartIndicatorGet(0, 0, ChartIndicatorName(0, 0, 0));
elseif (SymbTimer.IsExist() && SymbTimer.On() && NextOnCalculate(SymbTimer.Name))
{
iCustom(SymbTimer.Name, PERIOD_CURRENT,
".." + StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5));
SymbTimer.Off();
}
}
string GetExpertData( constulong Chart = 0 )
{
string Str = NULL;
MqlParam Parameters[];
string Names[];
if (EXPERT::Parameters(Chart, Parameters, Names))
{
Str += "\n" + ::ChartSymbol(Chart) + " " + ::EnumToString(::ChartPeriod(Chart)) + " " + Parameters[0].string_value + "\n";
constint Amount = ::ArraySize(Names);
for (int i = 0; i < Amount; i++)
Str += (string)i + ": "+ Names[i] + " = " + Parameters[i + 1].string_value + "\n";
}
return(Str);
}
void Active( constint AlertTime = 5 )
{
staticconstuint StartTime = GetTickCount();
staticuint PrevInterval = 0;
constuint Interval = (GetTickCount() - StartTime) / 1000;
conststring Str = MQLInfoString(MQL_PROGRAM_NAME) + ": I've been watching you for " + TimeToString(Interval, TIME_SECONDS);
long Chart = ChartFirst();
if (Chart != -1)
do
{
if (EXPERT::Is(Chart))
MyAlert(GetExpertData(Chart) + "Removed - " + (string)EXPERT::Remove(Chart));
ChartSetString(Chart, CHART_COMMENT, Str);
ChartRedraw(Chart);
}
while ((Chart = ChartNext(Chart)) != -1);
elseif (!(Interval % AlertTime) && (Interval != PrevInterval))
{
MyAlert(Str);
PrevInterval = Interval;
}
}
intOnCalculate( constint, constint, constint, constdouble &[] )
{
staticint i = 0;
if ((_Symbol == SymbTimer.Name) && NextOnCalculate())
Active();
elseif (i++ > 0)
ChartIndicatorDelete(0, 0, ChartIndicatorName(0, 0, ChartIndicatorsTotal(0, 0) - 1));
return(0);
}
ZY Si reinicia el terminal, a veces puede encontrar (MT5 build 1881) que se cuelga en los procesos. Se puede superar mediante la eliminación forzada de la terminal64.exe proceso correspondiente y la eliminación de MetaTrader 5\Bases\Custom\history\Timer\*.hcc.
В наше время информационных технологий использование различных роботов и электронных экспертов для торговли на финансовых рынках стало довольно обычным явлением. Главными преимуществами электронных экспертов принято считать безукоризненное выполнение алгоритма и безустанная работа 24 часа в сутки. Для их круглосуточного использования арендуются...
Es decir, guarda la plantilla del gráfico, la lee, la analiza y encuentra el nombre del Asesor Experto. Sigue siendo una muleta, pero funciona bien hasta ahora (durante un par de meses). Creo que si utiliza un disco duro regular, usted no debe hacer esto con demasiada frecuencia (por ejemplo, en cada tick). Espero CHART_EXPERT_NAME aparecerá en MQL4 algún día .
No es muy similar a mi caso de uso. La pregunta principal sobre el ejemplo es ¿qué pasa si el nombre del archivo de música se especifica en un parámetro del script, en lugar de lanzarlo a través de variables globales? Puedo enviarte mi proyecto en un mensaje privado.
No es muy similar a mi caso de uso. La pregunta principal sobre el ejemplo es ¿qué pasa si el nombre del archivo de música se especifica en un parámetro de script en lugar de ser lanzado a través de variables globales?
No recuerdo en absoluto las razones, pero la opción con un parámetro de entrada se sugiere inmediatamente. Dado que el ejemplo es tan retorcido, debe ser una limitación de MT5.
Oh, esos hackers rusos.... Bueno, ¿por qué detener a todos los expertos cuando estás un poco jodido?
Por cierto, también tienes un bug. La estática no funciona.
Por cierto, también tienes un error. La estática no funciona.
No he visto un error aquí
Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading.
Preguntas de principiantes MQL5 MT5 MetaTrader 5
fxsaber, 2018.08.02 17:09
ZY Si reinicia el terminal, a veces puede encontrar (MT5 build 1881) que se cuelga en los procesos. Se puede superar mediante la eliminación forzada de la terminal64.exe proceso correspondiente y la eliminación de MetaTrader 5\Bases\Custom\history\Timer\*.hcc.
En el artículo, el autor ha destacado con gran detalle los matices de los resultados de esta biblioteca. Recomiendo su lectura.
Resulta que a MT4 le falta mucho más que FileSave y FileLoad (que están escritos en 3 líneas cada uno):
En mi proyecto, lo resolví de esta manera (con la etiqueta "name"):
Donde SubstringParser tiene este código:
Es decir, guarda la plantilla del gráfico, la lee, la analiza y encuentra el nombre del Asesor Experto. Sigue siendo una muleta, pero funciona bien hasta ahora (durante un par de meses). Creo que si utiliza un disco duro regular, usted no debe hacer esto con demasiada frecuencia (por ejemplo, en cada tick). Espero CHART_EXPERT_NAME aparecerá en MQL4 algún día .
¿Habrá una nueva versión con soporte para ejecutar scripts?
¿No funcionaeste ejemplo?
¿Este ejemplo no funciona?
No es muy similar a mi caso de uso. La pregunta principal sobre el ejemplo es ¿qué pasa si el nombre del archivo de música se especifica en un parámetro del script, en lugar de lanzarlo a través de variables globales? Puedo enviarte mi proyecto en un mensaje privado.
No es muy similar a mi caso de uso. La pregunta principal sobre el ejemplo es ¿qué pasa si el nombre del archivo de música se especifica en un parámetro de script en lugar de ser lanzado a través de variables globales?
No recuerdo en absoluto las razones, pero la opción con un parámetro de entrada se sugiere inmediatamente. Dado que el ejemplo es tan retorcido, debe ser una limitación de MT5.