Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 645
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
Assumindo que a última encomenda por tempo não é a última encomenda da lista, o seu exemplo não está correcto, porque não tem em conta a primeira encomenda (#0).
O bilhete da última encomenda no tempo é encontrado primeiro, e depois é feito um ciclo com modificações. Quando um bilhete previamente encontrado da última encomenda é encontrado no laço, ele é ignorado.
Para encontrar o bilhete da última encomenda, não precisamos de pesquisar toda a história de todas as encomendas - podemos definir o tamanho da história pesquisada - um dia, dois, três, uma semana... "E saltar todas as encomendas com o tempo, que é mais cedo do que o intervalo de pesquisa. Por exemplo: o tamanho do histórico de pesquisa é definido para 1 dia - todas as encomendas, que foram anteriores à hora actual - um dia, são ignoradas. Mas ainda precisamos do ciclo. Se aceitarmos apenas a última encomenda da lista, esta pode ser Comprar, e precisamos de Vender. É o último mas único. Assim, não iremos obter os seus dados.
O bilhete da última encomenda no tempo é encontrado primeiro, e depois é feito um ciclo com modificações. Quando um bilhete previamente encontrado da última encomenda é encontrado no laço, ele é ignorado.
Para procurar o bilhete da última encomenda, não precisa de percorrer todo o histórico de todas as encomendas - pode definir o tamanho do histórico procurado - um dia, dois, três, uma semana... "E saltar todas as encomendas com o tempo, que é mais cedo do que o intervalo de pesquisa. Por exemplo: o tamanho do histórico de pesquisa é definido para 1 dia - todas as encomendas, que foram anteriores à hora actual - um dia, são ignoradas. Mas ainda precisamos do ciclo. Se aceitarmos apenas a última encomenda da lista, esta pode ser Comprar, e precisamos de Vender. É o último mas único. Assim, não iremos obter os seus dados.
Artem, obrigado pela explicação, claro, mas sei como encontrar a ordem na lista. E a minha resposta não foi para si, mas para Alexei no seu exemplo (em particular, que a condição "> 0" não vai funcionar).
É melhor escrever da forma correcta (apenas com código). Sou preguiçoso :)
Se supomos que a última encomenda não é a última da lista, o seu exemplo está incorrecto porque não considera a primeira encomenda (encomenda 0).
Como pode não o fazer?
Alexey Viktorov:
Uma variante adicional: Antes do laço, escreva na variável _1 um bilhete, por exemplo, de uma ordem zero, e depois
void OnStart()
{
int i, t1, t2, modTicket , total = OrdersTotal();
datetime d1, d2;
if(OrderSelect(0, SELECT_BY_POS))
{
t1 = OrderTicket();
d1 = OrderOpenTime();
}
for(i = 1; i < total; i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
t2 = OrderTicket();
d2 = OrderOpenTime();
modOrder((d1 < d2) ? t1 : t2);
t1 = d1 < d2 ? t2 : t1;
d1 = d1 < d2 ? t2 : t1;
}
}
}/********************************************************************/
void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Como pode não o fazer?
void OnStart()
{
int i, t1, t2, modTicket , total = OrdersTotal();
datetime d1, d2;
if(OrderSelect(0, SELECT_BY_POS))
{
t1 = OrderTicket();
d1 = OrderOpenTime();
}
for(i = 1; i < total; i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
t2 = OrderTicket();
d2 = OrderOpenTime();
modOrder((d1 < d2) ? t1 : t2);
t1 = d1 < d2 ? t2 : t1;
d1 = d1 < d2 ? t2 : t1;
}
}
}/********************************************************************/
void modOrder(int ticket);
{
// здесь код модификации ордера.
}/********************************************************************/
Se a tomar como variante inicial, serve, mas é melhor fazê-lo a partir do fim... Embora, se não tivermos de eliminar as encomendas, também estaremos bem.
De facto, para modificar várias ordens, é necessário passar por elas em loop. Assim, acontece que os microssegundos adicionais serão gastos apenas na comparação do tempo de abertura da encomenda. Esta será uma variante ideal.
A direcção do ciclo ... Não tem realmente importância porque não se trata de fechar encomendas. Confundi a minha versão anterior e escrevi "fechar", por isso o laço correspondia lá também...
Boa tarde!
Estou a tentar escrever um indicador. Quero obter visualmente o que desejei, mas quero que o indicador envie a informação necessária, por exemplo, informação textual, ou tipo int. Como o posso fazer, tendo em conta que tenho 10 amortecedores, segundo os quais as linhas são desenhadas? Obrigado!
Boa tarde, não me pontapeies, mas encontrei este cabeçalho e decidi fazer algumas perguntas ... Tenho um terminal ... Descarreguei de um corretor MT4 (1) ... fiz a demonstração ... depois de algum tempo registrado em outro, também
Foi-me oferecido para descarregar o terminal ... descarregado (2) como resultado, 2 terminais não vão ... e 1 apareceu perfil 2 corretor ... em geral, todos confusos ... então do binário vem uma carta que passam para MT5 ... instalado e à primeira vista, tudo muito melhor do que o MT4 . A minha pergunta é se é possível abrir uma conta com diferentes corretores num único terminal? e posso transferi-los todos para o mt5 ? e se os indicadores do fato MT4 a 5 ?
obrigado ...
Uma ajuda tão activa, muito obrigado.
Já a debater-se com um novo problema)
Ajude-me por favor a descobrir o facto do novo aparecimento do vértice ZigZag.
Tentei armazenar numa variável o preço do primeiro vértice, depois compará-lo, se o preço mudou levantar uma bandeira, há um novo vértice.{
newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
newZZH1=true;
}
Mas verificou-se que a função, ao longo do tempo, regressa caótica, depois o preço do primeiro vértice, depois o segundo.
Acontece que o novo topo não é formado e a bandeira é hasteada.{
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=1; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
return(0);
}
Uma ajuda tão activa, muito obrigado.
Já a debater-se com um novo problema)
Ajude-me por favor a descobrir o facto do novo aparecimento do vértice ZigZag.
Tentei lembrar numa variável o preço do primeiro vértice, depois comparar, se o preço mudou levantar uma bandeira, há um novo vértice.{
newZZH1_PR=GetExtremumZZPrice(Symbol(),T_F_,1);
newZZH1=true;
}
Mas verificou-se que a função, com o tempo, regressa caótica, depois o preço do primeiro vértice, depois o segundo.
Acontece que não se forma um novo vértice, mas a bandeira é hasteada.{
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=1; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
return(0);
}
O ziguezague tem na realidade três amortecedores - 0 total, 1 - o extremo superior, 2 - o extremo inferior.
Na barra zero, há sempre um valor em alguns dos amortecedores - ou no primeiro (se o joelho estiver para cima) ou no segundo (se estiver para baixo). Consequentemente, o tampão zero na vela actual tem sempre um valor - ou do primeiro tampão ou do segundo.
Bem, para encontrar um extremo superior inequívoco, devemos procurar o primeiro valor não vazio do primeiro tampão, a partir da barra 1. Para o extremo inferior, precisamos de encontrar o primeiro valor não em branco do segundo tampão, a partir da barra 1.
A fim de saber se se trata de um novo topo ou fundo, precisamos de recordar o tempo do topo/plano anterior encontrado, e compará-lo com o que encontrámos até agora.
É divagação, mas esperemos que compreenda...