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?
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?
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.
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.
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.