Ajuda na codificação... Como obter um indicador para filtrar em vez de alertar? - página 5
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
Os pedidos estão sendo colocados muito próximos da licitação/venda atual. As ordens precisam estar a uma certa distância do preço atual. Use a função Marketinfo com o parâmetro stop_level para extrair essa informação e ter certeza de que suas ordens estão tão distantes da ordem de compra/venda.
Espero que isto ajude.
Os pedidos estão sendo feitos muito perto da licitação/venda atual. Os pedidos precisam estar a uma certa distância do preço atual. Use a função Marketinfo com o parâmetro stop_level para extrair essa informação e ter certeza de que suas ordens estão tão longe do ask/bid.torcemos que isso ajude.
ummm....
desculpe, mas você me perdeu lá...
não posso simplesmente colocar uma ordem no nível "atual"? a maior parte do que fiz até agora foi executar ordens no final do período. Isto pode ser feito?
Vou ter que aprender quais são primeiro o parâmetro de nível de parada e as funções de informação de mercado.
obrigado pela direção
pois o que quer que valha a pena aqui é a atualização que fiz sobre o indicador de faixas de tendência, isso foi meio divertido
ok, aqui está...
Identificadores deinformações de mercado, utilizados com a função MarketInfo().
Pode ser qualquer um dos seguintes valores:
MODE_STOPLEVEL 14 Nível de parada em pontos.
portanto, presumo que seja...
MarketInfo(14)
onde colocá-lo?
ou é que...
MarketInfo(NULL,MODE_STOPLEVEL);
ou...
double bid =MarketInfo(NULL,MODE_BID);
double ask =MarketInfo(NULL,MODE_ASK);
double point =MarketInfo(NULL,MODE_POINT);
Acho que não entendo bem como usar isto... você pode me mostrar um exemplo?
aqui está o que estou trabalhando neste caso... Pergunto-me por que esta EA não teve problemas para fazer pedidos antes e agora tem? Funcionou antes de eu adicionar o filtro????
double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);
double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);
// ENTRY
if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)
{
double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position
if(isCrossed == 1 && Ask < upLevel)
{
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
else
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
//###################################################################### the added code starts here
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
else
ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
//###################################################################### ends here
return(0);
}
if(isCrossed == 2 && Ask > LowLevel)
{
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
else
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
//###################################################################### the added code starts here
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
else
ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
//###################################################################### ends here
return(0);
}
return(0);
}
return(0);
}
return(0);
}
}
//+------------------------------------------------------------------+Você deve usar MarketInfo(NULL,MODE_STOPLEVEL) para determinar a que distância suas ordens stop devem estar localizadas do preço atual. Lembre-se, ele retornará seu valor em pips.
No entanto, você pode converter em Pontos usando algo como isto:
double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Ponto, Dígitos);
Agora certifique-se de que suas ordens stop estejam pelo menos tão longe do preço atual do mercado. A propósito, usando o NormalizeDouble e os Dígitos, você está convertendo o valor do pip para as casas apropriadas após o decimal (4 ou 2). Isso é uma coisa muito agradável no MT4.
Espero que isto ajude.
Maji
Você deve usar MarketInfo(NULL,MODE_STOPLEVEL) para determinar até que ponto suas ordens de stop devem ser localizadas em relação ao preço atual. Lembre-se, ele retornará seu valor em pips.
Entretanto, você pode se converter em Pontos usando algo como isto:
double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Ponto, Dígitos);
Agora certifique-se de que suas ordens stop estejam pelo menos tão longe do preço atual do mercado. A propósito, usando o NormalizeDouble e os Dígitos, você está convertendo o valor do pip para as casas apropriadas após o decimal (4 ou 2). Isso é uma coisa muito agradável no MT4.
Espero que isto ajude.
MajiO que eu não entendo é por que adicionar o indicador como um filtro estragou a maneira como ele está fazendo pedidos ou parando. Não mudou nada disso até onde eu posso dizer, então por que a proibição de negociações acima da linha muda a maneira como ele coloca as ordens de parada?
Se você não se importa, envie-me o código atual por e-mail. Vou tentar dar uma olhada durante o fim de semana. Não posso prometer que vou consertá-lo, mas vou dar uma olhada honesta e tentar.
aqui está o seu problema que você deve procurar primeiro
Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points
the corrected code is like that
[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)bem, por uma vez é uma solução fácil...
apenas...
... a coisa é que eu mudei desde que fiz aquele posto. ... modifiquei o indicador com um parâmetro para tornar as faixas mais largas ou mais estreitas e retirei a parte da EA que fazia um limite de proximidade com a linha. Pensei que se eu pudesse apenas tornar as próprias bandas comerciais estreitas ou largas que dariam a mesma função sem serem tão complexas, e para mim era mais fácil manter o controle mental de....so...
atualmente é assim...
double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);
double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);
// ENTRY
if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)
{
double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position
if(isCrossed == 1 && Ask < upLevel)
{
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);
elseambos perguntam e uplevel estão ambos em preço, não estão? este é o código que ainda está gerando o erro... deve estar mais em curso...
até agora não vejo nenhum problema (orientado por código)
Mas, logicamente, olhe para isto
if(isCrossed == 1 && Ask < upLevel)
Você não está verificando se eles estão próximos, apenas se o preço é mais baixo do que a linha
Eu sabia que o tinha!!!
Eu testei exatamente o que você queria obter, e meu posto de previuos eu apenas coloquei o EA errado.
Este EA pode checar até 4 TF para verificar se todos eles conseguem a vantagem ao mesmo tempo. U pode selecionar apenas um, se você quiser.
U pode usá-lo como um exemplo de como tirar a lógica de um indicador, e como combinar várias TF juntas
cumprimentos
Eli
Eu sabia que o tinha!!!
Eu testei exatamente o que você queria obter, e meu posto previuoso eu apenas coloquei a EA errada.
Este EA pode verificar até 4 TF para verificar se todos eles conseguem a vantagem ao mesmo tempo. U pode selecionar apenas um, se você quiser.
U pode usá-lo como um exemplo de como tirar a lógica de um indicador, e como combinar várias TF juntas
cumprimentos
Eliisto é intrigante Ainda não expus realmente os indicadores multi TF, mas acredito que há mérito para eles.