cara perfeito, deu certo aqui, fazer mais alguns teste, mas ate o momento deu bom, e vou analisar toda essas modificações para futuros EAS muito obrigado a todos
Na Onda #: cara perfeito, deu certo aqui, fazer mais alguns teste, mas ate o momento deu bom, e vou analisar toda essas modificações para futuros EAS muito obrigado a todos
opa,coloquei esse codigo e mudei tudo para TimeTradeServer, porem continua a mesma coisa, 1 dia opera no outro nao opera , tenho medo disso implicar na conta real, caso eu venha a coloca ele para opera em uma vps
Provavelmente, voce esta com a chamada do HorarioFechamento dentro do OnTick() em uma escala de tempo que não permite seu robo verificar em tempo habil a condição ou não teve negocio durante o periodo, uma outra forma seria colocar no OnTimer() esse reset na variavel que dai por um intervalo ocnfigurado o codigo executa mesmo que não tenha negocio no periodo. Isso afeta o testador que mesmo entre os dias (com o mercado fechado) o codigo pode ser executado.
Ricardo Rodrigues Lucca #: Provavelmente, voce esta com a chamada do HorarioFechamento dentro do OnTick() em uma escala de tempo que não permite seu robo verificar em tempo habil a condição ou não teve negocio durante o periodo, uma outra forma seria colocar no OnTimer() esse reset na variavel que dai por um intervalo ocnfigurado o codigo executa mesmo que não tenha negocio no periodo. Isso afeta o testador que mesmo entre os dias (com o mercado fechado) o codigo pode ser executado.
apos a entrada, quando ele esta na operação, caso ele esteja vendido e venha tocar/encostar na banda superior quero que ele saia da operação, a mesma coisa se ele estiver comprado e tocar/encostar na banda inferior quero que ele saia da operação pensando assim fiz esse codigo porem ele funciona a 1x e depois para,
eu coloquei ele em ontick
// ...bool positionOpen = false;
for (int i = PositionsTotal() - 1; i >= 0; i--)
{
string symbol = PositionGetSymbol(i);
if (symbol == _Symbol)
{
positionOpen = true;
break;
}
}
if (rates[0].high >= BufferBandUP[0] && rates[0].low <= BufferBandUP[0] && Saida_BB && positionOpen && MathAbs(rates[0].close - BufferBandUP[0]) <= 5 * _Point)
{
CloseAllPositionsA();
}
// ...
Na Onda #: Galera como o topico estar encerrar posição, vou aproveita esse aqui mesmo beleza
no meu operacional usso bolinger, a condição de entrada e
apos a entrada, quando ele esta na operação, caso ele esteja vendido e venha tocar/encostar na banda superior quero que ele saia da operação, a mesma coisa se ele estiver comprado e tocar/encostar na banda inferior quero que ele saia da operação pensando assim fiz esse codigo porem ele funciona a 1x e depois para,
eu coloquei ele em ontick
se alguem puder me ajudar
desde ja agradecido
Como já lhe dito e acredito que o codigo sofra do mesmo mal, voce esta confundindo variaveis de controle diário com variaveis de controle por operação. Dito isso, nos dois trechos do último post não permite a gente descobrir o seu problema. Dado que ele faz 1x e nenhuma outra vez pode ser que ele encerrou o "dia" na função CloseAllPositionsA.
Especulo que para evitar esse erro, você deveria fazer mais ou menos como segue (inclua as verificações que considerar necessárias para confirmar o encerramento):
//+--------------------------------------------------------------------------------------------------------------------+//| Expert tick function |//+--------------------------------------------------------------------------------------------------------------------+voidOnTick()
{
// . . .//--- Checks close buyif(rates[0].low <= BufferBandDOWN[0])
{
if(!CloseAllPositions(POSITION_TYPE_BUY))
{
return;
}
}
//--- Checks close sellif(rates[0].high >= BufferBandUP[0])
{
if(!CloseAllPositions(POSITION_TYPE_SELL))
{
return;
}
}
// . . .
}
//+--------------------------------------------------------------------------------------------------------------------+//| Close all positions |//+--------------------------------------------------------------------------------------------------------------------+bool CloseAllPositions(ENUM_POSITION_TYPE type)
{
//--- Local variablesulong TICKET;
int Cnt;
//--- Checks positionsfor(Cnt = PositionsTotal() - 1; Cnt >= 0; Cnt --)
{
//--- Gets the ticket and selects the position
TICKET = PositionGetTicket(Cnt);
if(TICKET == 0)
{
Print("Failed to get position ticket...");
return(false);
}
//--- Checks symbol | magic number | POSITION_TYPEif(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == TF0_MAGIC && PositionGetInteger(POSITION_TYPE) == type)
{
//--- Checks if closes positionif(Check_SL_TP(type, PositionGetDouble(POSITION_SL), PositionGetDouble(POSITION_TP)))
{
if(!m_trade.PositionClose(TICKET))
{
Print(m_trade.ResultRetcode(), " ", m_trade.ResultRetcodeDescription());
return(false);
}
}
}
}
//--- Successful closingreturn(true);
}
//+--------------------------------------------------------------------------------------------------------------------+//| Verifica se distância entre o TakeProfit/StopLoss e o preço de fechamento é maior do que SYMBOL_TRADE_STOPS_LEVEL |//+--------------------------------------------------------------------------------------------------------------------+bool Check_SL_TP(ENUM_POSITION_TYPE type, double SL, double TP)
{
//--- Local variablesbool SL_check = false, TP_check = false;
//--- Gets the last price for current symboldouble BID = SymbolInfoDouble(_Symbol, SYMBOL_BID);
double ASK = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
//--- get the SYMBOL_TRADE_STOPS_LEVEL levelint stops_level = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
if(stops_level != 0)
{
PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must not be nearer than %d points from the closing price", stops_level, stops_level);
}
//--- check only two order typesswitch(type)
{
//--- Buy operationcasePOSITION_TYPE_BUY:
{
//--- check the StopLoss
SL_check = (BID - SL > stops_level * _Point);
if(!SL_check)
{
PrintFormat("For order %s StopLoss=%.5f must be less than %.5f (Bid=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), SL, BID - stops_level * _Point, BID, stops_level);
}
//--- check the TakeProfit
TP_check = (TP - BID > stops_level * _Point);
if(!TP_check)
{
PrintFormat("For order %s TakeProfit=%.5f must be greater than %.5f (Bid=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), TP, BID + stops_level * _Point, BID, stops_level);
}
//--- return the result of checkingreturn(SL_check && TP_check);
}
//--- Sell operationcasePOSITION_TYPE_SELL:
{
//--- check the StopLoss
SL_check = (SL - ASK > stops_level * _Point);
if(!SL_check)
{
PrintFormat("For order %s StopLoss=%.5f must be greater than %.5f (Ask=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), SL, ASK + stops_level * _Point, ASK, stops_level);
}
//--- check the TakeProfit
TP_check = (ASK - TP > stops_level * _Point);
if(!TP_check)
{
PrintFormat("For order %s TakeProfit=%.5f must be less than %.5f (Ask=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), TP, ASK - stops_level * _Point, ASK, stops_level);
}
//--- return the result of checkingreturn(TP_check && SL_check);
}
break;
}
//--- Verification succeededreturn(false);
}
Especulo que para evitar esse erro, você deveria fazer mais ou menos como segue (inclua as verificações que considerar necessárias para confirmar o encerramento):
Você e 1000 so troquei umas variaveis e inclui as verificações e ficou top
Especulo que para evitar esse erro, você deveria fazer mais ou menos como segue (inclua as verificações que considerar necessárias para confirmar o encerramento):
acho que comemorei cedo kkkkkkkk
ele rodou legal, porem apos algumas operações começou a dar esse erro
2023.07.1501:42:41.0902023.03.0309:47:40 For order POSITION_TYPE_SELL StopLoss=0.00000 must be greater than 108978.00000 (Ask=108978.00000 + SYMBOL_TRADE_STOPS_LEVEL=0 points)
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
//=== ESCOPO GLOBAL bool flagStopDiario = false; datetime DiaAtual = 0;
cara perfeito, deu certo aqui, fazer mais alguns teste, mas ate o momento deu bom, e vou analisar toda essas modificações para futuros EAS
muito obrigado a todos
De nada! 👍
opa,coloquei esse codigo e mudei tudo para TimeTradeServer, porem continua a mesma coisa, 1 dia opera no outro nao opera , tenho medo disso implicar na conta real, caso eu venha a coloca ele para opera em uma vps
Provavelmente, voce esta com a chamada do HorarioFechamento dentro do OnTick() em uma escala de tempo que não permite seu robo verificar em tempo habil a condição ou não teve negocio durante o periodo, uma outra forma seria colocar no OnTimer() esse reset na variavel que dai por um intervalo ocnfigurado o codigo executa mesmo que não tenha negocio no periodo. Isso afeta o testador que mesmo entre os dias (com o mercado fechado) o codigo pode ser executado.
entende, vou analisar isso
obrigado
no meu operacional usso bolinger, a condição de entrada e
apos a entrada, quando ele esta na operação, caso ele esteja vendido e venha tocar/encostar na banda superior quero que ele saia da operação, a mesma coisa se ele estiver comprado e tocar/encostar na banda inferior quero que ele saia da operação
pensando assim fiz esse codigo porem ele funciona a 1x e depois para,
eu coloquei ele em ontick
se alguem puder me ajudar
desde ja agradecido
De nada! 👍
se puder me ajudar em mais essa 👍
Galera como o topico estar encerrar posição, vou aproveita esse aqui mesmo beleza
no meu operacional usso bolinger, a condição de entrada e
apos a entrada, quando ele esta na operação, caso ele esteja vendido e venha tocar/encostar na banda superior quero que ele saia da operação, a mesma coisa se ele estiver comprado e tocar/encostar na banda inferior quero que ele saia da operação
pensando assim fiz esse codigo porem ele funciona a 1x e depois para,
eu coloquei ele em ontick
se alguem puder me ajudar
desde ja agradecido
Como já lhe dito e acredito que o codigo sofra do mesmo mal, voce esta confundindo variaveis de controle diário com variaveis de controle por operação. Dito isso, nos dois trechos do último post não permite a gente descobrir o seu problema. Dado que ele faz 1x e nenhuma outra vez pode ser que ele encerrou o "dia" na função CloseAllPositionsA.
Especulo que para evitar esse erro, você deveria fazer mais ou menos como segue (inclua as verificações que considerar necessárias para confirmar o encerramento):
Especulo que para evitar esse erro, você deveria fazer mais ou menos como segue (inclua as verificações que considerar necessárias para confirmar o encerramento):
Você e 1000
so troquei umas variaveis e inclui as verificações e ficou top
mais uma vez muitisimo obrigado
Especulo que para evitar esse erro, você deveria fazer mais ou menos como segue (inclua as verificações que considerar necessárias para confirmar o encerramento):
acho que comemorei cedo kkkkkkkk
ele rodou legal, porem apos algumas operações começou a dar esse erro
nao entende pq funcionou e depois parou
tentei normalizar ask e bid
mas nao conseguir ta erro