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
Existe uma chance de adicionar opções para escolher?
Por exemplo,
Separadamente, compra e venda separadamente
Modificação: BE todos comprar 0, ou +1, ou +2 pips ou vender todos BE 0, 1 ou 2 pips?
É possível?
be.mq4
Olá Mladen ,
Qualquer pessoa pode me dizer o que estou fazendo de errado, na maioria das vezes eu escrevo meu FX Gen com trechos e códigos usando exemplos do compilador mq4 e fóruns online.
vazio OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Nenhum aberto.
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
se (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Pergunte - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
retorno(lastTicket);
}
senão
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
Você pode dar uma olhada neste código, tentando apagar o pedido mais antigo primeiro usando data e bilhete de pedido, por exemplo, se o pedido aberto >2 apagar o pedido mais antigo.
//-------------------------------------------------------------
// Etasoft Inc. // Etasoft Inc. // Etasoft Inc. Forex EA e Script Generator versão 4.1 EA
//-------------------------------------------------------------
// Palavras-chave: MT4, construtor de EA Forex, criar EA, desenvolvedor consultor especialista
#direitos autorais "Copyright © 2011, Etasoft Inc.". Gerador de EA Forex v4.1"
#link de propriedade
#incluir
#incluir
// variáveis exportadas
ordem interna externaId = 1;
extern int Slippage = 2;
duplo Lotes externos = 0,01;
MaxOrdersAllowed = 2;// op compra e op venda permitidos
Grelha interna externa = 10; // distância total em pips para abrir pedidos
fio externo EAComment = "564 testes";
// variáveis locais
valor duplo PipValue=1; // esta variável está aqui para suportar corretores de 5 dígitos
bool Terminado = falso;
string LF = "\n"; // use isto em blocos personalizados ou utilitários onde você precisa de linhas de alimentação
int NDigits = 4; // usado principalmente para NormalizeDouble em blocos tipo Flex
int ObjCount = 0; // contagem de todos os objetos criados no gráfico, permite a criação de objetos com nomes únicos
corrente int = 0;
int init()
{
NDígitos = Dígitos;
se (falso) ObjetosDeleteAll(); // limpar o gráfico
Comentário(""); // limpar o gráfico
}
// Início especializado
int start()
{
se (Barras < 10)
{
Comentário ("Não há barras suficientes");
retornar (0);
}
se (Encerrado == verdadeiro)
{
Comentário ("EA Terminado");
retorno (0);
}
OnEveryTick1();
}
vazio OnEveryTick1()
{
se (verdadeiro == falso && falso) PipValue = 10;
if (verdadeiro && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MaximumOrder();
}
nulo seOrdemNãoExist2()
{
bool existe = falso;
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = verdadeiro;
}
}
senão
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
se (existe == falso)
{
BuyPendingOrder();
}
}
nulo seOrdemNãoExist4()
{
bool existe = falso;
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = verdadeiro;
}
}
senão
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
se (existe == falso)
{
SellPendingOrder();
}
}
BuyPendingOrder() nulo
{
int expira = TimeCurrent() + 60 * 0;
preço duplo = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
duplo SL = preço - 0*PipValor*Ponto;
se (0 == 0) SL = 0;
duplo TP = preço + 0*PipValor*Ponto;
se (0 == 0) TP = 0;
se (0 == 0) expirar = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
se (bilhete == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
VENDEDORPENDENTE()
{
int expira = TimeCurrent() + 60 * 0;
preço duplo = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
duplo SL = preço + 0*PipValor*Ponto;
se (0 == 0) SL = 0;
duplo TP = preço - 0*PipValue*Ponto;
se (0 == 0) TP = 0;
se (0 == 0) expirar = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
se (bilhete == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
nulo MaximumOrder()
{
se (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
Contagem de pedidos nulos()
{
int count = 0;
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
se (OrderSymbol() == Symbol())
se (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
contar++;
}
}
senão
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
se (contar > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
data/hora últimaTempo = 0;
últimoTicket = -1; // Nenhum aberto.
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
se (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
retorno(lastTicket);
}
senão
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
int deinit()
{
se (falso) ObjetosDeleteAll();
}
Olá Mladen ,
Qualquer pessoa pode me dizer o que estou fazendo de errado, na maioria das vezes eu escrevo meu FX Gen com trechos e códigos usando exemplos do compilador mq4 e fóruns online.
vazio OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Nenhum aberto.
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
se (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Pergunte - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
retorno(lastTicket);
}
senão
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
Você pode dar uma olhada neste código, tentando apagar o pedido mais antigo primeiro usando data e bilhete de pedido, por exemplo, se o pedido aberto >2 apagar o pedido mais antigo.
//-------------------------------------------------------------
// Etasoft Inc. // Etasoft Inc. // Etasoft Inc. Forex EA e Script Generator versão 4.1 EA
//-------------------------------------------------------------
// Palavras-chave: MT4, construtor de EA Forex, criar EA, desenvolvedor consultor especialista
#direitos autorais "Copyright © 2011, Etasoft Inc.". Gerador de EA Forex v4.1"
#link de propriedade
#incluir
#incluir
// variáveis exportadas
ordem interna externaId = 1;
extern int Slippage = 2;
duplo Lotes externos = 0,01;
MaxOrdersAllowed = 2;// op compra e op venda permitidos
Grelha interna externa = 10; // distância total em pips para abrir pedidos
fio externo EAComment = "564 testes";
// variáveis locais
valor duplo PipValue=1; // esta variável está aqui para suportar corretores de 5 dígitos
bool Terminado = falso;
string LF = "\n"; // use isto em blocos personalizados ou utilitários onde você precisa de linhas de alimentação
int NDigits = 4; // usado principalmente para NormalizeDouble em blocos tipo Flex
int ObjCount = 0; // contagem de todos os objetos criados no gráfico, permite a criação de objetos com nomes únicos
corrente int = 0;
int init()
{
NDígitos = Dígitos;
se (falso) ObjetosDeleteAll(); // limpar o gráfico
Comentário(""); // limpar o gráfico
}
// Início especializado
int start()
{
se (Barras < 10)
{
Comentário ("Não há barras suficientes");
retornar (0);
}
se (Encerrado == verdadeiro)
{
Comentário ("EA Terminado");
retorno (0);
}
OnEveryTick1();
}
vazio OnEveryTick1()
{
se (verdadeiro == falso && falso) PipValue = 10;
if (verdadeiro && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MaximumOrder();
}
nulo seOrdemNãoExist2()
{
bool existe = falso;
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = verdadeiro;
}
}
senão
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
se (existe == falso)
{
BuyPendingOrder();
}
}
nulo seOrdemNãoExist4()
{
bool existe = falso;
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
existe = verdadeiro;
}
}
senão
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
se (existe == falso)
{
SellPendingOrder();
}
}
BuyPendingOrder() nulo
{
int expira = TimeCurrent() + 60 * 0;
preço duplo = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
duplo SL = preço - 0*PipValor*Ponto;
se (0 == 0) SL = 0;
duplo TP = preço + 0*PipValor*Ponto;
se (0 == 0) TP = 0;
se (0 == 0) expirar = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
se (bilhete == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
VENDEDORPENDENTE()
{
int expira = TimeCurrent() + 60 * 0;
preço duplo = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
duplo SL = preço + 0*PipValor*Ponto;
se (0 == 0) SL = 0;
duplo TP = preço - 0*PipValue*Ponto;
se (0 == 0) TP = 0;
se (0 == 0) expirar = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);
se (bilhete == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
nulo MaximumOrder()
{
se (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
Contagem de pedidos nulos()
{
int count = 0;
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
se (OrderSymbol() == Symbol())
se (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
contar++;
}
}
senão
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
se (contar > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
data/hora últimaTempo = 0;
últimoTicket = -1; // Nenhum aberto.
para (int i=OrdensTotal()-1; i >= 0; i--)
se (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
se (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
retorno(lastTicket);
}
senão
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}
int deinit()
{
se (falso) ObjetosDeleteAll();
}
Tente usar uma função como esta :
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}Obrigado Mladen
funcionou sem falhas, btw peço desculpas por postar uma peça de código tão longa no fórum. Ainda estou me acostumando com a interface. Obrigado.
O indicador não se atualiza automaticamente.
Aqui eu tenho um indicador que é muito bem adequado para a minha negociação.
Infelizmente, ele não se atualiza por si só. Devo sempre atualizá-lo manualmente para que ele seja renovado.
Existe uma maneira de resolver este problema?
Seria muito útil!!
Obrigado de antemão.
P.S.: Anexei tudo o que tenho.
Ele quer a notificação sms. Como fica o código ?
Ele quer a notificação sms. Como fica o código ?
popej30
Faça assim :
SendNotification("mensagem de notificação que você deseja enviar");
E onde você insere seu número de telefone ? Meu número 0039 555-23-45. Onde entrar ?
Exemplo:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}E onde você insere seu número de telefone ? Meu número 0039 555-23-45. Onde entrar ?
Exemplo:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Aqui está uma boa explicação de como você pode fazer isso :
O indicador não se atualiza automaticamente.
Aqui eu tenho um indicador que é muito bem adequado para a minha negociação.
Infelizmente, ele não se atualiza por si só. Devo sempre atualizá-lo manualmente para que ele seja renovado.
Existe uma maneira de resolver este problema?
Seria muito útil!!
Obrigado de antemão.
P.S.: Anexei tudo o que tenho.Jim
Em vez de reescrever tudo isso, foi adicionado um limite para calcular as barras e então todas essas barras são recalculadas. Isso deve resolver o problema refrescante (os tomates mantêm o BarsTocalculate em algum valor razoável - não muito grande nem muito pequeno. Eu usei 1000 como padrão e parece estar tudo bem assim). Experimente-o