// O indicador interrompe todas as tentativas de negociação por meio de Expert Advisors. Ele só permite a negociação com as mãos.// Para evitar a tentação de desligá-lo enquanto o Terminal está em execução, o indicador está no modo invisível.#property indicator_chart_window#property indicator_buffers0#property indicator_plots0#include <Symbol.mqh> // https://www.mql5.com/pt/code/18855#include <fxsaber\Expert.mqh> // https://www.mql5.com/pt/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 Se você reiniciar o terminal, às vezes poderá se deparar (MT5 build 1881) com o fato de ele travar nos processos. Isso pode ser superado removendo à força o processo correspondente terminal64.exe e excluindo o MetaTrader 5\Bases\Custom\history\Timer\*.hcc.
В наше время информационных технологий использование различных роботов и электронных экспертов для торговли на финансовых рынках стало довольно обычным явлением. Главными преимуществами электронных экспертов принято считать безукоризненное выполнение алгоритма и безустанная работа 24 часа в сутки. Для их круглосуточного использования арендуются...
Ou seja, salva o modelo de gráfico, lê-o, analisa-o e encontra o nome do Expert Advisor. Ainda é uma muleta, mas funciona bem até agora (por cerca de dois meses). Acho que, se você usar um HDD comum, não deve fazer isso com muita frequência (por exemplo, a cada tick). Espero que o CHART_EXPERT_NAME apareça na MQL4 algum dia .
Ele não é muito semelhante ao meu caso de uso. A principal pergunta sobre o exemplo é o que acontece se o nome do arquivo de música for especificado em um parâmetro de script, em vez de lançá-lo por meio de variáveis globais? Posso lhe enviar meu projeto em uma mensagem privada.
Não é muito semelhante ao meu caso de uso. A principal pergunta sobre o exemplo é o que acontece se o nome do arquivo de música for especificado em um parâmetro de script em vez de ser lançado por meio de variáveis globais?
Não me lembro o motivo, mas a opção com um parâmetro de entrada é imediatamente sugerida. Como o exemplo é tão distorcido, deve ser uma limitação do MT5.
Ah, esses hackers russos.... Bem, por que interromper todos os especialistas quando você está um pouco confuso?
A propósito, você também tem um bug. A estática não funciona.
A propósito, você também tem um bug. A estática não funciona.
Não vi nenhum erro aqui
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Perguntas de iniciantes MQL5 MT5 MetaTrader 5
fxsaber, 2018.08.02 17:09
ZY Se você reiniciar o terminal, às vezes poderá se deparar (MT5 build 1881) com o fato de ele travar nos processos. Isso pode ser superado removendo à força o processo correspondente terminal64.exe e excluindo o MetaTrader 5\Bases\Custom\history\Timer\*.hcc.
No artigo, o autor destacou em grande detalhe as nuances dos resultados dessa biblioteca. Recomendo a leitura do artigo.
Acontece que o MT4 está faltando muito mais do que FileSave e FileLoad (que são escritos em 3 linhas cada):
Em meu projeto, resolvi o problema dessa forma (com a tag "name"):
Onde o SubstringParser tem esse código:
Ou seja, salva o modelo de gráfico, lê-o, analisa-o e encontra o nome do Expert Advisor. Ainda é uma muleta, mas funciona bem até agora (por cerca de dois meses). Acho que, se você usar um HDD comum, não deve fazer isso com muita frequência (por exemplo, a cada tick). Espero que o CHART_EXPERT_NAME apareça na MQL4 algum dia .
Haverá uma nova versão com suporte para a execução de scripts?
Esse exemplo não funciona?
Esse exemplo não funciona?
Ele não é muito semelhante ao meu caso de uso. A principal pergunta sobre o exemplo é o que acontece se o nome do arquivo de música for especificado em um parâmetro de script, em vez de lançá-lo por meio de variáveis globais? Posso lhe enviar meu projeto em uma mensagem privada.
Não é muito semelhante ao meu caso de uso. A principal pergunta sobre o exemplo é o que acontece se o nome do arquivo de música for especificado em um parâmetro de script em vez de ser lançado por meio de variáveis globais?
Não me lembro o motivo, mas a opção com um parâmetro de entrada é imediatamente sugerida. Como o exemplo é tão distorcido, deve ser uma limitação do MT5.