Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Scripts

Broker Spec Inspector - script para MetaTrader 5

Seckin Erkut
Seckin Erkut
Algo Trading Systems Developer. I develop strategies and portfolios not by hypes but from solid academic literature.

I put my money where my mouth is, be sure to check the performance of my EAs through my signals.
| Portuguese English Русский 中文 Español Deutsch 日本語 한국어 Français Italiano Türkçe
Visualizações:
12
Avaliação:
(2)
Publicado:
Freelance MQL5 Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Todo trader que utiliza sistemas automatizados acaba se deparando com o erro 130, “Stops inválidos”, ou com uma ordem que simplesmente nunca aparece. A reação comum é culpar o EA. Na maioria das vezes, o EA está funcionando corretamente e o servidor está aplicando um limite contratual
que nunca é exibido na janela do terminal: o nível de stop, o nível de congelamento ou um passo mínimo de lote que o cálculo do tamanho da sua posição não respeita. Esses limites variam de acordo com o símbolo e a corretora, e mudam sem
aviso prévio. Este script os exibe.
Carregue-o em qualquer gráfico. Ele apenas lê as especificações — nunca abre, modifica ou fecha nada, e não é necessário habilitar a negociação algorítmica. Forneça uma lista de símbolos separados por vírgulas ou deixe o campo de entrada em branco, e ele percorrerá sua seleção no Market Watch.

O QUE ELA IMPRIME

Para cada símbolo: dígitos, ponto, tamanho do tick e valor, tamanho do contrato, lote mínimo / intervalo / máximo, spread e se é flutuante, modo de execução, swap para posições compradas e vendidas, e a margem necessária para um lote mínimo em relação à sua margem livre atual. Em seguida, a parte que responde à pergunta propriamente dita:

Aviso sobre corretores

--- XAUUSD (bid 4402.15 / ask 4402.63) ---------------------
stops level 350 pts | freeze level 0 pts | EFFECTIVE band 351 pts
VERDICT: a stop/pending placed 100 pts from price would be REJECTED as 'Invalid price' (band is 351 pts)
buy at ask 4402.63: you asked SL 4401.63 -> nearest legal SL 4399.12 (moved out)
A última linha é a mais útil. Ela não se limita a informar que um stop de 100 pontos falha nesse símbolo; ela indica o nível exato que o servidor aceitaria em vez disso.
A REGRA
Dois limites distintos podem rejeitar um stop, e as ferramentas que verificam apenas um deles apresentam o resultado errado em metade das corretoras:
double MinStopDistance(const string sym)
{
long stops = SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL);
long freeze = SymbolInfoInteger(sym, SYMBOL_TRADE_FREEZE_LEVEL);
long band = (stops > freeze ? stops : freeze) + 1;
return band * SymbolInfoDouble(sym, SYMBOL_POINT);
}

Essas quatro linhas contêm três decisões.
A faixa é o maior dos dois limites, pois alguns servidores mantêm o congelamento em zero e impõem paradas, enquanto outros fazem o contrário. Escolher o maior deles abrange as duas situações, sem precisar saber em que tipo de servidor você está.
É adicionado um ponto, pois um nível que se encontre exatamente no limite da faixa ainda é recusado por muitos servidores. A regra documentada é “mais próximo que”, a regra implementada costuma ser “mais próximo que ou igual a”, e um ponto não custa nada.
O resultado é retornado em unidades de PREÇO, e não em pontos. É isso que você precisa ao definir o nível de stop real, e isso elimina a confusão entre pontos e pips, que causa um erro de fator de dez em símbolos de 5 dígitos.
USE ISSO NO SEU PRÓPRIO EA
A segunda função é a que vale a pena copiar. Ela recebe o stop que você deseja e retorna o mais próximo que o servidor aceitará, no lado correto do preço:
double LegalStopLoss(const string sym, const bool isBuy,
const double price, const double wanted)
{
double dist = MinStopDistance(sym);
int digits = (int)SymbolInfoInteger(sym, SYMBOL_DIGITS);
double sl = wanted;
if(isBuy) { if(price - sl < dist) sl = price - dist; }
else { if(sl - price < dist) sl = price + dist; }
return NormalizeDouble(sl, digits);
}

Uma parada que já é legal retorna inalterada, portanto, é seguro direcionar todas as paradas por ela. Para incluir seu cálculo existente, basta uma linha:
double sl = LegalStopLoss(_Symbol, true, ask, ask - atr * 1.5);
Isso é mais importante quando a volatilidade é alta em relação à banda. Um stop ATR que funciona bem no EUR/USD pode ficar dentro da banda no ouro ou em um índice durante uma sessão tranquila — que é exatamente quando a rejeição te pega de surpresa, porque o mesmo código funcionou ontem.

NOTAS SOBRE A INTERPRETAÇÃO DOS RESULTADOS

Uma banda ampla não significa que a corretora esteja dificultando as coisas. Geralmente, isso reflete a forma como o símbolo é precificado e protegido, e é por isso que um EA de scalping que funciona em um servidor deixa de funcionar em outro, mesmo sem nenhuma alteração no código.
Compare antes de migrar. A exportação em CSV está ativada por padrão e grava o arquivo BrokerSpecs.csv na pasta MQL5\Files, com uma linha por símbolo, incluindo a banda, a distância mínima de stop e o nível legal mais próximo. Execute o script em duas corretoras, coloque os arquivos lado a lado e as diferenças que teriam custado uma semana de depuração ficarão visíveis em um minuto.
Verifique a margem antes de ajustar o tamanho da posição. A coluna “margem” refere-se a um lote mínimo. Se esse valor já estiver próximo da sua margem livre, o tamanho da sua posição tem um limite máximo que você ainda não avaliou.

Os símbolos devem estar na janela “Market Watch” e devem ter registrado pelo menos um tick. Se um símbolo não apresentar dados de tick, abra seu gráfico uma vez e execute o procedimento novamente.


Traduzido do inglês pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/en/code/76178

Session Opening Range Breakout EA Session Opening Range Breakout EA

Um Expert Advisor que mede a máxima e a mínima de um intervalo de abertura de sessão definido e, em seguida, opera com base na quebra confirmada desse intervalo, utilizando o dimensionamento de posição com base no risco e um limite de uma operação por sessão.

Reverse RSI Bands Reverse RSI Bands

O Reverse RSI Bands é um indicador antecedente que realiza uma análise matemática reversa da fórmula do RSI. Ele traça faixas precisas de preço-alvo diretamente no gráfico principal, mostrando exatamente a que preço o RSI atingirá os níveis de sobrecompra ou sobrevenda especificados por você, em tempo real.

Custom Simple Moving Average Custom Simple Moving Average

Uma média móvel adaptativa de duas etapas (média básica + suavização secundária) que muda de cor de acordo com a inclinação e marca os cruzamentos entre o preço e a média com setas.

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

O Indicador Acceleration/Deceleration (Aceleração/Desaceleração ou AC) mede a aceleração e a desaceleração da força motriz atual do mercado.