- charles 2.1.8
- Crítica do MetaTrader 5 sobre os FORTS
- Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos
Olá, gostaria de saber se é possível que o EA, modifique ou altere uma ordem ou posição do mesmo EA operando no mesmo símbolo, e mesmo timeframe ou não porem com magic number diferente, se sim, como posso tratar.
Bom dia Romeu,
para ler uma ordem ou posição você usa o índice da lista ou a chave primária ticket , uma vez obtida a ordem ou posição você pode alterá-la a vontade.
Bom dia Romeu,
para ler uma ordem ou posição você usa o índice da lista ou a chave primária ticket , uma vez obtida a ordem ou posição você pode alterá-la a vontade.
Mas meu objetivo é deixar o mesmo EA operar em 2 timeframes diferentes do mesmo símbolo, queria saber se não existe o risco de um mudar a posição do outro.
Bom dia!
Quando você informa o seu objetivo, passa mais detalhes, fica mais fácil lhe responder . . .
Sim, sem dúvidas haverá conflitos ao gerenciar as posições. Duas opções para resolver o problema:
//--- Em OnInit() . . . trade.SetExpertMagicNumber(MagicNumberTF(_Period)); //+--------------------------------------------------------------------------------------------------------------------+ //| Magic number timeframes function | //+--------------------------------------------------------------------------------------------------------------------+ ulong MagicNumberTF(ENUM_TIMEFRAMES CodeTF) { //--- Local variable ulong ResMN; switch(CodeTF) { case PERIOD_M1: ResMN = 777001; break; case PERIOD_M2: ResMN = 777002; break; case PERIOD_M3: ResMN = 777003; break; case PERIOD_M4: ResMN = 777004; break; case PERIOD_M5: ResMN = 777005; break; case PERIOD_M6: ResMN = 777006; break; case PERIOD_M10: ResMN = 777007; break; case PERIOD_M12: ResMN = 777008; break; case PERIOD_M15: ResMN = 777009; break; case PERIOD_M20: ResMN = 777010; break; case PERIOD_M30: ResMN = 777011; break; case PERIOD_H1: ResMN = 777012; break; case PERIOD_H2: ResMN = 777013; break; case PERIOD_H3: ResMN = 777014; break; case PERIOD_H4: ResMN = 777015; break; case PERIOD_H6: ResMN = 777016; break; case PERIOD_H8: ResMN = 777017; break; case PERIOD_H12: ResMN = 777018; break; case PERIOD_D1: ResMN = 777019; break; case PERIOD_W1: ResMN = 777020; break; case PERIOD_MN1: ResMN = 777021; break; default: ResMN = 0; break; } return(ResMN); }
. . . Ou coloca o Magic Number como parâmetro de entrada (input) e ao anexar o EA, define valores diferentes pra ele (MN) em cada timeframe.
Mas meu objetivo é deixar o mesmo EA operar em 2 timeframes diferentes do mesmo símbolo, queria saber se não existe o risco de um mudar a posição do outro.
Basta você fazer a verificação se o EA esta no símbolo que vc quer, e no timeframe desejado. Você pode acrescentar um input onde vc fala qual timeframe que o EA esta operando e quando for executar a ordem comparar. Vou deixar um exemplo.
#define EXPERT_MAGIC 123 //Magic Number do Robô input ENUM_TIMEFRAMES INPperiodoEA = PERIOD_M1; //TimeFrame do Robô trade.SetExpertMagicNumber(EXPERT_MAGIC); bool ClosePosition() { for(int i=PositionsTotal()-1; i>=0; i--) { string symbolPosition = PositionGetSymbol(i); //Pegar o ativo da posição na posição i ulong magicPosition = PositionGetInteger(POSITION_MAGIC); if(symbolPosition == _Symbol && magicPosition == EXPERT_MAGIC && _Period == INPperiodoEA) { ulong positionTicket = PositionGetInteger(POSITION_TICKET); if(!trade.PositionClose(positionTicket, 5)) { //int errorCode = GetLastError(); Print("Erro ao fechar posição. ResultRetCode: ", trade.ResultRetcode(), " | ResultRetCodeDescription: ", trade.ResultRetcodeDescription()); ResetLastError(); return false; } else { return true; } break; } } return false; }
Mas meu objetivo é deixar o mesmo EA operar em 2 timeframes diferentes do mesmo símbolo, queria saber se não existe o risco de um mudar a posição do outro.
Não, pois o TICKET é a chave primaria e basta informar o TICKET para indicar a posição que vai ser modificada. Idem para as ordens. O MAGIC é sempre usado como atributo de filtro.
Exemplo usando a classe trade para fechar uma posição em HEDGE.
void ToDoClosePositions() { for(int i = PositionsTotal()-1; i >= 0; i--) { if((Ticket = PositionGetTicket(i)) > 0) if(PositionGetString(POSITION_SYMBOL) == ativoOper && PositionGetInteger(POSITION_MAGIC) == inpMagicNumber) cTrade.PositionClose(Ticket); } }
Bom dia!
Quando você informa o seu objetivo, passa mais detalhes, fica mais fácil lhe responder . . .
Sim, sem dúvidas haverá conflitos ao gerenciar as posições. Duas opções para resolver o problema:
. . . Ou coloca o Magic Number como parâmetro de entrada (input) e ao anexar o EA, define valores diferentes pra ele (MN) em cada timeframe.
É o que estou fazendo, mesmo EA, no mesmo símbolo, porém com magicnumber e timeframes diferentes, minha dúvida era essa, se mesmo com os MN diferentes poderia ocorrer de um EA interferir no outro.
Ah, beleza!! Então está tudo OK, desde que verifique o MAGIC ao alterar / deletar ordens e alterar / encerrar posições . . .
Ah, beleza!! Então está tudo OK, desde que verifique o MAGIC ao alterar / deletar ordens e alterar / encerrar posições . . .
Fiz as verificações usando para posições:
(PositionGetInteger(POSITION_MAGIC)==EA_Magic_Number)
e para ordens:
(OrderGetInteger(ORDER_MAGIC) == EA_Magic_Number)
Porem me surgiu uma duvida, por se tratar de uma conta netting, com os 2 EA operando simultaneamente, vai funcionar se um entrar comprado e outro vendido?
...vai funcionar se um entrar comprado e outro vendido?
NÃO
NÃO
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso