Realização Parcial - página 2

 

Boa tarde, pessoal. Estou aprendendo a programar em mql5 e com isso, surgiu uma dúvida quando adequei o código acima no EA que estou criando. Desde já agradeço quem puder me ajudar no entendimento do que pode estar acontecendo. O que ocorre. Como disse, adaptei inicialmente todo o código, mas apresenta erros, principalmente porque fica emitindo ordens de parcial nas duas condições (Hedging e Netting), mas minha conta é Netting. Com isso, decidi usar apenas a primeira parte do código e até chega a realizar a primeira ordem de realização parcial, entretanto nas operações seguintes não faz a realização parcial nem o breakeven. Simplesmente entra na operação com SL e TP normalmente e só. Já pesquisei bastante para tentar resolver, mas sem sucesso. Se tiverem uma sugestão ou mesmo conteúdo relacionado agradeço bastante. Segue parte do código do EA. Um abraço.

//+------------------------------------------------------------------+

//|Função Realização Parcial                                          |

//+------------------------------------------------------------------+

void RealizaParcial(double preco)

   {

      for(int i = PositionsTotal()-1; i>=0; i--)

         {

            ulong mode = ACCOUNT_MARGIN_MODE_RETAIL_HEDGING;

            string symbol = PositionGetSymbol(i);

            ulong magic = PositionGetInteger(POSITION_MAGIC);

            if(symbol == _Symbol && magic == magicNum)

//               {

//               if(mode != ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)   //Testa se a conta é do tipo Netting, mas não funcionou

                 {

                  ulong PositionTicket = PositionGetInteger(POSITION_TICKET);

                  double PrecoEntrada = PositionGetDouble(POSITION_PRICE_OPEN);

                  double TakeProfitCorrente = PositionGetDouble(POSITION_TP);

                  double stopLossCorrente = PositionGetDouble(POSITION_SL);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

                     {

                        if( preco >= (PrecoEntrada + gatilhoRP) && !ordPendente && liga_parcial == true )

                           {

                              if(trade.Sell(contratos_Parcial, symbol, PrecoEntrada + gatilhoRP, stopLossCorrente, TakeProfitCorrente, "Parcial"))

                                 {

                                    Print("Realização Parcial - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                    rpAtivo = true;

                                 }

                              else

                                 {

                                    Print("Realização Parcial - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                 }

                           }                           

                     }

                  else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

                     {

                        if( preco <= (PrecoEntrada - gatilhoRP) && !ordPendente && liga_parcial == true )

                           {

                              if(trade.Buy(contratos_Parcial, symbol, PrecoEntrada - gatilhoRP, stopLossCorrente, TakeProfitCorrente, "Parcial"))

                                 {

                                    Print("Realização Parcial - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                    rpAtivo = true;

                                 }

                              else

                                 {

                                    Print("Realização Parcial - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                 }

                            }

                       }

                  }

             }

        }      

//   }   

//+------------------------------------------------------------------+

//|Função BreakEven                                                     |

//+------------------------------------------------------------------+

void BreakEven(double preco)

   {

      for(int i = PositionsTotal()-1; i>=0; i--)

         {

            string symbol = PositionGetSymbol(i);

            ulong magic = PositionGetInteger(POSITION_MAGIC);

            if(symbol == _Symbol && magic == magicNum)

               {

                  ulong PositionTicket = PositionGetInteger(POSITION_TICKET);

                  double PrecoEntrada = PositionGetDouble(POSITION_PRICE_OPEN);

                  double TakeProfitCorrente = PositionGetDouble(POSITION_TP);

                  if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)

                     {

                        if( preco >= (PrecoEntrada + gatilhoBE) && liga_breakeven == true )

                           {

                              if(trade.PositionModify(PositionTicket, PrecoEntrada + ganhominimoBE, TakeProfitCorrente))

                                 {

                                    Print("BreakEven - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                    beAtivo = true;

                                 }

                              else

                                 {

                                    Print("BreakEven - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                 }

                           }                           

                     }

                  else if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)

                     {

                        if( preco <= (PrecoEntrada - gatilhoBE) && liga_breakeven == true )

                           {

                              if(trade.PositionModify(PositionTicket, PrecoEntrada - ganhominimoBE, TakeProfitCorrente))

                                 {

                                    Print("BreakEven - sem falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                    beAtivo = true;

                                 }

                              else

                                 {

                                    Print("BreakEven - com falha. ResultRetcode: ", trade.ResultRetcode(), ", RetcodeDescription: ", trade.ResultRetcodeDescription());

                                 }

                           }

                     }

               }

         }

   }    

//-----------------------------------------------------------------------------------+

 
Facilite a vida, envie múltiplas ordens com sl e tp definidos.
 
Boa noite, Pablo. Esse é o problema. O SL e TP estão definidos.
 
George Silva #:

Boa tarde, pessoal. Estou aprendendo a programar em mql5 e com isso, surgiu uma dúvida quando adequei o código acima no EA que estou criando. Desde já agradeço quem puder me ajudar no entendimento do que pode estar acontecendo. O que ocorre. Como disse, adaptei inicialmente todo o código, mas apresenta erros, principalmente porque fica emitindo ordens de parcial nas duas condições (Hedging e Netting), mas minha conta é Netting. Com isso, decidi usar apenas a primeira parte do código e até chega a realizar a primeira ordem de realização parcial, entretanto nas operações seguintes não faz a realização parcial nem o breakeven. Simplesmente entra na operação com SL e TP normalmente e só. Já pesquisei bastante para tentar resolver, mas sem sucesso. Se tiverem uma sugestão ou mesmo conteúdo relacionado agradeço bastante. Segue parte do código do EA. Um abraço.

Olha colega, abra um topico pra chamar de seu. Depois disso no topico post todo o codigo, tem chance do erro ser que tu nao esta chamando essas duas funcoes porque as suas variaveis rpAtivo e beAtivo nao foram zeradas e isso nao eh mostrado no snippet provido.