Discussão do artigo "Implementando Take Profit na forma de ordens limitadas sem alterar o código original do EA" - página 5

 
Isso é tudo o que eu sempre quis, muito obrigada. Amo você.
 

Olá, querida

Seu texto foi útil para mim, mas não consegui corrigir o meu, portanto, se for possível, por favor, me oriente. Meu plano de TP é: quando definido, por exemplo, como Buy no gráfico e ele segue o caminho certo e lucra, o valor de TP se move para o ponto de lucro máximo, portanto, quando a tendência muda de direção para baixo, o valor de TP é colocado em 70% do lucro máximo.

double BuyPipsProfit,SellPipsProfit,BuyProfitLevel,SellProfitLevel;
double TP_Buy=0;
double TP_Sell=0;

for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
BuyPipsProfit= Ask-(double)OrderOpenPrice() ;
SellPipsProfit= (double)OrderOpenPrice()-Bid;
BuyProfitLevel= BuyPipsProfit*.7;
SellProfitLevel= SellPipsProfit*.7;
TP_Buy = (50*Point)+ ((OrderOpenPrice()+ BuyProfitLevel)*Point);
TP_Sell= (50*Point)+ ((OrderOpenPrice()+ SellProfitLevel)*Point);
}
}

 

Olá,

Não trabalhe.

Erro LimitTakeProfit.mqh:

unresolved static variable 'CLimitTakeProfit::i_Magic' LimitTakeProfit.mqh 29 43
unresolved static variable 'CLimitTakeProfit::b_OnlyOneSymbol' LimitTakeProfit.mqh 32 52
unresolved static variable 'CLimitTakeProfit::i_TakeProfit' LimitTakeProfit.mqh 507 14
unresolved static variable 'CLimitTakeProfit::d_TakeProfit' LimitTakeProfit.mqh 512 17
unresolved static variable 'CLimitTakeProfit::c_Symbol' LimitTakeProfit.mqh 160 9

Obrigado.

Arquivos anexados:
 

@MetaQuotes, obrigado por esse código!

Encontrei um erro nessa função e apresento minha humilde solução:

bool CLimitTakeProfit::SetTakeProfits(ulong position_ticket, double new_tp=0)


Se tivermos 2 TP e o primeiro tiver sido fechado, o segundo será fechado ERRADO aqui:

if(CheckLimitOrder(tp_request))
  {
   if(tp_request.volume>=0)
     {
      closed+=tp_request.volume;
      closed_perc=closed/position_volume*100;
     }
   else
     {
      fix_closed_per-=tp_request.volume/(position_volume-tp_request.volume)*100;
     }
   continue;
  }


Por quê? Porque ao procurar o primeiro TP nessa função:

CheckOrderInHistory(PositionGetInteger(POSITION_IDENTIFIER),request.comment, request.type, request.volume);

Mudamos a posição selecionada, portanto, no loop:

   for(int i=0;i<total;i++)
     {

      tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket);
      
      if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0)

Usamos a posição errada para avaliar o segundo TP aqui:

switch((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE))


Fazendo com que o segundo TP seja fechado! Minha correção é:

for(int i=0;i<total;i++)
   {
      /****** NEW LINE **************/
      PositionSelectByTicket(position_ticket);
      /****** NEW LINE **************/

      tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket);
      
      if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0)


Mais uma vez, obrigado!

 
Roco Deodato Giaculi #: Olá, Não trabalhe. Erro LimitTakeProfit.mqh: Obrigado.

Você usou o código original ou adicionou o código ao seu orientador?

 

Nunca fiz isso funcionar.

 

Boa tarde @Dmitriy Gizlyk , Você poderia ajudar com este problema? Já tentei inúmeras situações mas não consigo sair desse erro. Se você puder ajudar, obrigado.


 
Você pode me ajudar por favor? Não sei programar etc. Só queria que meu lucro fosse plotado como um pedido limitado. (se você pudesse descrever como usar seu arquivo ficarei muito grato)
 
FalconGhost2 : Você pode me ajudar por favor? Não sei programar etc. Só queria que meu lucro fosse plotado como um pedido limitado. (se você pudesse descrever como usar seu arquivo ficarei muito grato)

Olá, Você não pode usar este arquivo se usar negociação manual. É para uso na EA.

Cumprimentos, Dmitry.

 
Dmitriy Gizlyk #: Olá, Você não pode usar este arquivo se usar negociação manual. É para uso na EA. Cumprimentos, Dmitry.

Obrigado por responder Dmitriy! Você sabe se existe outra maneira de fazer a negociação manual?