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 1134
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
Caros programadores, por favor, ajudem um novato neste negócio.
A EA está abrindo ordens de compra e venda seqüencialmente após um certo período de tempo. Quero que ele modifique todas as ordens anteriores (especificamente, todas as anteriores devem ser fechadas por Take Profit da última. Isto é, se a última ordem de compra e a ordem de venda anterior, então o stop loss da ordem anterior é definido para o nível de take profit da última,
Se a compra anterior for efetuada, então seu TakeProfit será fixado no nível do último TakeProfit. Bem, etc. A questão é que quando chega o takeprofit do último pedido, todos os pedidos devem ser fechados).
Espero ter explicado claramente, embora seja difícil entender como deve ser implementado. Agradecemos antecipadamente.
Entendo que podemos passar por todas as ordens abertas e modificá-las, mas como podemos pular a última?
O mais importante em tudo isso é entender o que deve acontecer.
Qual é a "última encomenda"? Será que é o último a ser aberto? Ou abrindo o nível de preços?
E se considerarmos "a última" encomenda como "COMPRAR", mas o preço vai foder? Ou vice versa, a última encomenda será VENDA, mas o preço vai para o norte? Então qual deles deve ser considerado o último? Isto é o que temos que realizar.
Olá. Se você não sabe antecipadamente quantos elementos estarão na matriz, como você declara a matriz para que a matriz aumente com cada novo elemento?
Um exemplo para torná-lo mais claro:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Olá. Se você não sabe antecipadamente quantos elementos estarão na matriz, como você declara a matriz para que a matriz aumente com cada novo elemento?
Um exemplo para torná-lo mais claro:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Você deve ler a documentação com mais freqüência.
Eu li e tentei, mas recebo um erro de "array fora de alcance". No exemplo, parecia assim:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Eu li e tentei, mas recebo um erro de "array fora de alcance". No exemplo, era o seguinte:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Quando a condição A[i] < B[i] não é cumprida, o tamanho da matriz permanece inalterado e o contador de laço é incrementado. É por isso que está fora de alcance.
Tente desta forma.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Quando a condição A[i] < B[i] não é satisfeita, o tamanho da matriz permanece inalterado e o contador de laço é incrementado. É por isso que está fora dos limites.
Tente desta forma.
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Eu li e tentei, mas recebo um erro de "array fora de alcance". No exemplo, parecia assim:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Bem, isso funcionaria mais rápido
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Bem, funcionará mais rápido dessa forma
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Obrigado, estou vendo! Será mais rápido por causa do tamanho do ArraySize, será que ele o torna mais lento de alguma forma?
Não muito, mas é claro e à prova de erros.