Chiusura di mezzi lotti. - pagina 12

 
DomGilberto:
Ah sì - capito! Penso di sapere come fare - ora torno a giocare :)
 
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;"
      }
   }
Funzionerebbe? Controllerebbe ogni tick da lì? (CloseHalfOrder() )

AGGIORNARE SOTTO - funziona :)
 

Scusa - dovrei smettere di fare 101 domande prima di provare le cose :P

Sì - questo funziona. Ora ho un funzionamento in cui si chiude non appena il tick entra e l'offerta è >= il prezzo OrderClose specificato :D

Bel passo nella giusta direzione! Ora devo mettere un morsetto per impedire che questo si chiuda costantemente a metà ogni volta che il prezzo rivisita lo stesso prezzo specificato nella funzione OrderClose :)

(Mi sono anche liberato di quel fastidioso errore 1 di OrderModify!) Hmmm, non riesco a pensare alla logica corretta per cui debba poi ATTENDERE dopo che il primo target (1:1) ha eseguito il suo ordine di chiusura... Qualche idea? Il numero di OrderTicket() è lo stesso... quindi non può essere così? Sono bloccato su quella parte ora :) dopo che ho questo pezzo, è praticamente risolto :)

Amico, ti sono così grato per il tuo aiuto!

 
DomGilberto:


Amico, ti sono così grato per il tuo aiuto!

Non c'è di che, non ho problemi ad aiutare le persone che ascoltano e sono felici di provare ad aiutare se stessi per primi
 
incredibile 1 2 3 4 5 6 7 8 9 10 11 12

che argomento enorme è

Chiudere i mezzi lotti.

spero che tu possa spiegare a qualcun altro come fare il momento che sai

101 domande... chi vuole leggerle tutte...

Per (sbarazzarsi di quel fastidioso OrderModify errore 1 troppo!)

questo accade la maggior parte del tempo se si tenta di modificare il commercio con l'impostazione che ha già

 

Amico, è così gratificante una volta che l'hai capito anche tu! Ovviamente grazie anche al tuo contributo!

L'ultima cosa su cui sono bloccato è dire al ciclo di fermare il dimezzamento dell'ordine aperto a quel prezzo di uscita OrderClose(), continuamente? Sinceramente non riesco a capire la logica? E' perfettamente in linea con il QUANDO e il COSA prezzo di chiusura parziale. Devo solo dirgli di fermarsi UNA VOLTA che ha dimezzato l'ordine?

Il problema è che una volta che OrderClose() ha chiuso a metà la posizione aperta, sarà ancora chiamato ancora e ancora perché l'"int start" sta chiamando "CloseHalfOrder()" ogni volta che c'è un "OP_BUY" aperto... Qualche idea?

//+------------------------------------------------------------------+
//| 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:
incredibile 1 2 3 4 5 6 7 8 9 10 11 12

che argomento enorme è

Chiudere i mezzi lotti.

spero che tu possa spiegare a qualcun altro come fare il momento che sai

101 domande... chi vuole leggerle tutte...

Per (sbarazzarsi di quel fastidioso OrderModify errore 1 troppo!)

questo accade la maggior parte del tempo se si tenta di modificare il commercio con l'impostazione che ha già


Mate sarò più che felice di scrivere un thread spiegando un modo semplice ed efficace per chiudere parzialmente un ordine aperto - sono bloccato con solo un ultimo pezzo, e poi funziona menta! Raccoglierò tutto in un argomento conciso / thread per gli altri da usare? (non sono sicuro di come potrei fare questo?)

Vedi l'ultimo post sopra - l'ho quasi fatto, solo che non riesco a capire la logica per dire al ciclo di STOP di chiudere le metà allo stesso prezzo di uscita OrderClose() continuamente?

Grazie per il consiglio riguardo all'errore 1 di OrderModify :)
 
DomGilberto:

Mate sarò più che felice di scrivere un thread che spiega un modo semplice ed efficace per chiudere parzialmente un ordine aperto - sono bloccato con solo un ultimo pezzo, e poi funziona menta! Raccoglierò tutto in un argomento conciso / thread per gli altri da usare? (non sono sicuro di come potrei fare questo?)

Vedi l'ultimo post sopra - l'ho quasi fatto, solo che non riesco a capire la logica per dire al ciclo di STOP di chiudere le metà allo stesso prezzo di uscita OrderClose() continuamente?

Grazie per il suggerimento anche per quanto riguarda l'errore 1 di OrderModify :)

Perché non spostare prima il tuo ticket a breakeven come ti è stato detto prima e poi chiudere una parte del trade .... se OrderLots() >= .......
 
deVries:

Perché non spostare prima il biglietto a pareggio, come ti è stato detto prima, e poi chiudere una parte del trade .... if OrderLots() >= .......

A causa di questo? Non importa se mi muovo prima verso il pareggio... Il primo ostacolo è questa parte che non riesco a capire? Anche se mi muovo prima verso il pareggio, poi chiudo la metà, questo chiamerà di nuovo TUTTE le posizioni aperte e OrderClose() allo stesso prezzo chiamando di nuovo "CloseHalfOrder();"?

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

A causa di questo? Non importa se mi muovo per andare in pari prima... Il primo ostacolo è questa parte che non riesco a capire? Anche se mi muovo prima verso il pareggio, poi chiudo la metà, questo chiamerà di nuovo TUTTE le posizioni aperte e OrderClose() allo stesso prezzo chiamando di nuovo "CloseHalfOrder();"?


Ti muovi a BE e chiudi a metà solo se lo SL non è già a BE