[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 389

 
Dimka-novitsek:
Quando a EA não inicia nada, é apenas para verificar se novos pedidos não serão abertos a cada tique
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
         Alert ("OP_BUYSTOP", GetLastError( ));
         tikett= OrderSend( Symbol(), OP_SELLSTOP, volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

Este é seu código, eu não fiz nenhuma mudança

Você escreveu que o pedido será feito se você selecionar a ordem tiket do símbolo dado e a magia dada e ordens totais de menos de 2

 
Obrigado!!! Desculpe, e eu definitivamente escrevi disparates.
 
drknn:


Sem o código, é difícil dizer. É bem possível que a EA seja escrita por quatro dígitos, mas a conta demo é de cinco dígitos. Você entende que se definirmos, por exemplo, uma parada de 10 pips, então esta é a mesma distância para uma EA de cinco dígitos como 1 pip para uma EA de quatro dígitos. Se estabelecermos a distância mínima permitida para definir ordens de parada em, digamos, 3 pontos, então em um mercado de cinco dígitos isso seria de trinta pontos em vez de três. O servidor rejeitará compreensivelmente o comando para definir uma ordem com uma parada de 10 pontos nos cinco dígitos.

Mas a razão pode ser diferente. Você vê, você perguntou às pessoas por que o carro delas não pegava. As pessoas não podem dizer o motivo sem abrir o capô e ouvir como o carro reage às tentativas de partida...

Eu tentei executar um testador de estratégia pelo EURUSD e executá-lo por várias moedas, EURUSD, GBPUSD, USDJPY, mas não funcionou. Eu usei o Ponto ao enviar pedidos de Compra/Venda, portanto deve funcionar para todos os símbolos. O que eu não entendo mais é porque o testador mostra resultados, mas a EA não abre posições em uma conta demo. Em que casos isso pode acontecer?

De qualquer forma, obrigado pela resposta, postarei o código à noite.

 
Dimka-novitsek:


Desculpe-me, escrevi alguns disparates aqui, se você pudesse me mostrar onde eu sou completamente cordeiro.

Todos eles: )))))))))))))))))))

Vamos começar do início:

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
            Alert ("OP_BUYSTOP", GetLastError( ));
            tikett=OrderSend(Symbol(), OP_SELLSTOP, volume*A, price-otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

//----
return(0);
}
//+------------------------------------------------------------------+

Inicialmente, duas variáveis são inicializadas com zero:

int      tiket, tikett;

então a primeira linha de código é onde selecionamos o pedido do bilhete:

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

aqui o bilhete variável é zero. Ou seja, tentamos selecionar um pedido com um bilhete zero. Ao fazer isso, nós nem mesmo lemos a ajuda, já que o parâmetro do pool é ignorado ao selecionar por bilhete, e você ainda especifica MODE_TRADES. Isto não é um erro - é um parâmetro extra, neste caso, que é simplesmente ignorado. Assim, o pedido com bilhete zero não é selecionado - não existe...

Além disso, tudo vai nas condições aninhadas; a primeira condição é:

if(OrderSymbol()==Symbol())

... Se o símbolo da ordem selecionada corresponder ao símbolo do gráfico atual... E como nenhuma ordem foi escolhida, chegaremos com segurança à saída desde o início() sem fazer nada.

Posso assegurar-lhe... Além disso, você não tem menos interesse, mas... Não é interessante bisbilhotar por aí.

Comece com a busca de posições já abertas ou ordens pendentes que tenham sido definidas.

Boa sorte.

 
ilunga:

este é seu código, eu não fiz nenhuma mudança

Você escreveu que os pedidos serão feitos se você selecionar a ordem tiket do símbolo dado e a ordem mágica dada e há menos de 2 pedidos no total.


Ah, não, isso mesmo, quando você inicia um pedido com menos de dois, dois pedidos pendentes são feitos, e no próximo tick há dois deles e nada acontece.

Eu devo estar tendo algum tipo de crise na minha cabeça.

 
Dimka-novitsek:


Ah, não, isso mesmo, quando você inicia um pedido com menos de dois, dois pedidos pendentes são feitos, e no próximo tick há dois e nada acontece.

Eu devo estar tendo algum tipo de crise na minha cabeça.

Já lhe disse passo a passo onde está sua crise...
 
Sersad:

Eu fiz um testador de estratégia no EURUSD, tentei executá-lo em várias moedas, EURUSD, GBPUSD, USDJPY - não funcionou em nenhum lugar. Usei o Ponto ao enviar pedidos de compra/venda, portanto deve funcionar para todos os símbolos. O que eu não entendo mais é porque o testador mostra resultados, mas a EA não abre posições em uma conta demo. Em que casos isso pode acontecer?

De qualquer forma, obrigado pela resposta, vou postar o código à noite.


A questão é que o valor do Ponto é diferente.

 
PapaYozh:


Esse é o ponto: o valor do ponto varia.

O valor do ponto difere de cotação para cotação, mas sua essência é a mesma para todas as cotações com qualquer número de casas decimais - é a etapa de preço mínimo.

É por isso que o fato de eu ter usado para uma parada de perda, por exemplo, Ask-30*Point em vez de Ask-0.003, nega o comentário da drknn.

"É bem possível que a EA esteja escrita em quatro dígitos, enquanto a conta demo está em cinco dígitos. Se estabelecermos, por exemplo, uma ordem de 10 pontos de parada de perda, é a mesma distância em uma EA de cinco dígitos que 1 pip em uma EA de quatro dígitos. Se estabelecermos a distância mínima permitida para definir ordens de parada em, digamos, 3 pontos, então em um mercado de cinco dígitos isso seria de trinta pontos em vez de três. É claro que o servidor simplesmente rejeitaria o comando para definir uma ordem com uma parada de 10 pontos...".

Ponto duplo - Tamanho do ponto do instrumento atual na moeda de cotação.
 

Uma palavra de conselho.

Eu escrevi um roteiro simples para produzir o valor do nível mínimo de stop loss/stake profit em pips.

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert(min);
return(0);
}

Saídas zero. Este é um valor padrão para este parâmetro?

 

fx_max:

Escrevi um roteiro simples que produz o valor do nível mínimo permitido de stop loss/stake profit em pips.


int min=MarketInfo(Symbol(),MODE_STOPLEVEL);

O resultado é zero. Este é um valor padrão para este parâmetro?


não