[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 203

 
Olá, você poderia me dar um comando (se houver um) para selecionar aleatoriamente um número 0 ou 1, obrigado antecipadamente?
 
hoz:


Para começar, acostume-se a colocar parênteses onde você precisar. Assim:

E em geral, você deve ter um intervalo de tempo, não um valor fixo. Sua lógica não está correta de forma alguma. Não 1 hora OU 3 horas, mas 1 hora a 3 horas!!!
Obrigado. Entendi errado.
 
stater:
Olá, você poderia me dar um comando (se houver um) para selecionar aleatoriamente um número 0 ou 1, obrigado antecipadamente?
int x =MathRand() % 2;
 

Durante os testes do Expert Advisor, encontrei erros de execução do código:
- A execução do loop for(i=0;i<OrdersTotal();i++) é interrompida com o próximo tick (abaixo em Negrito),
- Os pedidos de compra são selecionados e fechados em qualquer pedido.

Você pode me dizer como encontrar a causa e consertá-la?
Aqui está o código do programa e o relatório do registro do testador.

Código do programa.

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| Teste do operador do laço.|
//+------------------------------------------------------------------+
#direitos autorais "Copyright 2012, MetaQuotes Software Corp."
#ligação de propriedade ""
//+------------------------------------------------------------------+
//Devariáveis declaradas|
//+------------------------------------------------------------------+
int Mn=357;//Magic número
int i;//Índice do contador de iteração
duplo PriTP;// série PriTP
int Tick;//Tick counter
//+------------------------------------------------------------------+
//| função de iniciação de especialista|
//+------------------------------------------------------------------+
int init()
{
//----Configuração de pedidos
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Point,Ask+350*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Point,Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//----
PriTP=Bid;//PriTP
Print("Kc0:",OrderTotal=",OrderTotal());//
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada|
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de partida de especialista|
//+------------------------------------------------------------------+
int start()
{
//----Tick counter
Tick++;//Tick
//----Fechar pedidos de compra
for(i=0;i<OrdersTotal();i++)//inicializar o laço
{
Imprimir("Kc1:"," Tick=",Tick," i=",i);//Mensagem
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==verdadeiro)//Select order i
{
if(OrderSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//Identification number
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//O tipo de transação do pedido atualmente selecionado
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Closing the position
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}// Fechado se(OrderMagicNumber()==Mn)
}// Fechado se(OrderSymbol()==Symbol()
}// Fechado se(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==verdadeiro)
}// Fechado para(i=0;i<OrdensTotal();i++)
//----
retorno(0);
}

Entradas do livro de registro do testador.

2013.03.01 12:12:57 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=0
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:03 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #4 comprar 2,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 a 1,25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #2 comprar 1,00 EURUSD a 1,25773 sl: 1,25516 tp: 1,26023 ao preço 1,25768
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #5 comprar 3,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #3 comprar 1,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #1 comprar 0,50 EURUSD a 1,25773 sl: 1,25416 tp: 1,26123 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: EncomendasTotal=7
2013.03.01 12:11:21 2012.09.03 00 00:00 Poligon1 EURUSD,M15: aberto #7 venda parada 3.00 EURUSD a 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00 00:00 Poligon1 EURUSD,M15: aberto #6 limite de compra 1.00 EURUSD a 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #5 comprar 3,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #4 comprar 2,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #3 comprar 1.50 EURUSD a 1.25773 sl: 1.25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #2 comprar 1.00 EURUSD a 1.25773 sl: 1.25516 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #1 comprar 0.50 EURUSD a 1.25773 sl: 1.25416 tp: 1.26123 ok
2013.03.01 12:11:21 PM Teste Poligon1 iniciado
2013.03.01 12:11:21 18 18:30 Polígono1 EURUSD, M15: carregado com sucesso

Cumprimentos. Shurkin

 
Shurkin:

Ao testar o Expert Advisor, detectamos alguns erros no código:
- A execução do operador de laço para(i=0;i<OrdersTotal();i++) é interrompida pelo próximo tick (mostrado em Negrito abaixo),
- As ordens de compra são selecionadas e fechadas em ordem aleatória.

Cumprimentos. Shurkin


1. As ordens não podem ser abertas na função init() (no Testador de Estratégia, mas não funcionará na demonstração)

2. Quando você fechar os pedidos, conte do final ao início, e não vice-versa, como você fez.

 
Shurkin:

Ao testar o Expert Advisor, foram detectados erros de execução do código:
- execução da instrução de loop para(i=0;i<OrdersTotal();i++) é interrompida pelo próximo tick (destacado em Negrito abaixo),
- ordens de compra são selecionadas e fechadas em ordem aleatória.

Você pode me dizer como encontrar a causa e consertá-la?
Aqui está o código do programa e o relatório da revista do testador.

O código do programa.

//+------------------------------------------------------------------+
//|Poligon1.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| Teste do operador de laço.|
///+ +
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#link de propriedade ""
//+ +
//|Variáveis declaradas|
///+
+
int Mn=357;//Magic number int i;// Contador de iteração
duplo PriTP;// série de PriTP
int Tick;//Tick counter
//+
+ //| função de inicialização de especialista |
///+
+
int init() {
//------------------------------------------------------------------Conjunto de pedidos
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,Bid-350*Ponto,Ask+350*Ponto,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1,Ask,0,Bid-250*Ponto,Ask+250*Ponto,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,Bid-150*Ponto,Ask+150*Ponto,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,Bid-150*Ponto,Ask+150*Ponto,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,Bid-150*Point,Ask+150*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_BUYLIMIT,1,Ask-150*Point,0,Bid-400*Point,Point,
Ask+250*Point,NULL,Mn,0,CLR_NONE);//
OrderSend(Symbol(),OP_SELLSTOP,3,Ask-300*Point,0,Bid+150*Point,Point,
Ask-750*Point,NULL,Mn,0,CLR_NONE);//
//Point,
PriTP=Bid;//PriTP
Print("Kc0:"," OrderTotal=",OrderTotal());//PriTP
//

return(0);
} //+ +
//| função de desinicialização especializada|
///+ +
int deinit()
{
//


//
return(0); }
//+ +
//| função expert start |
//+
+
int start()
{ // Counter Tick
Tick++;//Tick
// Close BUY Orders
for(i=0;i<OrdersTotal();i++)//initialise loop
{
Print("Kc1:"," Tick=",Tick," i=",i);//enviar mensagem
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Select order i
{
if(OrderSymbol()==Symbol())//Symbol
{
if(OrderMagicNumber()==Mn)//Identification number
{
if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//O tipo de operação do pedido atualmente selecionado
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Closing the position
}/Closed if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
}/Closed if(OrderMagicNumber()==Mn)
}// Fechado if(OrderSymbol()==Symbol()
}// Fechado if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==verdadeiro)
}// Fechado para(i=0;i<OrdensTotal();i++)
//
return(0);
}

