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
...
Sim, você pode
A única limitação é que você não se depara com uma "chamada circular" quando esta terminaria com um ciclo morto. Fora isso, nenhuma outra limitação para chamadas de função
Bem visto. Vou dar uma olhada nisso.
Uma pergunta sobre funções, é possível chamar uma função dentro de uma função? Por exemplo, eu tenho esta função:
string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
{
se (... etc...)
Do que mais tarde eu o chamo:
duplo GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)Introduzi este código para recuperar a última ordem aberta:
//--- Função para calcular o número do bilhete da última ordem aberta
na LastOpenTicket()
{
data/hora últimaTempo = 0;
últimoTicket = -1; // Nenhum aberto.
int pos;
para (pos = OrderTotal() - 1; pos >= 0; pos--)
se (OrderSelect(pos, SELECT_BY_POS) // Somente meus pedidos c/
&& OrderMagicNumber() == MagicNumber // meu número mágico
&& OrderSymbol() == Symbol() // e meu par.
&& OrderOpenTime() > lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
retorno (lastTicket);
}
É uma função que é chamada a partir de minha função GetLots - o compilador está livre de erros, mas quando eu faço um backtest, a seção de resultados é completamente clara. Não há trocas. Isto se deve ao fato de que a primeira operação não tem nenhuma operação anterior a ser chamada no código acima?
No diário, ele consegue carregar as variáveis externas (das quais carrega o mágico número 42, mas no meu código seu 42552...?) mas nada depois disso.
...
Qual é a declaração de seu número mágico ( deve ser int MagicNumber; )
Introduzi este código para recuperar a última ordem aberta:
//--- Função para calcular o número do bilhete do último pedido aberto
na LastOpenTicket()
{
data/hora últimaTempo = 0;
últimoTicket = -1; // Nenhum aberto.
int pos;
para (pos = OrderTotal() - 1; pos >= 0; pos--)
se (OrderSelect(pos, SELECT_BY_POS) // Somente meus pedidos c/
&& OrderMagicNumber() == MagicNumber // meu número mágico
&& OrderSymbol() == Symbol() // e meu par.
&& OrderOpenTime() > lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
retorno (lastTicket);
}
É uma função que é chamada a partir de minha função GetLots - o compilador está livre de erros, mas quando eu faço um backtest, a seção de resultados é completamente clara. Não há trocas. Isto se deve ao fato de que a primeira operação não tem nenhuma operação anterior a ser chamada no código acima?
No diário, ele carrega as variáveis externas (das quais carrega o mágico número 42, mas em meu código é 42552...?) mas depois nada mais.Sim, é int MagicNumber = 42557
...
Então eu não posso dizer pelo código que você postou porque ele está fazendo errado (porque ele está recebendo o MagicNumber errado, por exemplo). O código deve funcionar se houver alguma ordem aberta com o MagicNumber especificado (ele vai fazer loop através de ordens abertas) Se não houver nenhuma ordem aberta ou os números e símbolos MagicNumbers não corresponderem, ele retornará -1 (como você espera) para que o código esteja correto (teste-o agora, e ele funciona como deveria)
Desculpe, mas como tudo o que posso fazer a partir do código que você postou
Sim, é int MagicNumber = 42557
O que aconteceria no caso de não ter sido aberta nenhuma ordem anterior e esta é a primeira? Eu sei que ele retorna -1 mas o código EA não funcionaria porque minha função GetLots depende de chamar o número do último pedido aberto.
Se depender da existência de pelo menos uma ordem previamente aberta, então ela falhará
Acrescente algo como isto em seu estado :
se (LastOpenOrder()==-1)
... então você pode abrir a ordem se todas as demais condições forem atendidas
senão
... verificar a última ordem aberta como antes mais o resto das condições
(apenas fazendo um jogo de adivinhação selvagem como você escreveu suas condições EA agora)
O que aconteceria no caso de não ter sido aberta nenhuma ordem anterior e esta é a primeira? Eu sei que ele retorna -1 mas o código EA não funcionaria porque minha função GetLots depende de chamar o número do último pedido aberto.
Olá, Mladen,
Você sabe como definir o comércio aberto quando a linha estocástica atravessa o nível 20 ou 80?
Por exemplo
Quando a linha estocástica se cruza no nível 20 (sobre-vendido), Longo
Quando o estocástico se cruza no nível 80 (em excesso), Short
Cumprimentos
Ryan
Eu acrescentei algumas linhas a este código - é o que usa a função LastOpenTicket() mas ainda não gosta dele. Eu acrescentei a opção -1. Alguma coisa parece errada para você aqui?
//--- 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);
}
}
}
...
Por que você não adiciona mais um resultado possível dessa função: algo como quando LastOpenTicket() == -1 então WinLossPreviousShort="Na"
Eu acrescentei algumas linhas a este código - é o que usa a função LastOpenTicket() mas ainda não gosta dele. Eu acrescentei a opção -1. Alguma coisa parece errada para você aqui?
//--- 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);
}
}
}