[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 162

 
Vinin:


Ok, vou trazer um pouco de lógica

O ciclo é executado independentemente da condição se(NewBar())


Não preciso que dependa de NewBAR(). Esta função é necessária para evitar colocar pedidos em pilhas. Por favor, me diga porque meu código (em sua última variante) funciona melhor.

funciona, mas assim que eu fizer o mesmo para os negócios SELLSTOP parem de abrir?

 

Caros senhores, eu sou um novato!

Eu comecei a escrever minha primeira EA...... e não consigo terminá-la.

No momento, estou testando-o no testador de estratégia.

É muito simples.

Na abertura desta vela de 10 horas, eu coloco um pedido pendente a uma distância de, digamos, 60 pips do preço de abertura desta vela de 10 horas.

Tive algum sucesso com ela.

Mas tenho que apagar a ordem pendente, se ela não tiver se transformado em uma hora a partir do momento em que foi colocada

em uma ordem de mercado.

Aqui está meu código.

int start()
{
double Price=Ask+60*Point;
double SL=Price-30*Point;
double TP=Price + 15*Point;
if(OrdersTotal()==0 && Hour()==10 && Minute()== 00 )
OrderSend("EURUSD",OP_BUYSTOP,0.1,Price,0,SL,TP, "fjdu",123,TimeCurrent( ) + 3600);

}

Este código é compilado com sucesso; o testador não mostra nenhum erro.

Mas o parâmetro de expiração não funciona, ou seja, as ordens pendentes não convertidas em ordens de mercado dentro de 1 hora não são eliminadas.

Mudei o valor 3600 para 3600000...., mas nada acontece.

Eu ficaria muito grato se você pudesse me dizer qual é o meu erro.

 
solnce600:
o parâmetro de expiração não funciona

O mais provável é que o corretor não a apoie. Para ter certeza, você pode ir assim:

int i,ot = OrdersTotal();

for(i=ot-1;i>=0;i--)
{
   if(!OrderSelect()) continue;
   if(OrderMagicNumber()!=123) continue;
   
   if(OrderType()==OP_BUYSTOP && TimeCurrent()-OrderOpenTime()>3600)
   {
      OrderDelete(OrderTicket());
   }
}
 
solnce600:

Caros senhores, eu sou um novato!

Eu comecei a escrever minha primeira EA...... e não consigo terminá-la.

No momento, estou testando-o no testador de estratégia.

É muito simples.

Na abertura da vela de 10 horas, eu coloco um pedido pendente a uma distância de, digamos, 60 pips do preço de abertura desta vela de 10 horas.

Tive algum sucesso com ela.

Mas tenho que apagar a ordem pendente, se ela não tiver se transformado em uma hora a partir do momento em que foi colocada

em uma ordem de mercado.

Aqui está meu código.

int start()
{
preço duplo=Ask+60*Point;
duplo SL=Price-30*Point;
duplo TP=Preço + 15*Ponto;
if(OrderTotal()==0 && Hour()==10 && Minute()== 00 )
OrderSend("EURUSD",OP_BUYSTOP,0.1,Price,0,SL,TP, "fjdu",123,TimeCurrent( ) + 3600);

}

Este código é compilado e testado com sucesso.

Mas o parâmetro de expiração não funciona, ou seja, as ordens pendentes não convertidas em ordens de mercado dentro de 1 hora não são eliminadas.

Mudei o valor 3600 para 3600000...., mas nada acontece.

Eu ficaria muito grato se você pudesse me dizer qual é o meu erro.

O que impede que você faça a condição de apagar a mesma na hora e no minuto? O CD pode não atingir seu prazo de validade.
 
borilunad:
E o que o impede de fazer uma condição para apagar na mesma hora e minuto? DC pode não atingir seu prazo de validade.


alsu:

O mais provável é que o corretor não a apoie. Para ter certeza, você pode fazer isso:



Eu tenho o terminal Alpari. Em conta demo, eu defino manualmente o tempo de espera e de expiração - 1 hora. Tudo estava bem.

Li que se o corretor não suportasse este parâmetro, haveria um erro...., mas não há erro.

Os testes estão em andamento ... mas a ordem não é apagada.

 
borilunad:
E o que impede que você faça a condição de apagar por hora e minuto? O CD pode não atingir seu prazo de validade.

E a cada hora e minuto?

Obrigado.

 
solnce600:

Que tal a cada hora e a cada minuto?

Obrigado.



O que deve ser substituído pelo parâmetro de expiração ?

 
solnce600:

E por uma hora e um minuto, como é isso?

Obrigado.

É o mesmo que você abriu, apenas uma hora depois às 11:00. É o que você tem! Não é assim que eu faço, mas isso não muda a questão.
 
borilunad:
O mesmo que você abriu, apenas uma hora depois, às 11 horas. Estou fazendo isso de maneira diferente, mas isso não muda a questão.

Desculpe por ser burro, mas ainda não entendi se preciso ou não mudar alguma coisa neste parâmetro.

Se for o caso, gostaria que você pudesse inserir o parâmetro de expiração em meu código conforme necessário, e colar toda a linha no texto de sua resposta.

Obrigado.

 
solnce600:

Desculpe por ser burro, mas ainda não entendi se preciso ou não mudar alguma coisa neste parâmetro.

Se for o caso, eu agradeceria se você pudesse inserir o parâmetro de expiração em meu código conforme necessário, e colar a linha inteira no texto de sua resposta.

Obrigado.



Posso sugerir a seguinte variante:

if(Hour()==11 && OrderTotal()>0)

{

if(OrderSelect(0,SELECT_BY_POS)==verdadeiro)

{

if(OrderType()==OP_BUYSTOP)

{

OrderDelete(OrderTicket());

}

}

}

E você não usa o parâmetro de expiração. A desvantagem é que, ao negociar, o computador deve estar funcionando com a Internet conectada e o terminal ligado para que a posição possa ser fechada.

Razão: