Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
bool order= 0;
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Sua dupla declaração de bilhete .
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
A declaração de bilhete esconde ... blá blá ? veja eu sou o compilador humano.
Retire o segundo int .
Eu coloquei
ordem de bool e
int ticket
sobre variáveis globais, e o resto do código no OnTick, mas ainda não faz nenhuma entrada agora
Descompilado, não testado
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Marco: Eu removi a int duplicada, mas agora nenhuma troca é feita, eu preciso de 1 troca, se preço> nuvem de ichimoku, esse código primeiro foi ótimo, mas ele continuou a criar novas trocas se
o preço estava acima da nuvem, eu só preciso de ajuda para codificar de forma que o roteiro pare após a 1 negociação.
Honest Knave: eu tentei seu código, acabei de definir magic_no que estava faltando, ele funciona bem, ele espera pelo novo comércio o preço tocar a nuvem novamente, ele será realmente útil para os próximos projetos, mas
só preciso que pare depois do 1º comércio, o que devo fazer?
Obrigado a todos vocês por sua ajuda
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Este é o problema.
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>-1)
{
order=1;
}
}
}
}
Por isso, tente isto e eu lhe apontei alguns postes de volta.
Observe também que a OrderSend ou devolve o número do bilhete, ou -1 menos um, se falhar.
Honest Knave: tentei seu código, acabei de definir magic_no que estava faltando, ele funciona bem, ele espera para um novo comércio se o preço tocar a nuvem novamente, ele será realmente útil para os próximos projetos, mas
só preciso que pare depois do 1 comércio, o que devo fazer?
Obrigado a todos vocês por sua ajuda
Não deveria negociar mais de 1...? Isso é o que isto faz:
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Honest Knave:
Seu EA é ótimo, mas cria novos negócios se o preço cair novamente para a nuvem de ichimoku e depois voltar para cima. Ele não repete as ordens na mesma vela, como o problema que eu tive, e aprenderei muito com esta amostra que você me deu, para criar novos
EA's, mas eu preciso de uma maneira de codificar que após a primeira negociação, a EA ou roteiro fechará imediatamente, então eu só preciso de 1 negociação já feita.
Marco: Eu tentei sua nova atualização, mas ela não faz nenhuma troca, eu coloquei exatamente como você postou por último, apenas removi a segunda int, no bilhete. Mas a primeira troca nunca é feita no testador de estratégia, o que fazer agora?
Honest Knave:
Seu EA é ótimo, mas cria novos negócios se o preço cair novamente para a nuvem de ichimoku e depois voltar para cima. Ele não repete as ordens na mesma vela, como o problema que eu tive, e aprenderei muito com esta amostra que você me deu, para criar novos
EA's, mas eu preciso de uma maneira de codificar que após a primeira negociação, a EA ou roteiro fechará imediatamente, então eu só preciso de 1 negociação já feita.
Eu não entendo o que você quer dizer.
Esse código não pode abrir mais de 1 ordem de cada vez.
Mas se a ordem fechar, e o gatilho acontecer novamente, abrirá outra.
Você quer dizer que você quer que apenas uma ordem seja aberta TUDO?
Eu não entendo o que você quer dizer.
Esse código não pode abrir mais de uma ordem de cada vez.
Mas se a ordem fechar, e o gatilho acontecer novamente, abrirá outra.
Você quer dizer que você quer que apenas uma ordem seja aberta TUDO?