Prezados,
Estou testando dois EA´s da biblioteca, um no WIN e outro no WDO. Coloquei a linha abaixo para que ao atingir um X valor de lucro as posições sejam fechadas. Nos Input´s dos dois EA´s tem o InpLucroTrade a ser preenchido:
if(m_account.Profit()>=InpLucroTrade
CloseAllPositions();
Porém, quando coloco os dois EA´s o resultado financeiro de um se mistura com o do outro, ou melhor, a conta (ACCOUNT) mostra os dois resultados variando na coluna lucro na aba <negociação>. Até aí está correto pois a função m_account.Profit() avalia o resultado financeiro da conta como um todo. O que eu queria é que cada EA fechasse somente as suas respectivas ordens (CloseAllPositions()) quando atingisse o seu resultado financeiro próprio, sem que o resultado financeiro do segundo EA interfira nisso. Daí fiz esta inclusão abaixo (m_position,Magic):
if(m_account.Profit()>=InpLucroTrade && m_position.Magic()==m_magic)
CloseAllPositions();
Mas não deu certo. Continuou um 'atrapalhando' o outro. Qual a forma mais simples que eu possa incluir no código para cada EA agir conforme seu próprio resultado financeiro ?
Grato
Olá
sergiomt, a resposta é simples: você deve criar funções próprias
para analisar suas posições e ordens pendentes discriminadas por ativo e até mesmo por número mágico.
Para isso, recomendo o artigo seguinte, com vários exemplos nesse sentido: https://www.mql5.com/pt/articles/211
Minha
recomendação final é que, antes de você colocar um robô em conta real a partir do codebase, não esquecer que grande parte deles foi
desenvolvido para o mercado Forex, e com algoritmos de segurança (quando existem) focados nesse mercado, portanto é importante fazer um
checklist como em
https://www.mql5.com/pt/forum/23409 para evitar problemas na B3.
Sds.,
Rogério
Figurelli
- www.mql5.com
Valeu Rogério, fico grato pelas valiosas indicações de leitura e pesquisa
Mas se alguém ler este tópico e souber (puder e quiser) revelar como seria o código eu agradeço pois conseguirei prosseguir com meus estudos de mercado
Valeu Rogério, fico grato pelas valiosas indicações de leitura e pesquisa
Mas se alguém ler este tópico e souber (puder e quiser) revelar como seria o código eu agradeço pois conseguirei prosseguir com meus estudos de mercado
Olá
sergiomt, complementando minha resposta, dá
uma olhada nesse script pronto em
https://www.mql5.com/pt/code/17943 pois ele leva em conta o símbolo do gráfico,
evitando um EA interferir no outro, pelo menos para essa função específica.
Sds.,
Rogério Figurelli
- www.mql5.com
Legal Rogério, vou tentar entender o código dele
Grato
Voltando ao tema. Estou estudando um EA que opera dois ativos ao mesmo tempo identificados como Symbol0 e Symbol1 no trecho do código abaixo. Minha intenção é abrir compras somente naquele em que o seu Profit esteja abaixo de zero (dando prejuízo). Lá em cima nos inputs eu coloquei double pos_profit0=0; e double pos_profit1=0; e coloquei também o bloco abaixo GET SYMBOL PROPERTIES. Mas não funciona, não abre ordem. Se eu não colocar o pos_profit aí volta a abrir ordens. Como corrijo isso ?
if(Use_Symbol0 && && pos_profit0<0)
OpenPosition(m_symbols0.Name(),PosType,Symbol0_Lot);
if(Use_Symbol1 && && pos_profit1<0)
OpenPosition(m_symbols1.Name(),PosType,Symbol1_Lot);
//+------------------------------------------------------------------+
//| GETTING SYMBOL PROPERTIES |
//+------------------------------------------------------------------+
void GetPositionProperties()
{
if(Use_Symbol0)
pos_profit0 =PositionGetDouble(POSITION_PROFIT);
if(Use_Symbol1)
pos_profit1 =PositionGetDouble(POSITION_PROFIT);
}
//+------------------------------------------------------------------+
Voltando ao tema. Estou estudando um EA que opera dois ativos ao mesmo tempo identificados como Symbol0 e Symbol1 no trecho do código abaixo. Minha intenção é abrir compras somente naquele em que o seu Profit esteja abaixo de zero (dando prejuízo). Lá em cima nos inputs eu coloquei double pos_profit0=0; e double pos_profit1=0; e coloquei também o bloco abaixo GET SYMBOL PROPERTIES. Mas não funciona, não abre ordem. Se eu não colocar o pos_profit aí volta a abrir ordens. Como corrijo isso ?
if(Use_Symbol0 && && pos_profit0<0)
OpenPosition(m_symbols0.Name(),PosType,Symbol0_Lot);
if(Use_Symbol1 && && pos_profit1<0)
OpenPosition(m_symbols1.Name(),PosType,Symbol1_Lot);
//+------------------------------------------------------------------+
//| GETTING SYMBOL PROPERTIES |
//+------------------------------------------------------------------+
void GetPositionProperties()
{
if(Use_Symbol0)
pos_profit0 =PositionGetDouble(POSITION_PROFIT);
if(Use_Symbol1)
pos_profit1 =PositionGetDouble(POSITION_PROFIT);
}
//+------------------------------------------------------------------+
Com esses 4 & seguidos aí não vai nem compilar.
Fica difícil ajudar se vc não postar o código original que compila e não funciona.
Vc verificou se o profit está mesmo negativo? Coloque um print antes do if e poste o código original com o resultado do print
- 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
Prezados,
Estou testando dois EA´s da biblioteca, um no WIN e outro no WDO. Coloquei a linha abaixo para que ao atingir um X valor de lucro as posições sejam fechadas. Nos Input´s dos dois EA´s tem o InpLucroTrade a ser preenchido:
if(m_account.Profit()>=InpLucroTrade
CloseAllPositions();
Porém, quando coloco os dois EA´s o resultado financeiro de um se mistura com o do outro, ou melhor, a conta (ACCOUNT) mostra os dois resultados variando na coluna lucro na aba <negociação>. Até aí está correto pois a função m_account.Profit() avalia o resultado financeiro da conta como um todo. O que eu queria é que cada EA fechasse somente as suas respectivas ordens (CloseAllPositions()) quando atingisse o seu resultado financeiro próprio, sem que o resultado financeiro do segundo EA interfira nisso. Daí fiz esta inclusão abaixo (m_position,Magic):
if(m_account.Profit()>=InpLucroTrade && m_position.Magic()==m_magic)
CloseAllPositions();
Mas não deu certo. Continuou um 'atrapalhando' o outro. Qual a forma mais simples que eu possa incluir no código para cada EA agir conforme seu próprio resultado financeiro ?
Grato