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
Sou novo no mq4 e estou tentando criar uma exibição na tela quando há um crossover para MACD. Abaixo está meu código, mas os alertas continuam aparecendo a cada poucos minutos.
Como posso codificá-lo para exibir alertas apenas uma vez a cada hora? Ou um alerta por barra?
int start()
{
Cordel MACD1="";
color colt9;
duplo MACDM_S10 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_MAIN, 0);
duplo MACDS_S10 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_SIGNAL,0);
duplo MACDM_S11 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_MAIN, 1);
duplo MACDS_S11 = iCustom(NULL, PERÍODO_H1, "MACD", 8,17,9, MODE_SIGNAL,1);
if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND"; colt9=LimeGreen; }
if ((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="IN DOWNTREND"; colt9=Red; }
if ((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="NEW UP CROSSING"; colt9=LimeGreen; }
if ((MACDM_S11 MACDS_S10)) { MACD1="NEW DOWN CROSSING"; colt9=Red; }
MACD2="";
color colt14;
duplo MACDM_L10 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_MAIN, 0);
duplo MACDS_L10 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_SIGNAL,0);
duplo MACDM_L11 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_MAIN, 1);
duplo MACDS_L11 = iCustom(NULL, PERÍODO_H1, "MACD", 12,26,9, MODE_SIGNAL,1);
if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND"; colt14=LimeGreen; }
if ((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="IN DOWNTREND"; colt14=Red; }
if ((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="NEW UP CROSSING"; colt14=LimeGreen; }
if ((MACDM_L11 MACDS_L10)) { MACD2="NEW DOWN CROSSING"; colt14=Red; }
if(MACD1=="NEW UP CROSSING"&&MACD2=="IN UPTREND")
Alert(Symbol()," - ", "H1:"," MACD MAIN UPTREND MOVEMENT"," em ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));
if(MACD1=="NEW DOWN CROSSING"&&MACD2=="IN DOWNTREND")
Alert(Symbol()," - ", "H1:"," MACD MAIN DOWNTREND MOVEMENT"," em ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));
if(MACD2=="NEW UP CROSSING"&&MACD1=="IN UPTREND")
Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO UPTREND"," em ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));
if(MACD2=="NEW DOWN CROSSING"&&MACD1=="IN DOWNTREND")
Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO DOWNTREND"," em ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));
return(0);
}Tente UTILIZAR Minuto()==1; em condição
Tendência Alexcud para modificar
if (MaH11v < MaH1pr1v){H11v = " V "; co11v = Vermelho; u1x5v = 0; d1x5v = 1;}
if (MaH11v > MaH1pr1v){H11v = " /\v "; co11v = Azul; u1x5v = 1; d1x5v = 0;}
if (MaH11v == MaH1pr1v){H11v = " 0 "; co11v = Verde; u1x5v = 0; d1x5v = 0;}
hy everyone, estou tentando modificar a tendência alexcud(attached)
quero apenas 2 sinais para cima e para baixo em vez de 3 com "0".
para que os cálculos possam ser mais precisos...
Alguma idéia ?
Alguém pode me ajudar a entender estas linhas de programação? Em inglês simples
Trata-se de uma EA começando algo depois que um bar tiver terminado.
O código é assim :
datetime timeprev=0;
// Só funciona uma vez por barra completada
if(timeprev==Tempo[0]) retorno(0);
timeprev==Tempo[0];
Ao ver o manual do MQ4, Time[0] é para extrair o tempo aberto da barra [0]. É indicado como segundos a partir de 1 de janeiro de 1970.
Eu não entendo como isso funciona. Primeiro temos "timeprev=0".
Depois a próxima linha "se (timeprev==Time[0]) retornar(0).
Qual é o valor de Time[0] neste momento? Como pode tornar-se 0 (o valor de "timeprev"?
A próxima linha é "timeprev=Time[0]".
Como a linha inteira faz com que a EA não faça nada até que uma barra tenha terminado?
Tente usar o Minuto()==1; em condição
Isto ainda irá desencadear cada tique no primeiro minuto de cada barra. Isso pode reduzir significativamente o número, mas ainda assim alertará várias vezes.
A melhor coisa a fazer é definir uma variável global (ou objeto) e configurá-la para o Tempo[] da última barra.
if (Time[0]!=lastTime) {
... alert, whatever...
lastTime=Time[0];
}
Hi,
Eu não posso evitar o erro OrderModify 1 : sempre aparece mesmo tentando controlar que os dados antes de modificar são diferentes ! Tentei também duplicar a duplicação de dados...não estou trabalhando...
Este é o código:
if (Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)
{
se (OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VPoint)
{
Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,Green);
Alguma sugestão ?
Obrigado.Verificação rápida... certifique-se de não estar definindo a distância de breakeven muito curta. Compare-a com MarketInfo(Symbol(),MODE_STOPLEVEL) para ter certeza de que é suficientemente grande.
Qual é a finalidade do VPoint? Se esse número estiver errado, vai estragar as coisas. O "Ponto" por si só sempre estará correto. Se esse número estiver errado, isso definitivamente pode estar causando o problema. IE é acidentalmente 0 ou menos do que o "POINT" na verdade é.
SIMPLES questão de codificação
OrderSelect(5555, SELECT_BY_TICKET);
RefreshRates();
se (Perguntar >= (OrderOpenPrice()+ (5 * Ponto)) && OrderLots() == 2 && (OrderType() == OP_BUY)) {
OrderClose(5555,1,Ask,10,Red); }
if (Bid <= (OrderOpenPrice()- (5 * Ponto)) && OrderLots() == 2 && (OrderType() == OP_SELLL)) {
OrderClose(5555,1,Bid,10,Blue); }
Ainda tentando aprender...
este trabalho de basicamente fechar metade (2 lotes para 1) de uma posição quando o preço atinge 5 pips de distância do preço aberto?
AGRADECIMENTO!!!!!!
Parece certo. Mas é um pouco confuso. Você também poderia usar OrderProfit, dependendo do que você realmente quer alcançar.
Lux
PS: Esqueci de mencionar os corretores de 5 casas decimais. Tudo precisa ser multiplicado por 10 para que em seu exemplo 5 sejam 50. Boa sorte!
Parece certo. Mas é um pouco confuso. Você também poderia usar OrderProfit, dependendo do que você realmente quer alcançar.
Lux
PS: Esqueci de mencionar para ter cuidado com os corretores de 5 casas decimais. Tudo precisa ser multiplicado por 10 para que em seu exemplo 5 sejam 50. Boa sorte!Obrigado LUX
O problema é que eu o tenho funcionando apenas para depurar em um gráfico de 1 minuto GBP/USD com Windsor direto e ele não está fechando 1 lote quando atinge os 5 pips então eu não sei qual é o negócio.
TAMBÉM,
Estou tentando fechar uma compra e imediatamente abrir uma VENDA e QUE "TAMBÉM NÃO VAI BEM".
Funciona e depois não...
DESEJO QUE ESTE TERÁ sido MUITO mais fácil de programar
se (*******************) {
RefreshRates();
OrderSelect(5555,SELECT_BY_TICKET);
se (OrderTotal() > 0 && OrderType()==OP_BUY) {OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");}
Sleep(1500);
RefreshRates();
se (OrdensTotal() ==0) Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket<0)Print("OrderSend failed with error #",GetLastError());
}
Indicadores de depuração
Eu sou novo nesta língua e estou tentando escrever um indicador. Estou tendo problemas, já que não há um depurador. Eu tentei usar o Print() mas nada é impresso. Usando o Alerta() recebo ZERO como saída para o buffer[1] . Alguém pode me explicar isto, por favor? Como posso usar a Print() e Alert() para depuração sem obter todos os ZEROs. Se alguém tiver alguma idéia, por favor, me avise. Muito obrigado.
tigger.longtail@gmail.com
ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i);
ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i);
Barra de Corrente = Tempo;
if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Tempo && Bandeira == 0)
{
Alerta("ExtMapBuffer1 =", ExtMapBuffer1," Abreviação está Acima. ",Hora()"," Minuto ",Minuto()));
Alert("ExtMapBuffer2 ="," ExtMapBuffer2," Abreviação está Acima. ",Hora()"," Minuto ",Minuto()));
Imprimir("ExtMapBuffer1 = ", ExtMapBuffer1);
Imprimir("ExtMapBuffer2 = ", ExtMapBuffer2);
de jeito nenhum.