Entradas no registro do testador.

2013.03.01 12:12:57 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=1
2013.03.01 12:12:12:57 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=5 i=0
2013.03.01 12:12:33 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=1
2013.03.01 12:12:33 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=4 i=0
2013.03.01 12:12:09 2012.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=1
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #4 comprar 2,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ao preço 1.25770
2013.03.01 12:12:09 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=3 i=0
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=2
2013.03.01 12:11:45 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=1
2013.03.01 12:11:45 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #2 comprar 1.00 EURUSD a 1,25773 sl: 1,25516 tp: 1,26023 ao preço 1,25768
2013.03.01 12:11:45 2012.09.03 00 00:00 Poligon1 EURUSD,M15: Kc1: Tick=2 i=0
2013.03.01 12:11:21 2012.09.03 03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=3
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #5 comprar 3,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ao preço 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=2
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #3 comprar 1,50 EURUSD a 1.25773 sl: 1.25616 tp: 1.25923 ao preço 1.25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=1
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: fechar #1 comprar 0,50 EURUSD a 1,25773 sl: 1,25416 tp: 1,26123 a 1,25766
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc1: Tick=1 i=0
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: Kc0: EncomendasTotal=7
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aberta #7 venda parada 3,00 EURUSD a 1.25473 sl: 1.25916 tp: 1.25023 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: aberto #6 limite de compra 1,00 EURUSD a 1.25623 sl: 1.25366 tp: 1.26023 ok
2013.03.01 12:11:21 2012.09.03 00 00:00 Poligon1 EURUSD,M15: abrir #5 comprar 3,50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #4 comprar 2.50 EURUSD a 1,25773 sl: 1,25616 tp: 1,25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #3 comprar 1,50 EURUSD a 1,25773 sl: 1,25616 tp: 1.25923 ok
2013.03.01 12:11:21 2012.09.03 00:00 Poligon1 EURUSD,M15: abrir #2 comprar 1,00 EURUSD a 1,25773 sl: 1,25516 tp: 1,26023 ok
2013.03.01 12:11:21 2012.09.03 00:00:00 Poligon1 EURUSD,M15: aberto #1 comprar 0,50 EURUSD a 1,25773 sl: 1,25416 tp: 1,26123 ok
2013.03.01 12:11:21 Teste Poligon1 iniciado
2013.03.01 12:11:21 Poligon1 EURUSD,M15: carregado com sucesso

Cumprimentos. Shurkin

Eu não assisti a toda a sua confusão (você tem que usar o botão SRC acima do campo de entrada para anexá-lo) - não é legal riscar todo o código sobre a página, mas a primeira coisa que me chamou a atenção foi uma linha para(i=0; i<OrderTotal() ; i++) . Para fechá-lo, use o laço reverso: for(i=OrdensTotal()-1; i>=0; i -- )
 
Roger:
int x =MathRand() % 2;


Por que devolveria 0 ou 1 em vez de outro número? De acordo com a ajuda,MathRand() retorna um inteiro pseudorandom entre 0 e 32767
 
hoz:

E por que devolveria 0 ou 1 em vez de outro número? Afinal, de acordo comMathRand() retorna um inteiro pseudorandom na faixa de 0 a 32767.

Este é o restante da divisão! Veja nas etapas aritméticas e em sua impressora!

Coloque-o e você verá apenas dois resultados alternados:

  int x =MathRand() % 2;
  Print("x =",x);
 
Saudações a todos! Quero saber como parar o Expert Advisor, quando as condições para entrar no mercado são preenchidas, ele começa a escrever no arquivo de log "Order triggered!" e o faz várias dezenas de vezes por minuto, como resultado, o arquivo de log se torna cosmicamente enorme. Como posso fazê-lo escrever apenas uma vez, e não antes do fechamento da posição, pois pode ficar pendurado por algumas horas...
 
Allis:
Saudações a todos! Quero saber como parar o Expert Advisor, quando as condições para entrar no mercado chegam, ele começa a escrever no arquivo de log "Order triggered!" e o faz algumas dezenas de vezes por minuto, como resultado, o arquivo de log se torna cosmicamente enorme. Como faço para escrever apenas uma vez, e não antes de fechar a posição, pois pode ficar pendurado por algumas horas...
Olá, Allis! A impressão deve ser prescrita, onde não há leitura por carrapatos! Eu coloco na impressão, se houver um erro, e se ela abriu, e assim será escrito na revista que abriu, e apenas uma vez!