Ola, para facilitar a ajuda, poste os logs do erro que esta dando!
Boa noite Daniel, pois este é o problema, na conta Demo da XP ele funciona perfeitamente, modifica o STOP e tudo funciona normalmente. Quando eu troca a conta pela REAL ele não apresenta erro nenhum, eu enchi o código de "Prints" para tentar identificar, mas até agora nada.
Boa noite Daniel, pois este é o problema, na conta Demo da XP ele funciona perfeitamente, modifica o STOP e tudo funciona normalmente. Quando eu troca a conta pela REAL ele não apresenta erro nenhum, eu enchi o código de "Prints" para tentar identificar, mas até agora nada.
Opa, veja na caixa de ferramentas a aba "experts" ou aba "diário" os logs registrados, analisar esses dados esclarece as coisas!
Opa, veja na caixa de ferramentas a aba "experts" ou aba "diário" os logs registrados, analisar esses dados esclarece as coisas!
#include <Trade\Trade.mqh> MqlTick last_tick; CTrade myTradingControlPanel; void OnTick() { SymbolInfoTick(_Symbol,last_tick); if(PositionSelect(_Symbol)) { int position_type = PositionGetInteger(POSITION_TYPE); double pos_price = PositionGetDouble(POSITION_PRICE_OPEN); double pos_cprice = PositionGetDouble(POSITION_PRICE_CURRENT); double pos_sl = PositionGetDouble(POSITION_SL); double pos_tp = PositionGetDouble(POSITION_TP); double pos_volume = PositionGetDouble(POSITION_VOLUME); double pos_profit = PositionGetDouble(POSITION_PROFIT); datetime pos_time = (datetime)PositionGetInteger(POSITION_TIME); int pos_id = PositionGetInteger(POSITION_IDENTIFIER); if(position_type==0) if(last_tick.last>=(pos_price+4)) { if (pos_sl<pos_price) if(!myTradingControlPanel.PositionModify(pos_id,pos_price-4,pos_tp)) { //--- failure message Print("Метод PositionModify() method failed. Return code=",myTradingControlPanel.ResultRetcode(), ". Code Desc.: ",myTradingControlPanel.ResultRetcodeDescription()); } else { Print("PositionModify() method executed successfully. Return code=",myTradingControlPanel.ResultRetcode(), " (",myTradingControlPanel.ResultRetcodeDescription(),")"); } } if(position_type==1) if(last_tick.last<=(pos_price-4)) { if (pos_sl>pos_price) Comment("Stop alterado por código"); if(!myTradingControlPanel.PositionModify(pos_id,pos_price+4,pos_tp)) { //--- failure message Print("Метод PositionModify() method failed. Return code=",myTradingControlPanel.ResultRetcode(),". Code Desc.: ",myTradingControlPanel.ResultRetcodeDescription()); } else { Print("PositionModify() method executed successfully. Return code=",myTradingControlPanel.ResultRetcode()," (",myTradingControlPanel.ResultRetcodeDescription(),")"); } } } else { Print("Posição não encontrada"); } }
Modifiquei o código e coloquei um Print, pois na minha concepção ele não estava satisfazendo a condição: if(PositionSelect(_Symbol)) Pois é exatamente o problema, ele mostra na aba Experts que não existe posição. Existe algum erro de sintaxe? Por que na conta demo funciona?
Bom, reitero que postando os log facilita o que procurar no código.
De início olhando o código postado tente verificar uma questão:
bool PositionSelect( string symbol // Nome Simbolo );
A PositionSelect retorna tipo bool, sendo true se selecionou a posição e false caso não tenha posição, no seu código if(PositionSelect(_Symbol)) não deveria ser if(PositionSelect(_Symbol)==true) ?
Contas netting e edge tem diferença, se no log é que não exite posição é porque você não esta comprado ou vendido.
Alterar ordem aberta é diferente alterar uma posição, verifique isso!
Espero ter ajudado!
Aproveitando para dar uma sugestão: quando compila seu projeto ,na caixa de ferramentas erro aparece também alertas que mesmo com eles o projeto é gravado, recomendo sempre ajustar o código para que não tenha nenhum alerta também!
Obrigado pelas dicas Daniel, vou tentar aprimorar o código, realmente ele tem 2 alertas.
Consegui passar pela condição PositionSelect, entretanto agora ele retorna um "erro=0" na PositionModify, já foi um avanço.
Vou realizar outros testes e postar os logs aqui.
Muito obrigado pela ajuda.
Solucionado com a seguinte alteração:
if(!myTradingControlPanel.PositionModify(pos_id,new_sl,pos_tp)) if(!myTradingControlPanel.PositionModify(_Symbol,new_sl,pos_tp))
Muito obrigado pela ajuda.
![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
Olá,
Sou novo na plataforma e estou utilizando o código abaixo para mudar um STOP. Na plataforma DEMO funciona perfeitamente, entretanto, na conta REAL ele simplesmente ignora o código e não apresenta mensagem alguma.
Alguém mais experiente pode me dar o caminho das pedra (A corretora que utilizo é a XP).