Trailing Stops e Trailing Profit - página 5

 
Arav007:


TP do 3º Comércio = 108.536 [ Eu coloco este TP a tal distância, assim ele funcionará como se não houvesse TP].

Agora, conforme minha exigência, quando o preço seria de 7 pip [103,603] em lucro, o Stop Loss de

O 1º e 2º comércio se tornarão, digamos, 1 pip de lucro [103.543] e o Stop Loss do 3º comércio permanecerá em 103.386.

Como aqui na imagem abaixo:

A 1ª ordem GBPUSD foi fechada a 10 pips de lucro.

A 2ª ordem ainda está funcionando e o SL foi movido.

Para a 3ª ordem o SL foi movido também, o que eu não quero.

BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,0, "Buy Order",MagicNumber, 0,Blue);//tp 0
 
deVries:


Obrigado. Esta é outra maneira e uma boa maneira realmente de definir Sem TP.

Mas e quanto ao SL? Como posso fazer isso sem o modo de pedido variável Ticket?

Cumprimentos

 
if(OrdersTotal()>0){
 

for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
        
        if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber){
                
        
                sl     = OrderStopLoss(); // Stop Loss. 
                tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
                
                if(OrderType()==OP_BUY){

if (OrdersTotal()==3){

if (cnt==1){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}    // end of  if (OrdersTotal()==3)

else{    // Looking for 2nd option                           

if (OrdersTotal()==2){                           // 10 pips TP trade can be closed already

if(cnt== 0){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}  // End of  if (OrdersTotal()==2)

}  // End of  else

 

O que você pensa sobre isso? Isto está bem para a parte Stop Loss?

 
Arav007:

O que você pensa sobre isso? Isto está bem para a parte Stop Loss?


Não, está errado.

mas o que eu não gosto mais é como eu tenho que ler

é uma codificação ilegível o que você tem aqui muda seu estilo escrevendo seu código !!!!

linhas vazias não necessárias isto é o mesmo que o seu

você pode fazer assim ??

if(OrdersTotal()>0)
   {
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
     if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber)
        {
        sl     = OrderStopLoss(); // Stop Loss. 
        tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
        if(OrderType()==OP_BUY)
           {
           if (OrdersTotal()==3) 
              {
              if (cnt==1)
                 {
                 Fixed Stop Loss     
                 }
               else{
                   Trailing Stop Loss
                   }
              }    // end of  if (OrdersTotal()==3)
           else{    // Looking for 2nd option                           
               if (OrdersTotal()==2)
                 {                           // 10 pips TP trade can be closed already
                 if(cnt== 0)
                   {
                   Fixed Stop Loss
                   }
                   else{
                       Trailing Stop Loss
                       }
                 }  // End of  if (OrdersTotal()==2)
   }  // End of  else

sem linhas vazias

fácil de ver onde '{' começa e para que parte do código está dentro onde '} termina

pode acontecer que você tenha mais de 20 negócios abertos que você não pode usar dentro do loop se (OrdensTotal()===

ou se(cnt====

por que você faz este pedido?

você faz esta sequência de pedidos para percorrer todos os seus negócios um a um

O que você tem que codificar é um BreakEven

o que está fazendo o Stop Loss fixo ????

 
deVries:


não, está errado

mas o que eu não gosto mais é como eu tenho que ler

é uma codificação ilegível o que você tem aqui muda seu estilo escrevendo seu código !!!!

linhas vazias não necessárias isto é o mesmo que o seu

você pode fazer assim ??

sem linhas vazias

fácil de ver onde '{' começa e para que parte do código está dentro onde '} termina

pode acontecer que você tenha mais de 20 negócios abertos que você não pode usar dentro do loop se (OrdensTotal()===

ou se(cnt====

por que você faz este pedido?

você faz esta sequência de pedidos para percorrer todos os seus negócios um a um

O que você tem que codificar é um BreakEven

o que está fazendo o Stop Loss fixo ????


Desculpe, na verdade eu me sinto mais confortável com as linhas vazias. De qualquer forma, vou segui-lo enquanto coloco os códigos aqui.

Pensei que 'OrdensTotal()' iria buscar as ordens 'Somente' do par ao qual a EA está anexada.

Mas ele provavelmente vai buscar todas as ordens e então distinguimos as ordens do par relacionado com outras ordens.

usando esta linha:

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

Certo?

Por Stop Loss fixo, estou me referindo que o Stop Loss 'inicial' não se moverá.

Atenciosamente

 
deVries:


mude seu estilo escrevendo seu código !!!!

linhas vazias não necessárias


É uma questão de opinião, mas geralmente é considerado uma boa prática usar linhas vazias (nos lugares lógicos) ao codificar. Em qualquer caso, não é realmente algo que valha a pena apontar em outros códigos desta maneira.

Se você olhar para o código fonte do Apache ou do Linux Kernel (dois projetos Open muito bem colaborados), você verá muitas linhas em branco.


SERVIDOR WEB APACHE:

AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
                                                   void *struct_ptr,
                                                   const char *arg)
{
    int offset = (int)(long)cmd->info;

    *(const char **)((char *)struct_ptr + offset) = arg;

    return NULL;
}

LINUX KERNEL:


static int jz4740_musb_init(struct musb *musb)
{
 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 if (!musb->xceiv) {
 pr_err("HS UDC: no transceiver configured\n");
 return -ENODEV;
 }

 /* Silicon does not implement ConfigData register.
 * Set dyn_fifo to avoid reading EP config from hardware.
 */
 musb->dyn_fifo = true;

 musb->isr = jz4740_musb_interrupt;

 return 0;
} 
 
Arav007:


às vezes, uma linha vazia pode ser muito confortável, mas não se você a fizer após cada linha escrita

também o lugar do aparelho torna mais fácil a leitura do código


da MACD para utilizá-lo como exemplo

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return;
                    }
                 }
              }
           }
        }
     }

agora você vê como comparar a tabela de preços de moeda com os preços de ordem aberta de seu comércio

você tem que fazer algo assim também...

 
ydrol:

É uma questão de opinião, mas geralmente é considerado uma boa prática usar linhas vazias (nos lugares lógicos) ao codificar. Em qualquer caso, não é realmente algo que valha a pena apontar em outros códigos desta maneira.

Se você olhar para o código fonte do Apache ou do Linux Kernel (dois projetos Open muito bem colaborados), você verá muitas linhas em branco.


SERVIDOR WEB APACHE:

LINUX KERNEL:

o ponto é , com cada linha escrita, uma linha em branco

fica difícil ler grandes códigos que você continua rolando para cima/baixo para ler o código

e quando também não há lógica de colocar { } então torna ainda mais difícil encontrar bugs

 
deVries:


da MACD para utilizá-lo como exemplo

agora você vê como comparar a tabela de preços de moeda com os preços de ordem aberta de seu comércio

você tem que fazer algo assim também...


Eu tenho essa função de comparação de preços.

Como posso comparar o 'Comentário' de OrderSend() do pedido selecionado como o Número Mágico do Pedido Selecionado?

Como se eu quisesse verificar se o OrderComment() coincide com o comentário do pedido selecionado?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Agora posso comparar desta forma:

OrderComment()=="Sell Order" // ?

Também posso definir o comentário da função OrderSend() desta forma:

string comment_sell="Sell Order";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

E depois compare :

if (OrderComment()=="comment_sell") // ?

Cumprimentos

 
Arav007:


Eu tenho essa função de comparação de preços.

Como posso comparar o 'Comentário' de OrderSend() do pedido selecionado como o Número Mágico do Pedido Selecionado?

Como se eu quisesse verificar se o OrderComment() coincide com o comentário do pedido selecionado?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red);

Agora posso comparar desta forma:

OrderComment()=="Sell Order" // ?

Também posso definir o comentário da função OrderSend() desta forma:

string comment_sell="Sell Order";

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);

E depois compare :

if (OrderComment()=="comment_sell") // ?

Cumprimentos


OrderComment pode ser sobregravado por seu corretor

você está querendo... Agora, conforme minha exigência, quando o preço seria de 7 pip [103,603] em lucro, o Stop Loss de

O 1º e 2º comércio se tornarão, digamos, 1 pip de lucro [103.543] e o Stop Loss do 3º comércio permanecerá em 103.386.

make external int BreakEven = 7

         if(OrderType()==OP_BUY)
           {

            //--- check for BreakEven
            if(BreakEven>0)
              {
               if(Bid-OrderOpenPrice()>Point(*10)*BreakEven)
                 {
                  if(OrderStopLoss()<OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point(*10),OrderTakeProfit(),0,Green);
                    }
                 }
              }
           }

(* 10 ) correção a 5 dígitos do corretor para obter o valor do pip

Razão: