Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 191
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Tente comentar a linha, fazer uma função funcionar
interessante se você souber como)
interessante se você souber como)
Olá novamente. Você pode me dizer como mudar o código de um programador conhecido? No momento, esta coruja fecha cerca de um comércio por segundo. Eu gostaria de mudá-lo para fechar negócios instantaneamente, uma vez que ele atravessa um certo lucro, independentemente de negócios positivos ou negativos.
Há alguma mensagem de erro escrita no registro?
Você pode reduzir o atraso dentro do ClosePosBySelect para valores mais razoáveis. Para cada pedido há várias tentativas de fechá-lo, e cada vez que dormimos em caso de fracasso.
A propósito, a recuperação de erros pode ser feita de uma maneira melhor (desde o momento da criação destas funções, a MT aprendeu a gerar um código diferente de ERR_CONTEXT_BUSY).
É interessante se você souber como)
Alguma mensagem de erro está sendo registrada?
Você pode reduzir os atrasos dentro do ClosePosBySelect para valores mais razoáveis. Há várias tentativas de fechar cada pedido e cada vez, se não for bem sucedido, é mostrado Sleep.
A propósito, a recuperação de erros pode ser feita de uma maneira melhor (desde o momento da criação destas funções, a MT aprendeu a gerar um código diferente de ERR_CONTEXT_BUSY).
Você pode substituir esses dois por este, funciona bem para mim, mas muito depende da rapidez com que sua corretora executa as ordens.
É uma coruja completa ou parte de código de alguma coisa?
Cavalheiros especialistas, socorro!!! Estou trabalhando neste problema há três dias. Eu usei a função padrão em meu Expert Advisor (eu o vi em todos os lugares) para ler um arquivo da Internet usando wininet.dll para uma análise mais detalhada:
ReadHTML()
{
if(!IsDllsAllowed())
{
Alerta("Você precisa permitir DLLs em configurações;)
retorno(");
}
int rv = InternetAttemptConnect(0);
if(rv != 0)
{
Alerta("Erro ao ligar para InternetAttemptConnect()");
retorno(");
}
na hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
if(hInternetSession <= 0)
{
Alerta("Erro ao chamar InternetOpenW()");
retorno(");
}
int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0, 0);
if(hURL <= 0)
{
Alerta("Erro ao chamar InternetOpenUrlW();
InternetCloseHandle(hInternetSession);
return("");
}
int cBuffer[256];
int dwBytesLer[1];
fio TXT = "";
while(!IsStopped())
{
bool bResultado = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
if(dwBytesRead[0] == 0)
pausa;
texto de corda = "";
string text0= "";
for(int i = 0; i < 256; i++)
{
text0= CharToStr((char)(cBuffer[i] & 0x000000FF)));
se (text0!="\r") text = text + text0;
else dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) quebra;
text0= CharToStr((char)(cBuffer[i] >> (8 & 0x000000FF))
se (text0!="\r") text = text + text0;
else dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) quebra;
text0= CharToStr((char)(cBuffer[i] >> (16 & 0x000000FF))
se (text0!="\r") text = text + text0;
else dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) quebra;
text0= CharToStr((char)(cBuffer[i] >> (24 & 0x000000FF))
se (text0!="\r") text = text + text0;
else dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) quebra;
}
TXT = TXT + texto;
Dormir(1);
}
InternetCloseHandle(hURL);
InternetCloseHandle(hInternetSession);
retorno(TXT);
}
Tudo bem, apenas uma vez o site lido, que é posteriormente atualizado, em chamadas posteriores a esta função (com um período de 1 minuto ou menos, embora o site seja atualizado com mais freqüência) dá o mesmo site inalterado (como foi lido na primeira vez). Reiniciar o Expert Advisor não ajuda, já que o arquivo foi lido pela primeira vez após o início do terminal, por isso ele aparece. A única maneira de atualizar é abrir manualmente o Internet Explorer com o site necessário (respectivamente, com informações atualizadas) e a função começa a ler as informações atualizadas e depois congela esta configuração do site, ou quando reiniciar o terminal MT4 (e também quando lido pela primeira vez após reiniciar o terminal, assim ele continua a sair). Suspeito que tenha algo a ver com parâmetros InternetOpenW ou InternetOpenUrlW, tenho zeros em todos os lugares por padrão, mas não consigo encontrar uma descrição clara disso e de alguma forma funciona com outros EAs (tirei isso de Expert Advisors que retransmitem notícias de sites para o terminal). Sim, em configurações de terminal "Permitir WebRequest para..." para o site necessário.
Boa tarde.
Minha RAM já está fumegando: Surgiu um problema na EA, depois de tomar um TP ou SL, ela abre um pedido novamente!
Não consigo pensar em uma condição em que a EA estaria vinculada apenas à 2ª barra após o sinal do indicador
ou se um TP ou SL disparasse, ele esperaria por um novo sinal, mas somente quando o sinal indicador mudar.
nulo OnTick()
{
uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", período, método, preço, 0, n), 4);
dntr = NormalizeDuplo(iCustom(NULL, 0, "Slope Direction Line", período, método, preço, 1, n), 4);
if(DN_Trend()==verdadeiro)
{
if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
{
bilhete = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
se (bilhete > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Dígitos);
TP = NormalizeDouble(Bid - TakeProfit*Point, Dígitos);
se (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Imprimir("Erro de venda");
}
}
Boa tarde.
Minha RAM já está fumegando: Um problema surgiu no EA, depois de tomar um TP ou SL, ele abre um pedido novamente!
Não consigo pensar em uma condição em que a EA estaria vinculada apenas à 2ª barra após o sinal do indicador
Ou, se um TP ou SL disparasse, o Expert Advisor esperaria por um novo sinal, mas somente quando o sinal indicador mudar.
Se a última posição fechada é do mesmo tipo que o sinal entrou, e se esta posição foi fechada em uma das ordens de parada, então não abra a posição.
Obrigado pela resposta, mas só agora comecei a aprender por algumas semanas, como implementar isto em código, ou me dizer onde ler por favor. Ou de acordo com Igor Kim?
E ainda assim, abrirá uma posição, não de acordo com o sistema, quando apenas iniciar seu trabalho, sua condição não evita este problema.