Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 191

 
Vitaly Muzichenko:

Tente comentar a linha, fazer uma função funcionar


interessante se você souber como)
 
Rustam Bikbulatov:

interessante se você souber como)
você não precisa saber nada, eu mostrei no código //
 
Rustam Bikbulatov:

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).

 
Rustam Bikbulatov:

É interessante se você souber como)
Você pode substituir esses dois por este, funciona bem para mim, mas muito depende da rapidez com que seu CD executa os pedidos.
 
Maxim Kuznetsov:

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).

Eu tentei remover o sono por completo, mas é diferente.
 
Vitaly Muzichenko:
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");

}

}

 
d1w4m3:

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 do sinal e se esta posição foi fechada em uma das ordens de parada, então não abra uma posição.
 
Artyom Trishkin:
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.