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
outras perguntas de iniciantes
Olá, sou novo na programação, mas não sou novo no comércio. Eu não postei nada por um tempo e agora, desde que comecei a desenvolver minha EA, tenho muitas perguntas. Comecei a construir um indicador primeiro, e uma vez que ele faça o que eu quero, irei mais longe. Li todos os manuais que pude encontrar, então agora é hora de seguir em frente com a codificação.
Desculpe, se for um tópico errado - por favor, me avise onde devo postar tais perguntas então.
Tenho 2 perguntas básicas, provavelmente, por enquanto, por favor:
1. Em muitos indicadores que usam MAs eu vejo linhas verificando quantas barras estão no gráfico. Então, se eu precisar do MA200 e o gráfico tiver, digamos, apenas 100 barras, o iMA200 funcionaria então? Eu acho que sim - eu verifiquei e qualquer MA é desenhado sem qualquer problema em qualquer gráfico, então eu acho que este é um erro antigo que Metaquotes corrigido agora. Então, há algum ponto de verificar quantas barras há no gráfico para desenhar MA ou usar a função iMA?
2. Qual é a diferença entre Close e iClose? Meu entendimento é que Close pode retornar um fechamento das barras somente no gráfico atual, e iClose pode retornar qualquer fechamento de qualquer par de moedas e qualquer período de tempo. E em ambos os casos, a fim de obter uma última barra fechada, tenho que usar índice [1]. Estou vendo isso corretamente?
Obrigado.
Eu já fiz isso. Veja o vermelho destacado abaixo:
//--- Deterime se a ordem de venda anterior é rentável
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
se (OrderProfit() >= 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
retornar (WinLossPreviousShort);
}
se ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)
{
WinLossPreviousShort = "L";
retornar (WinLossPreviousShort);
}
}
}
Ainda completamente em branco.
Coçando minha cabeça. Sei que sua ajuda é limitada porque não colei o código, mas o código acima lhe parece bem?
Também com a primeira linha abaixo, preciso fazer referência ao LastOpenTicket com () depois?
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
...
Se você estiver chamando essa função com o número do último bilhete aberto como argumento, então o código após a linha azul nunca será executado (o OrderSelect() falha se o número do LastOpenTicket for -1 (que nesse momento é equivalente ao resultado da função LastOpenTicket()), e o código não conseguir executar o bloco após a linha azul)
Eu já fiz isso. Veja o vermelho destacado abaixo:
//--- Deterime se a ordem de venda anterior é lucrativa
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
se (OrderProfit() >= 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
retornar (WinLossPreviousShort);
}
se ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)
{
WinLossPreviousShort = "L";
retornar (WinLossPreviousShort);
}
}
}
Ainda completamente em branco.
Coçando minha cabeça. Sei que sua ajuda é limitada porque não colei o código, mas o código acima lhe parece bem?
Também com a primeira linha abaixo, preciso fazer referência ao LastOpenTicket com () depois?
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)Não tenho certeza se estou entendendo.
se ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)
Portanto, como estou chamando a função LastOpenTicket() na linha acima, o resto dessa função não é executada e a OrderSelect() falha. Estou seguindo você certo?
...
Vamos supor o seguinte :
OrderSelect() falha uma vez que o bilhete de pedido -1 não existe e nenhum dos códigos por trás do pedido selecionado é executado. Mesmo quando a LastOpenTicket é > -1, a "condição da linha azul" que LastOpenTicket() == -1 nunca pode ser verdadeira, pois a única maneira de chegar a essa parte do código é quando a LastOpenTicket é > -1
É por isso que sugeri o "3º estado : o "Na", já que de fato você tem 3 estados por causa do estado inicial "sem ordens anteriores".
Não tenho certeza se estou entendendo.
se ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)
Então porque estou chamando a função LastOpenTicket() na linha acima, o resto dessa função não é executada e a OrderSelect() falha. Estou seguindo você certo?algumas questões de codificação, provavelmente de iniciantes
Olá, sou novo na programação, mas não sou novo no comércio. Estou construindo minha EA, mas comecei a construir primeiro um indicador, e uma vez que ele faça o que eu quero, irei mais longe. Li todos os manuais que pude encontrar e agora estou codificando-o.
Agradecia qualquer conselho - todos vocês começaram onde estou agora...
Tenho 2 perguntas básicas, provavelmente, por enquanto, por favor:
1. Em alguns indicadores que usam MAs vejo linhas que verificam quantas barras estão no gráfico. Então, se eu precisar do MA200 e o gráfico tiver, digamos, apenas 100 barras, o iMA200 funcionaria então? Eu acho que sim - eu verifiquei e qualquer MA é desenhado sem problemas em qualquer gráfico, então eu acho que este é um problema antigo que as Metaquotas corrigiram agora. Então, há algum ponto de verificar quantas barras há no gráfico para desenhar MA ou usar a função iMA?
2. Qual é a diferença entre Close e iClose? Meu entendimento é que Close pode retornar um fechamento das barras somente no gráfico atual, e iClose pode retornar qualquer fechamento de qualquer par de moedas e qualquer período de tempo. E em ambos os casos, a fim de obter uma última barra fechada, tenho que usar índice [1]. Isso é correto?
Obrigado.
Assim?
//--- Deterime se a ordem de venda anterior é lucrativa
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
se (OrderProfit() >= 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
retornar (WinLossPreviousShort);
}
if (OrderProfit() < 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "L";
retornar (WinLossPreviousShort);
}
se (LastOpenTicket() == -1)
{
WinLossPreviousShort = "NA";
retornar (WinLossPreviousShort);
}
}
}
OU ESTE? muda em vermelho.
//--- Deterime se a ordem de venda anterior é rentável
string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
se (OrderProfit() >= 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
retornar (WinLossPreviousShort);
}
if (OrderProfit() < 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "L";
retornar (WinLossPreviousShort);
}
se (LastTicket == -1)
{
WinLossPreviousShort = "NA";
retornar (WinLossPreviousShort);
}
}
}
ah seu clique final, eu não posso usar OrderSelect em um número de bilhete que é -1 porque -1 não existe. Os bilhetes vão de 0 para cima.
Eu preciso declarar LastOpenTicket fora da função OrderSend, certo?
...
Tente assim ..:
{
if (LastTicket == -1)
{
WinLossPreviousShort = "NA";
return (WinLossPreviousShort);
}
//
//
// if LastTicket == -1 no need even to try to execute the code bellow
// you already have exited for case when it is -1, so the code bellow
// will be executed properly
//
//
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
if (OrderProfit() >= 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
return (WinLossPreviousShort);
}
if (OrderProfit() < 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "L";
return (WinLossPreviousShort);
}
}Graças mladen, o código abaixo equivale basicamente ao mesmo que o seu? Eu digitei isto como você postou seu último! :-)
EDITED-
//--- Deterime se a ordem de venda anterior é lucrativa
string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
se (OrderProfit() >= 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
retornar (WinLossPreviousShort);
}
if (OrderProfit() < 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "L";
retornar (WinLossPreviousShort);
}
}
se (LastTicket == -1)
{
WinLossPreviousShort = "NA";
retornar (WinLossPreviousShort);
}
}