[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 301

 
rustein:
Procurei no fórum, mas não encontrei uma solução rápida, ajude a resolver o problema, enquanto no testador não funciona, na vida real funciona.

Obrigado.

Se ele pendura o testador, então ele deve. (Não deixe de descrever a saída do laço).

Assim

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


É difícil dizer qual é o seu problema. Tomar como regra na MQL4 que os números negativos em código devem ser sempre colocados entre parênteses. Às vezes podem ocorrer erros sem parênteses.

Embora, em linhas de código começando com o exterior, não é necessário tomar valores negativos entre parênteses. Eu não sei por que é assim.

Obrigado, mas não funciona, você pode sugerir uma construção para se livrar do loop if(IsTesting()==verdadeiro || IsOptimization()==verdadeiro)
 
rustein:
Obrigado, mas não funciona, você pode sugerir uma construção para se livrar do loop if(IsTesting()==verdadeiro || IsOptimization()==verdadeiro)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
Não é necessário um alerta - meu entendimento é que em algum lugar do código o arquivo provavelmente já está aberto, mas não fechado. É provavelmente por isso que o arquivo não pode ser reaberto e a janela de alerta continua aparecendo. Embora, talvez eu esteja errado - eu não sou membro do clube de telepatas :(
A situação é a seguinte: em um determinado momento, o perito olha para o arquivo csv e vê qual comando está lá (comprar, vender, fechar), este comando é escrito no arquivo pelo EXCEL. O problema é que no momento, quando o especialista lê o arquivo, ele pode ser aberto pelo EXCEL, ekspert vai dar um erro e é tudo, e eu preciso que ele vá novamente e tente até ler o comando.
que eu não conhecia enquanto construía...
Por favor, verifique se o escrevi corretamente:
 
int init()
{
while(handle<1)
{ 
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t') 
} 

}

 
sanches83:

}

Sim, por que perguntar, você pode testá-lo com uma "luta" )).
 
rustein:
Obrigado, mas não funciona, você pode sugerir uma construção para se livrar do loop if(IsTesting()==verdadeiro || IsOptimization()==verdadeiro)


Tente sem nenhum laço, digamos assim:

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

Ao menos ajudaria a entender porque a pose não se abre.

 
costy_:

^^

Muito Obrigado :)

Obrigado a todos, consertou-o, está funcionando.

Muito obrigado por sua ajuda.

 
costy_:
Sim, por que precisamos perguntar, podemos verificar isso "lutando" )).


Em geral isto é correto, mas para que funcione, precisamos inicializar a variável antes do loop

cabo=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Bem, é só para ter certeza absoluta de que a execução do código entrará no corpo do laço e não o ignorará.

 
drknn:


Na verdade é verdade, mas para que funcione, a variável deve ser inicializada antes do loop

cabo=0;

while(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Isto é para garantir que a execução do código entre no corpo do loop e não o ignore.

Sim, infelizmente tenho que ser como um cartomante, criar scripts com parte do código sobre a questão, bem ou todo o código e será mais fácil para você apontar o erro. (borras de café zakAchyVeTso).
 

Pessoal, ajudem-me um pouco!!!

Estou tentando escrever um EA usando a estratégia do canal da manhã. A essência é a seguinte: às 6:01 no par EURGBP determinamos o canal de movimentação de preços das 0 horas até as 6 horas da manhã. Definimos duas ordens pendentes e se a ordem pendente acionada for fechada por uma rolha, abrimos uma ordem na direção oposta. É a segunda parte da estratégia que não funciona. Ou seja, se uma parada foi acionada, não podemos abrir uma ordem na direção oposta.
Arquivos anexados: