Tenho a sensação de que perdemos um pouco de controle sobre o código....
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
Não, este não é com certeza o lugar certo.
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
Este "tratamento de erros" não melhora nada. Verifique novamente.
Desculpe, mas ontem houve um problema na internet (mql4.com deixou de funcionar). Eu estava tentando corrigir algo e ... colapso
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA1 2000// blue starategy#define MAGICMA2 2001// red strategy//+------------------------------------------------------------------+//| Check NEW BAR |//+------------------------------------------------------------------+bool New_Bar = false;
bool Fun_New_Bar() // bool
{
staticdatetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
//+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS is open |//+------------------------------------------------------------------+//--- FOR BLUE---------------------------------------------------------int OpenOrders_BULL4(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) // magic ma 1 ( is ==)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//--- FOR RED--------------------------------------------------------------int OpenOrders_BULL6(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA2) // magic ma 2 ( is ==)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//+------------------------------------------------------------------+//| Condition candle |//+------------------------------------------------------------------+bool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
return(true);
}
bool BULL6()
{
if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
return(true);
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+//--------------------------- blue bull4 magicma1 void OpenBULL41()
{
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
return(true);
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL42()
{
int result;
for(int i=1;i<=OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) // magic ma 1 ( is ==)
{
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
}
}
//--------------------------- red bull6 magicma2 void OpenBULL61()
{
int result;
if(Bid==Close[1]+3*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL62()
{
int result;
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
void OpenBULL63()
{
int result;
if(Ask>OrderOpenPrice()+2*Point)
{
result=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
return;
}
if (result == -1)
{
int e = GetLastError();
Print(e);
}
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+void CheckForClose_BULL4()
{
if(OrderOpenPrice()+4*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--) // add: -1
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA1)
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Blue);
}
}
}
void CheckForClose_BULL6()
{
if(OrderOpenPrice()+8*Point< Ask)
for (int i = OrdersTotal()-1; i >= 0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA2)
{
bool ticket = true;
if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);
}
}
}
//+------------------------------------------------------------------+//| flag |//+------------------------------------------------------------------+
Fun_New_Bar();
if (New_Bar==false);
bool SignalBULL41Executed=false;
bool SignalBULL42Executed=false;
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;
if(Fun_New_Bar())
{
SignalBULL41Executed=true;
return(SignalBULL41Executed);
}
//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
// ----------------bull4if(BULL4())
if(!SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)
{
OpenBULL41();//do open buy position
SignalBULL41Executed=true;
if ( SignalBULL41Executed) CheckForClose_BULL4(); // I don't know it is the right place to close
}
if(!SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)
{
OpenBULL42();//do open buy position
SignalBULL42Executed=true;
if ( SignalBULL42Executed) CheckForClose_BULL4(); // I don't know it is the right place to close
}
// ----------------bull6 if(BULL6())
if(!SignalBULL61Executed && OpenOrders_BULL6(Symbol())==0)
{
OpenBULL61();//do open buy position
SignalBULL61Executed=true;
if ( SignalBULL61Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
if(!SignalBULL62Executed && OpenOrders_BULL6(Symbol())==1)
{
OpenBULL62();//do open buy position
SignalBULL62Executed=true;
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
if(!SignalBULL63Executed && OpenOrders_BULL6(Symbol())==2)
{
OpenBULL63();//do open buy position
SignalBULL42Executed=true;
if ( SignalBULL62Executed) CheckForClose_BULL6(); // I don't know it is the right place to close
}
}
//+------------------------------------------------------------------+
Não é fácil ajudá-lo. Por que você não tenta implementar apenas uma estratégia por enquanto, mas com umafunção apropriada, Abrir(), Fechar(), Contar(), Nova Barra(), Sinal().
O bloco abaixo está fora da função de início. Não tenho certeza se isto é desejado.
Fun_New_Bar();
if (New_Bar==false); // <-- ???bool SignalBULL41Executed=false; // <-- This could be correct, but I am not sure you know why and
bool SignalBULL42Executed=false; // its not more an accident that you initalize it here.
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;
if(Fun_New_Bar()) // <-- Your Fun_New_Bar() function doesn't return anything,
{ // you set the global New_Bar variable with the function.
SignalBULL41Executed=true; // <-- You should set it to false on a new bar. return(SignalBULL41Executed); // <-- ???
}
Isto não é errado, mas não é o ideal e, na pior das hipóteses, não faz o que você quer dentro do loop. Melhor, nem mesmo comece a usar loops de 0 a OrderTotal. Leia isto: Loops e Encerramento ou Eliminação de Pedidos
for(int i=0;i<OrdersTotal();i++)
O que seus corretores estão espalhados e quantos dígitos você tem para o símbolo que você quer negociar? Não tenho certeza se você usa o Point corretamente (Leia na primeira página de seu tópico).
Sim, pequenos passos, por isso os erros são controláveis... Você quer destacar algo específico da base de código EA?
Acho que não, nada a iluminar, eu entendo o que escrevi.
Não voltarei a ver isto - não o ajudarei mais se você continuar ignorando os passos de correção, eu - ou outra pessoa - aconselhei a fazer:
Sim. Eu sei o que normalizarDuplo, eu acho que entendo ( se eu tenho: euro/usd = 1.2390022129..... 09.... E nós precisamos: 1.29893 fim! não infinito ) mas eu não posso escrever isto, poderia ser isto?
se ( NormalizeDuplo ( abc(),0 ) )
bool abc()
{
bool z,y,z;
x=Bid;
y=Fechar[1]
z=x-y+3*Ponto
retorno(z);
}
ou ?
Se (NormalizeDuplo ((Fechar[1]-Bid) +3* ponto),0 ) ;
Slippage é 0? Você provavelmente receberá um erro, mas o tratamento do erro corrigido irá pegá-lo :-)
Posso ter +1 resultadosem problemas=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
o erro será gerenciável, bom, vemos o que será depois
Isto não é errado, mas não é o ideal e, na pior das hipóteses, não faz o que você quer dentro do loop. Melhor, nem mesmo comece a usar loops de 0 a OrderTotal. Leia isto: Loops e Encerramento ou Eliminação de Pedidos
MUITO BOM ARTIGO! Eu me recordo de ter lido isto no início :)
O que seus corretores estão espalhados e quantos dígitos você tem para o símbolo que você quer negociar? Não tenho certeza se você usa o Point corretamente (Leia na primeira página de seu tópico).
Eu me lembro destes. Tenho Admiral Market Bid=1,29000 Ask = 1,29001. Estes são um problema que conheço, mas não tenho solução neste momento não encontrei o bom exemplo.
Sim. Eu sei o que normalizarDuplo, eu acho que entendo ( se eu tenho: euro/usd = 1.2390022129..... 09.... E nós precisamos: 1.29893 fim! não infinito ) mas eu não posso escrever isto, poderia ser isto?
if (NormalizeDuplo( abc(),0 ) )
bool abc()
{
Você não pode NormalizarDuplicar() um bool, a pista está no nome da função e na documentação também . .
Você não pode NormalizarDuplicar() um bool, a pista está no nome da função e na documentação também . .
É uma armadilha que não podemos normalizar para ser muito verdadeiro :-(
Wodzuuu: Sim. Eu sei o que normalizarDuplo, eu acho que entendo ( se eu tenho: euro/usd = 1.2390022129..... 09.... E nós precisamos: 1.29893 fim! não infinito ) mas eu não posso escrever isto, poderia ser isto?
Não, você não precisa normalizar Bid ou Close[1]. O que eu quis dizer é que você não deve simplesmente compará-lo para a igualdade.
Wodzuuu: Posso ter +1 resultadosem problemas=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Isto não faz com que seja muito melhor. Todos os seus cálculos em Pontos devem ser Pips a partir do meu entendimento. Entretanto, não tenho experiência com corretores ECN, por isso pode funcionar.
Wodzuuu:
Isto não é errado, mas não é o ideal e, na pior das hipóteses, não faz o que você quer dentro do loop. Melhor, nem mesmo comece a usar loops de 0 a OrderTotal. Leia isto: Loops e Encerramento ou Eliminação de Pedidos
MUITO BOM ARTIGO ! Eu me arrependo de ter lido isto no início :)
Concordo e há muitos outros artigos muito bons, escritos pelo mesmo autor. Além disso, o livro não é um mau lugar para começar.
Wodzuuu:
Tenho Proposta Almirante de Mercado=1,29000 Ask = 1,29001. Estes são um problema que conheço, mas não tenho solução neste momento, não encontrei o bom exemplo.
No site de seus corretores é indicado que, para EURUSD, o spread mínimo é de 0,1. O spread médio é de 0,5. <-- Isto é feito em pips! Portanto, 0,1 é 1 Ponto. 0,5 é 5 Pontos. Portanto, no seu caso, um Pip é 10* Pontos. O spread confundirá todo o seu mini-cálculo onde você adiciona apenas 3 pontos a um preço. Procure por 'ajuste para corretor de 5 dígitos' e você deve encontrar muitos exemplos.
Seeste códigoera ruim porqueeuestava passandosinais, ele melhorou.Eu penseique o problemaestá inteiramenteem outro lugar, nãono sinal deigualdade'=='......... o '>=' é uma idéia melhor, é claro
if( Bid==Close[1]+3*Point)
if( Bid>=Close[1]+MyPips*3)
Pergunta 1. Tenho usado MyPips em vela, nesta função? bool BULL4()
Como você é oespecialistaIdeveria ter dito algo, isso pode ser importante. Agoraeu uso aplataforma MT4e vejo4 dígitosapós o ponto decimal(Bid-Ask= 0,0001usualy). No momento em queprogramamos naMQL4queseja. NoMT5,vejo 5dígitosapós o ponto decimal.threre édiferente entre aMQL4 e a MQL5. No momento, estaondanãomediz respeito. Importante paranossoEAfuncionou bem. Não quero, neste momento, falar sobre isso(a menos queseja necessário)
E eu PROGRAMA DE GROTE para mim é bom :) e você?
//+------------------------------------------------------------------+//+------------------------------------------------------------------+#define MAGICMA1 2000// blue starategy//+------------------------------------------------------------------+//| Check NEW BAR |//+------------------------------------------------------------------+// nothing yet, one moment//+------------------------------------------------------------------+//| These are adjusted for 5/4 digit brokers |//+------------------------------------------------------------------+double MyPips; // slippage and othersint init()
{
if (Digits == 5) // Adjust for five (5)
{
MyPips=Point*10;
}
else// Adjust for four (4, and ..)
{
MyPips=Point*1;
}
}
//+------------------------------------------------------------------+//| Calculate open positions HOW MEANY OF THIS is open |//+------------------------------------------------------------------+int OpenOrders_BULL4(string symbol)
{
int buys=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)
{
if(OrderType()==OP_BUY) buys++;
}
}
return(buys);
}
//+------------------------------------------------------------------+//| Condition candle |//+------------------------------------------------------------------+bool BULL4()
{
if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
{
return(true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+//| Condition send buy |//+------------------------------------------------------------------+bool BULL4send()
{
if( Bid>=Close[1]+MyPips*3)
{
return(true);
}
else
{
return(false);
}
}
//+------------------------------------------------------------------+//| Check for open order conditions |//+------------------------------------------------------------------+bool OpenBULL41()
{
int result;
result=OrderSend(Symbol(),OP_BUY,0.41,Ask,MyPips,Close[1]-25*MyPips,0,"",MAGICMA1,0,Blue);
if(result>0)
{
if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else
{
Print("Error opening BUY order : ",GetLastError());
return(false);
}
return(true);
}
//+------------------------------------------------------------------+//| Check for close order conditions |//+------------------------------------------------------------------+bool CheckForCloseBULL4()
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
if(OrderOpenPrice()+8*MyPips < Ask) return(true);
elsereturn(false);
}
//+------------------------------------------------------------------+//| close |//+------------------------------------------------------------------+void CloseBULL4()
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol() && OrderType() == OP_BUY )
if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), MyPips*1,Black ) )
Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );
}
}
//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()
{
// ----------------bull4if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)
{
OpenBULL41();//do open buy position
}
if(CheckForCloseBULL4()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
}
//+------------------------------------------------------------------+
Tenho a sensação de que perdemos um pouco de controle sobre o código....
Não, este não é com certeza o lugar certo.
Este "tratamento de erros" não melhora nada. Verifique novamente.
Isto não é criado para se divertir! Deve ser usado para reiniciar as bandeiras executadas em um novo bar.
O que aprendemos sobre a comparação de duplas e se isso faz algum sentido aqui?
Então você decidiu apagar sua postagem à qual me refiro... Muito bem feito, isso é muito útil!
Desculpe, mas ontem houve um problema na internet (mql4.com deixou de funcionar). Eu estava tentando corrigir algo e ... colapso
Não é fácil ajudá-lo. Por que você não tenta implementar apenas uma estratégia por enquanto, mas com umafunção apropriada, Abrir(), Fechar(), Contar(), Nova Barra(), Sinal().
O bloco abaixo está fora da função de início. Não tenho certeza se isto é desejado.
Eu penso o mesmo que você, pequenos passos. Vamos tomar apenas uma opção BULL4
Às vezes parecendo Ea para mim na base de código
https://www.mql5.com/en/code/9156 - interessante
Entendo estes (mas não sinto), é uma bandeira eentendo seu propósito
O que você acha? sobre pequenos passos
Sim, pequenos passos, por isso os erros são controláveis...
Você quer destacar algo específico da base de código EA?
Não voltarei a ver isto - não o ajudarei mais se você continuar ignorando os passos de correção, eu - ou outra pessoa - aconselhei a fazer:
Slippage é 0? Você provavelmente receberá um erro, mas o tratamento do erro corrigido irá pegá-lo :-)
Isto não é errado, mas não é o ideal e, na pior das hipóteses, não faz o que você quer dentro do loop. Melhor, nem mesmo comece a usar loops de 0 a OrderTotal. Leia isto: Loops e Encerramento ou Eliminação de Pedidos
O que seus corretores estão espalhados e quantos dígitos você tem para o símbolo que você quer negociar? Não tenho certeza se você usa o Point corretamente (Leia na primeira página de seu tópico).
Sim, pequenos passos, por isso os erros são controláveis...
Você quer destacar algo específico da base de código EA?
Acho que não, nada a iluminar, eu entendo o que escrevi.
Não voltarei a ver isto - não o ajudarei mais se você continuar ignorando os passos de correção, eu - ou outra pessoa - aconselhei a fazer:
Sim. Eu sei o que normalizarDuplo, eu acho que entendo ( se eu tenho: euro/usd = 1.2390022129..... 09.... E nós precisamos: 1.29893 fim! não infinito ) mas eu não posso escrever isto, poderia ser isto?
se ( NormalizeDuplo ( abc(),0 ) )
Se ( NormalizeDuplo ((Fechar[1]-Bid) +3* ponto),0 ) ;
Slippage é 0? Você provavelmente receberá um erro, mas o tratamento do erro corrigido irá pegá-lo :-)
Posso ter +1 resultadosem problemas=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
o erro será gerenciável, bom, vemos o que será depois
Isto não é errado, mas não é o ideal e, na pior das hipóteses, não faz o que você quer dentro do loop. Melhor, nem mesmo comece a usar loops de 0 a OrderTotal. Leia isto: Loops e Encerramento ou Eliminação de Pedidos
MUITO BOM ARTIGO! Eu me recordo de ter lido isto no início :)
O que seus corretores estão espalhados e quantos dígitos você tem para o símbolo que você quer negociar? Não tenho certeza se você usa o Point corretamente (Leia na primeira página de seu tópico).
Eu me lembro destes. Tenho Admiral Market Bid=1,29000 Ask = 1,29001. Estes são um problema que conheço, mas não tenho solução neste momento não encontrei o bom exemplo.
Estou escrevendo código...
Sim. Eu sei o que normalizarDuplo, eu acho que entendo ( se eu tenho: euro/usd = 1.2390022129..... 09.... E nós precisamos: 1.29893 fim! não infinito ) mas eu não posso escrever isto, poderia ser isto?
if (NormalizeDuplo( abc(),0 ) )
Você não pode NormalizarDuplicar() um bool, a pista está no nome da função e na documentação também . .
Você não pode NormalizarDuplicar() um bool, a pista está no nome da função e na documentação também . .
É uma armadilha que não podemos normalizar para ser muito verdadeiro :-(
Sim. Eu sei o que normalizarDuplo, eu acho que entendo ( se eu tenho: euro/usd = 1.2390022129..... 09.... E nós precisamos: 1.29893 fim! não infinito ) mas eu não posso escrever isto, poderia ser isto?
Não, você não precisa normalizar Bid ou Close[1]. O que eu quis dizer é que você não deve simplesmente compará-lo para a igualdade.
Imagine:
Fechar[1] = 1.31933
Novo_Bar
Tick1, Bid = 1,31935
Tick2, Bid = 1,31934
Tick3, Bid = 1,31937
Tick4, Bid = 1,31937
Tick5, Bid = 1,31942
Seu código procura um Tick onde Bid é 1.31936
Isto não aconteceria, se você usasse > .
Posso ter +1 resultadosem problemas=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
Isto não faz com que seja muito melhor. Todos os seus cálculos em Pontos devem ser Pips a partir do meu entendimento. Entretanto, não tenho experiência com corretores ECN, por isso pode funcionar.
Isto não é errado, mas não é o ideal e, na pior das hipóteses, não faz o que você quer dentro do loop. Melhor, nem mesmo comece a usar loops de 0 a OrderTotal. Leia isto: Loops e Encerramento ou Eliminação de Pedidos
MUITO BOM ARTIGO ! Eu me arrependo de ter lido isto no início :)
Concordo e há muitos outros artigos muito bons, escritos pelo mesmo autor. Além disso, o livro não é um mau lugar para começar.
Tenho Proposta Almirante de Mercado=1,29000 Ask = 1,29001. Estes são um problema que conheço, mas não tenho solução neste momento, não encontrei o bom exemplo.
No site de seus corretores é indicado que, para EURUSD, o spread mínimo é de 0,1. O spread médio é de 0,5. <-- Isto é feito em pips! Portanto, 0,1 é 1 Ponto. 0,5 é 5 Pontos.
Portanto, no seu caso, um Pip é 10* Pontos. O spread confundirá todo o seu mini-cálculo onde você adiciona apenas 3 pontos a um preço.
Procure por 'ajuste para corretor de 5 dígitos' e você deve encontrar muitos exemplos.
HI :)
Se este código era ruim porqueeu estava passando sinais, ele melhorou.Eu pensei que o problema está inteiramente em outro lugar, não no sinal de igualdade'=='......... o '>=' é uma idéia melhor, é claro
Pergunta 1. Tenho usado MyPips em vela, nesta função? bool BULL4()
Problema DIGIT.
Eu encontrei estes
https://www.mql5.com/en/forum/140097 por WHRoeder
https://www.mql5.com/en/forum/123736 por WHRoeder
O que é Digit ? em https://docs.mql4.com/predefined/variables/digits e https://docs.mql4.com/convert/doubletostr
Como você é o especialistaI deveria ter dito algo, isso pode ser importante.
Agora eu uso a plataforma MT4 e vejo 4 dígitos após o ponto decimal (Bid-Ask= 0,0001usualy). No momento em que programamos naMQL4 que seja.
No MT5, vejo 5dígitos após o ponto decimal.threre édiferente entre a MQL4 e a MQL5. No momento, esta onda não me diz respeito. Importante para nosso EA funcionou bem.
Não quero, neste momento, falar sobre isso (a menos que seja necessário)
E eu PROGRAMA DE GROTE para mim é bom :) e você?