Fechamento de meio lote. - página 12

 
DomGilberto:
Ah, sim - entendi! Acho que sei como fazer isso - de volta ao jogo agora :)
 
int start()
   {
   if(IsNewCandle())
      {
      CheckForMaTrade();
      if(UseCandleTrail)AdjustTrail();
      }

   if(OpenOrdersThisPair(Symbol())>0)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
      }
   }
Será que isso funcionaria? Verificaria cada carrapato a partir daí? (CloseHalfOrder() )

ATUALIZAR ABAIXO - funciona :)
 

Desculpe - eu deveria parar de fazer 101 perguntas antes de experimentar as coisas :P

Sim - isso funciona. Agora tenho-o funcionando onde - assim que o tick chega e a oferta é >= o preço OrderClose especificado :D

Belo grande passo na direção certa! Agora para colocar um grampo para impedir que isto feche constantemente a metade cada vez que o preço revisa o mesmo preço especificado na função OrderClose :)

(Livrei-me também desse irritante erro OrderModify 1!) Hmmm, não consigo pensar na lógica correta para que ele então ESPERE após o primeiro alvo (1:1) ter feito sua ordem de fechamento... Alguma idéia? O número do OrderTicket() é o mesmo... então não pode ser assim? Eu estou preso nessa parte agora :) depois de ter essa parte, ela está rachada praticamente :)

Cara, estou muito grato por sua ajuda!

 
DomGilberto:


Estou muito grato por sua ajuda!

Você é bem-vindo, eu não tenho nenhum problema em ajudar as pessoas que escutam e estão felizes em tentar ajudar-se a si mesmas primeiro
 
inacreditável 1 2 3 4 5 6 7 8 9 10 11 12

que grande tema é

Fechamento de meio lote.

Espero que você possa explicar a outra pessoa como fazer no momento em que você souber

101 perguntas... quem quer lê-las todas...

Pois (Livre-se também daquele erro irritante da OrderModify 1!)

isso acontece na maioria das vezes se você tentar modificar o comércio com a configuração que já tem

 

Cara, é tão gratificante quando se descobre isso também! Obviamente, graças também à sua contribuição!

A última parte em que estou preso é dizer ao loop para parar de reduzir pela metade o pedido aberto no preço de saída do OrderClose(), continuamente? Eu honestamente não consigo entender a lógica? Está no ponto com QUANDO e A QUE preço fechar parcialmente. Eu só preciso dizer a ele para parar UMA VEZ que ele reduziu a ordem pela metade uma vez?

O problema é que, uma vez que o OrderClose() tenha fechado pela metade na posição aberta, ele ainda será chamado novamente e novamente porque o "int start" está chamando "CloseHalfOrder()" toda vez que houver um "OP_BUY" aberto... Alguma idéia?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...


//+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   //Print("The minimum lots are: ",DoubleToStr(minLot,Digits));

   double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   //Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));

   double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
   Print("The Lots to close is: ",DoubleToStr(half,Digits));

for(int c=OrdersTotal()-1; c>=0; c--)
      {
      if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
         {
         Print("Order Ticker Number = ",OrderTicket());
         Print("Order Lots Open = ",OrderLots());
         }
      else
          {
          Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?
          continue;
          }

      double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
      Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
      
      if(OrderMagicNumber()==MagicNumber)
         if(OrderSymbol()==Symbol())
            if(OrderLots()>minLot)
            {
            Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
            int HalfCloseTicket = OrderTicket();
            
            if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
               {
               Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
               bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
               if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
               if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
               }
            }
         if(Close_Half_Order_Buy==True)
         {
         MoveToBreakEven(); // This is a void.
         EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
         }    
     }
}
 
deVries:
inacreditável 1 2 3 4 5 6 7 8 9 10 11 12

que grande tema é

Fechamento de meio lote.

Espero que você possa explicar a outra pessoa como fazer no momento em que você souber

101 perguntas... quem quer lê-las todas...

Pois (Livre-se também daquele erro irritante da OrderModify 1!)

isto acontece na maioria das vezes se você tentar modificar o comércio com a configuração que já tem


Companheiro, ficarei mais do que feliz em escrever um tópico explicando uma maneira simples e eficaz de fechar parcialmente uma ordem aberta - estou preso com apenas um último pedaço, e depois está funcionando a menta! Eu vou reunir tudo isso em um tópico / linha concisa para outros usarem? (não tem certeza de como eu faria isso?)

Veja o último post acima - eu já quase o fiz, só não consigo descobrir a lógica para dizer ao laço para parar de fechar as metades com o mesmo preço de saída OrderClose() continuamente?

Obrigado pela dica em relação ao erro OrderModify 1 também :)
 
DomGilberto:

Companheiro, ficarei mais do que feliz em escrever um tópico explicando uma maneira simples e eficaz de fechar parcialmente uma ordem aberta - estou preso com apenas um último pedaço, e depois está funcionando a menta! Eu vou reunir tudo isso em um tópico / linha concisa para outros usarem? (não tem certeza de como eu faria isso?)

Veja o último post acima - eu já quase o fiz, só não consigo descobrir a lógica para dizer ao laço para parar de fechar as metades com o mesmo preço de saída OrderClose() continuamente?

Obrigado pela dica em relação ao erro OrderModify 1 também :)

Por que não primeiro mover seu bilhete para alcançar o ponto de equilíbrio isto lhe é dito antes e depois fechar uma parte do comércio .... se OrderLots() >= .......
 
deVries:

Por que não mudar primeiro o seu bilhete para o breakeven isto lhe é dito antes e depois fechar uma parte do negócio .... se OrderLots() >= .......

Por causa disso? Não importa se eu me mudo para o breakeven primeiro... O primeiro obstáculo é esta parte que eu não consigo entender? Mesmo que eu me movimente primeiro para quebrar o equilíbrio, então feche a metade, isto chamará QUALQUER posição aberta novamente e OrderClose() pelo mesmo preço novamente chamando "CloseHalfOrder();"?

int start()
   {
    
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
      
   }
 
DomGilberto:

Por causa disso? Não importa se eu me mudo para me vingar primeiro... O primeiro obstáculo é esta parte que eu não consigo entender? Mesmo que eu me mova primeiro para quebrar o equilíbrio, depois feche a metade, isto chamará QUALQUER posição aberta novamente e OrderClose() pelo mesmo preço novamente chamando "CloseHalfOrder();"?


Você só se muda para BE e fecha metade se o SL ainda não estiver em BE
Razão: