- EA funciona no testador de estratégias mas não consigo colocar para rodar na conta
- Testador de Estratégia gera resultado diferente do que no dia-a-dia
- Faça seu primeiro milhão
Identificar o ticket não resolve. O problema é o seguinte, enquanto tenho uma operação aberta ele pega o VOLUME do ticket e me passa pelo operador, mas quando a posição fecha ele mantem o POSITION_VOLUME com o último valor que tinha antes do ticket fechar, entende? Para a lógica que eu estava tentando montar eu precisava que quando não houvesse ticket aberto ele retornasse o volume como sendo 0.
Você tem mais de uma operação ao mesmo tempo? Se sim é preciso identificá-las pelo ticket.
Identificar o ticket não resolve. O problema é o seguinte, enquanto tenho uma operação aberta ele pega o VOLUME do ticket e me passa pelo operador, mas quando a posição fecha ele mantem o POSITION_VOLUME com o último valor que tinha antes do ticket fechar, entende? Para a lógica que eu estava tentando montar eu precisava que quando não houvesse ticket aberto ele retornasse o volume como sendo 0.
//+------------------------------------------------------------------+ //| FUNCAO CHECKPOSITIONS | //+------------------------------------------------------------------+ bool CheckPositions() { //--- number of current positions position_total=PositionsTotal(); //Print("Total : ",total); //--- go through orders in a loop if (position_total>0) { for(uint i=0;i<position_total;i++) { //--- return order ticket by its position in the list //--- Function PositionSelect() copies data about a position into the program environment, and further calls of PositionGetDouble(), PositionGetInteger() and PositionGetString() //--- return the earlier copied data. This means that the position itself may no longer exist (or its volume, direction, etc. has changed), but data of this position still can be obtained. //--- To ensure receipt of fresh data about a position, it is recommended to call PositionSelect() right before referring to them. if(PositionSelect(_Symbol)==true) { //--- return order properties position_open_price = PositionGetDouble(POSITION_PRICE_OPEN); position_ID = PositionGetInteger(POSITION_IDENTIFIER); position_volume = PositionGetDouble(POSITION_VOLUME); position_profit = PositionGetDouble(POSITION_PROFIT); position_type = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); //Print("position_open_price: ",position_open_price); //Print("position_ID: ",position_ID); //Print("position_volume: ",position_volume); //Print("position_profit: ",position_profit); //Print("position_type: ",EnumToString(position_type)); } } } else { position_volume = 0; } return(true); }
Amigos, estou tentando montar um robô que dentro da estratégia busca o POSITION_VOLUME, pois estou dividindo meus lotes e colocando SLs e TPs diferentes para cada entrada. Isso funciona perfeitamente bem na primeira vez, mas após a primeira operação quando busco o POSITION_VOLUME não é zero, ele volta no mínimo para o lote inicial, isso desmonta toda lógica que criei. Alguém sabe me dizer porque isso ocorre, ou se há uma maneira melhor de dividir meus lotes com controle dos SLs e TPs?
- 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