Chiusura di mezzi lotti.

 

Così sono riuscito a incorporare un ciclo che cancella l'ordine pendente e ne riapplica un altro sulla base del fatto che lo stop è sincronizzato con la media mobile. I lotti verrebbero calcolati in base alla distanza in pip dall'entrata allo stop. Non solo questo, ma sono riuscito a capire come funziona il profit target con la distanza dello stop come rapporto (extern int - qualcosa che scelgo 1-2-3 R;R ecc.) - quindi anche questo si muove.

Quindi grazie per i commenti sui post precedenti per quanto riguarda la stampa del mio codice e altri dettagli!


Comunque - sto cercando di chiudere metà della posizione quando il prezzo raggiunge il 50% del mio obiettivo di profitto del rapporto 2x... So che ho bisogno di stampare le cose sul Journal e lo sto facendo ora, ma qualcuno potrebbe dirmi se sto scrivendo in modo sbagliato? Forse per quanto riguarda "OrderLots()/2"?

"btp" = restituisce un prezzo specifico.

         if(Bid == btp-OrderOpenPrice()/2+OrderOpenPrice()){
         
         for(int q=OrdersTotal()-1; q >=0; q--)
         {
            if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==true){
              Print(" Stop loss value for the order is ", OrderStopLoss());
              Print("lots for the order ",OrderLots());
            }
            else if(OrderSelect(q,SELECT_BY_POS,MODE_TRADES)==false){
              Print(" OrderSelect failed error code is ",GetLastError());
            }
            if(OrderMagicNumber()==MagicNumber)
             if(OrderSymbol()==Symbol())
              if(OrderType()==OP_BUYSTOP)
               
               CloseHalfLong = OrderClose(OrderTicket(),OrderLots()/2,Bid,3,CLR_NONE);
         
            if(CloseHalfLong!=TRUE)Print("LastError = ", GetLastError());
         }
         }
 
DomGilberto:

Così sono riuscito a incorporare un ciclo che cancella l'ordine pendente e ne riapplica un altro sulla base del fatto che lo stop è sincronizzato con la media mobile. I lotti verrebbero calcolati in base alla distanza in pip dall'entrata allo stop. Non solo questo, ma sono riuscito a capire come funziona il profit target con la distanza dello stop come rapporto (extern int - qualcosa che scelgo 1-2-3 R;R ecc.) - quindi anche questo si muove.

Quindi grazie per i commenti sui post precedenti per quanto riguarda la stampa del mio codice e altre cose!


Comunque - sto cercando di chiudere metà della posizione quando il prezzo raggiunge il 50% del mio obiettivo di profitto del rapporto 2x... So che ho bisogno di stampare le cose sul Journal e lo sto facendo ora, ma qualcuno potrebbe dirmi se sto scrivendo in modo sbagliato? Forse per quanto riguarda "OrderLots()/2"?

"btp" = restituisce un prezzo specifico.

Non credo che OrderLots()/2 sia sufficiente (scusate il gioco di parole) in tutte le situazioni, sono abbastanza sicuro che avete bisogno di convalidare la dimensione della posizione che state cercando di chiudere contro MarketInfo() MODE_LOTSTEP e MODE_MINLOT

Guarda qui: https://www.mql5.com/en/forum/143966

 
RaptorUK: Non credo che OrderLots()/2 sia sufficiente (scusate il gioco di parole) in tutte le situazioni, sono abbastanza sicuro che avete bisogno di convalidare la dimensione della posizione che state cercando di chiudere contro MarketInfo() MODE_LOTSTEP e MODE_MINLOT
Esattamente. Vedi il mio CloseOrder()
 

Grazie RaptorUK - Non sono sicuro di dove sto guardando WHRoeder sul tuo link, ma grazie.

Sono solo io, o il processo di chiusura dei lotti su una posizione aperta è un po' contro intuitivo... sembra inutilmente complicato, considerando quello che voglio fare...

Amico, penso di aver guardato questo codice abbastanza per un giorno - non sto capendo come usare MarkerInfo() con OrderClose... sembra inutilmente complesso.

 
DomGilberto:

Grazie RaptorUK - Non sono sicuro di dove sto guardando WHRoeder sul tuo link, ma grazie.

Sono solo io, o il processo di chiusura dei lotti su una posizione aperta è un po' contro intuitivo... sembra inutilmente complicato, considerando quello che voglio fare...

Amico, penso di aver guardato questo codice abbastanza per un giorno - non sto capendo come usare MarkerInfo() con OrderClose... sembra inutilmente complesso.

Se la dimensione della tua posizione d'ordine è di 0,3 lotti e vuoi chiuderne la metà, sarebbe 0,15 lotti, se il MODE_LOTSTEP del tuo Broker è 0,1 allora 0,15 è una dimensione di lotto non valida. . . quindi prima di usare OrderClose() convalida la dimensione della posizione che stai per chiudere.
 
Ah l'ho preso! Grazie RaptorUK! Ultima domanda, quando dici di convalidare la dimensione del lotto, stai dicendo di confrontarla usando le istruzioni If?
 
DomGilberto: Non sono sicuro di dove sto guardando WHRoeder sul tuo link, ma grazie.
Il link più in alto in quella pagina
 
Ah, ho capito! Questa è una codifica epica... :o!

Spero di poter mantenere quel livello di programmazione un giorno... (con un po' più di pazienza da parte tua - sto scherzando :P)


Grazie WHRoeder!
 
DomGilberto:
Ah, ho capito! Grazie RaptorUK! Ultima domanda, quando dici di convalidare la dimensione del lotto, stai dicendo di confrontarla usando le istruzioni If?

No, sto dicendo di regolarlo in modo che sia conforme a MODE_LOTSTEP e MODE_MINLOT . . . allora è valido ( validato ), se guardi il link che ho postato . . .

mlots = MathFloor(mlots / lotstep) * lotstep; 

Supponiamo che mlots sia 0.15 mlots (MODE_MINLOT) sia 0.1 e lotstep (MODE_LOTSTEP) sia 0.1 quindi il codice farebbe così

mlots = MathFloor(0.15 / 0.1) * 0.1; 
//  MathFloor(0.15 / 0.1) ==  MathFloor( 1.5 )  gives 1

//  mlots = 1 * 0.1;  

quindi mlots verrebbe regolato da 0.15 a 0.1 e sarebbe valido.

 
Ah, ci siamo capiti! Grazie per averlo chiarito - capito!
Motivazione: