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

 
Ekburg, ok
 
Ekburg:


Instale a última construção no terminal, é mais fácil escrever código nele, menos provável de cometer erros, aconselho!)

Corrigida a parte que foi enviada primeiro, sem a última parte dos parênteses, que não está clara a razão...


esta é minha saída da EA, se todas as condições forem cumpridas, então saia da EA

ou seja

falha=verdadeiro;

e então

if(fail) return(0);

 
SpikeOne:


sou eu que saio da EA, se todas as condições forem cumpridas, então a EA está saindo

ou seja

falha=verdadeiro;

e então

if(fail) return(0);


Isto é compreensível, mas no código que foi enviado no início, há muitos parênteses desnecessários antes da função de saída).

A que eu enviei ajudou?!

 
se ( AccountProfit()+ AccountBalance()>=740)
{
for(int zx=OrdensTotal(); zx+1>=0; zx--)
{
if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==verdadeiro)
OrderDelete(OrderTicket());
}
enquanto (OrdensTotal()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(resultado!=TRUE)
{
er=GetLastError();
Imprimir("LastError = ",er, ",Symbol());
}
senão er=0;
}
}
falha=verdadeiro;
}

if(fail) return(0);

Se você inserir meu código no EA https://www.mql5.com/ru/code antes do local

if(or_bu==risco && tick_b==0) open(0)

if(or_sl===risco && tick_s==0) aberto(1);

então a EA começa a negociar de forma diferente, embora em meu código só deva entrar depois que eu digitei 740, inicialmente meu saldo é 700 no testador.

Os valores para os testes podem ser definidos como segue:

teste de bool externo=falso; //rotação de objetos em teste

prof=2; // nível de lucro

int int chag=1,7; // passo entre ordens

risco int externo=0; // nível de risco

lote duplo externo = 0,01; // lote inicial

k_lote duplo externo=2; // incremento de volume

lote duplo externo_max=100;

resultado da bool;

bool fail=false;

O problema é que ele é comercializado de forma diferente, não consigo descobrir a data que eu tomei para o teste em 2013. 11. 08. и 2013. 11 .09.

 
SpikeOne:

então a EA começa a negociar de forma diferente, embora em meu código só deva entrar depois de discar 740, inicialmente meu saldo é 700 no testador.


if ( AccountProfit()+ AccountBalance()>=740)
   {
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
if(fail=true) return(0);

Tente compilar meu código, diga-me o resultado e depois pensaremos sobre isso...

se ele entra neste código antes do necessário, então o problema está no operador inicial, vamos ver o que está errado

 
Ekburg:

Tente compilar meu código, diga-me o resultado e depois pensaremos sobre isso...

Se ele entrar neste código antes do necessário, então o problema está no operador inicial, vamos ver o que está errado lá


Sim, eu o compilei, mas o problema persiste.... Parece que está entrando no código antes que precise entrar.
 
SpikeOne:

sim compilado, mas o problema permanece.... sim, parece que entra no código mais cedo, embora não deva.

AccountProfitRetorna o valor do lucro para a conta corrente na moeda base.

Este é o problema que eu acho, você quer saber o lucro em libras e ele retorna em euros, por exemplo

Tente substituir todo o cálculo da primeira declaração de código por este:

AccountEquityDevolve o valor do patrimônio líquido para a conta corrente. O cálculo da equidade depende das configurações do servidor comercial.

e eventualmente compilar este operador:

if(AccountEquity()>=740)
   {
   ...
   }
 
Ekburg:

AccountProfitRetorna o valor do lucro para a conta corrente na moeda base.

Esse é o problema que eu acho, você quer saber o lucro em libras e ele retorna em euros, por exemplo

Tente substituir todo o cálculo da primeira declaração de código por este:

AccountEquityDevolve o valor do patrimônio líquido para a conta corrente. O cálculo da equidade depende das configurações do servidor comercial.

e eventualmente compilar este operador:


O problema parece ser diferente, se eu inserir em um EA que não funciona corretamente, código que funciona corretamente, então após a compilação o EA não funciona corretamente, parece que quando você abre uma página no navegador, e ele lhe dá o cache todas as vezes.

Mesmo se você criar um novo EA e inserir um código de trabalho nele, ele funciona de forma torta por algum motivo.

 
SpikeOne:


...se eu inserir código que funcione incorretamente em uma EA que funcione corretamente, então, após a compilação, a EA não funciona corretamente...


Não posso ajudar então) você precisa passar por toda a EA.
 
Ekburg:

Não posso ajudar então) Preciso passar por toda a EA.


Pareço ter encontrado um bug=) os dados iniciais onde o passo entre os pedidos está definido para int e eu coloquei 1,7, mudei-os para o dobro e funcionou bem=)

Razão: