Un po' di aiuto necessario - pagina 8

 
qgmql:

Questo codice va bene? se no, allora per favore scrivi del codice invece del link, sono ancora confuso.


NO https://www.mql5.com/en/forum/133792/page3#550831

dà il valore del pip per un lotto scambiato su un simbolo specifico

 

1. Ci sono alcuni ordini di acquisto aperti e un ordine di acquisto in sospeso. tutti gli ordini sono nella stessa coppia di valute. come fa un EA a selezionare solo l'ultimo ordine aperto per controllare i suoi limiti di stop?

2. ogni ordine aperto è stato piazzato a prezzi diversi con tp 20. è possibile per l'ea modificare tutti gli ordini aperti tranne l'ultimo, e cambiare i loro limiti di stop ai limiti di stop dell'ultimo ordine aperto?

ESEMPIO:

Sr    type   price     tp
1     buy    1.23950   1.23750
------------------------------
#  buylimit   1.23750   1.23550

//////////////////////////////

1    buy     1.23950   1.23550 // tp modified and now equal to 2nd tp
2    buy     1.23750   1.23550 // 2nd tp
------------------------------
#  buylimit   1.23550   1.23350

//////////////////////////////

1    buy     1.23950   1.23350 // tp modified and now equal to 3rd tp
2    buy     1.23750   1.23350 // tp modified and now equal to 3rd tp
3    buy     1.23550   1.23350 // 3rd tp
------------------------------
#  buylimit   1.23350   1.23150
 

Un po' di confusione con...

//Signal Filter
#define  XXX   0
#define  AAA   1
#define  BBB   2

int SignalS = XXX;

if(SignalS & AAA !=0)
OrderSend(NULL, OP_BUY, LotSize, Ask, Slippage, SL, TP, WindowExpertName(), MagicID, 0, Blue);

Il vecchio editor accetta le linee evidenziate, ma il nuovo editor dà un avviso "Espressione non booleana".

Ho provato allora...

if(SignalS && AAA !=0)
//or
if(SignalS !=0 & AAA !=0)

Ora il nuovo editor li accetta entrambi, ma... quale funzionerà allo stesso modo della linea evidenziata? se entrambi sono veri, quale dovrei usare? (più conveniente?)

PS: Il codice qui sotto è accettato anche dal nuovo editor...

if((SignalS & AAA) !=0)

Il nuovo editor li accetta tutti e tre, ma... quale funzionerà allo stesso modo della linea evidenziata? Se tutti sono veri, quale sarà più conveniente per me?

 
qgmql: Il nuovo editor li accetta tutti e tre, ma... quale funzionerà allo stesso modo della linea evidenziata? se sono tutti veri, allora quale sarà più conveniente per me?
  1. Non usare una maschera di bit
    //Signal Filter
    #define  XXX   0
    #define  AAA   1
    #define  BBB   2
    
    int SignalS = XXX;
    
    if(SignalS & AAA !=0)
    enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if(SignalS == AAA)
    
    Codice autodocumentante.

  2. Usare una maschera di bit:
    Su build 600+ != ha una precedenza maggiore di bitwise e, si DEVE usare
    (SignalS & AAA) !=0
    Sulle build precedenti il bitwise ed era superiore alla moltiplicazione

    Operazione

    Descrizione

    Ordine di esecuzione

    ()

    []

    .

    Chiamata di funzione

    Riferimento ad un elemento della matrice

    Riferimento ad un elemento della struttura

    Da sinistra a destra

    !

    ~

    ++

    --

    (tipo)

    sizeof

    Negazione logica

    Negazione bitwise (complemento)

    Cambio di segno

    Aumenta di uno

    Decremento di uno

    Tipizzazione

    Determinazione della dimensione in byte

    Da destra a sinistra

    *

    /

    %

    Moltiplicazione

    Divisione

    Divisione del modulo

    Da sinistra a destra

    +

    Addizione

    Sottrazione

    Da sinistra a destra

    <<

    >>

    Spostamento a sinistra

    Spostamento a destra

    Da sinistra a destra

    <

    <=

    >

    >=

    Meno di

    Meno di o uguale

    Maggiore di

    Maggiore o uguale

    Da sinistra a destra

    ==

    !=

    Uguale

    Non uguale

    Da sinistra a destra

    &

    Operazione bitwise AND

    Da sinistra a destra

    ^

    OR esclusivo bitwise

    Da sinistra a destra

    |

    Operazione OR bitwise

    Da sinistra a destra

    &&

    Operazione AND logico

    Da sinistra a destra

    ||

    Operazione OR logica

    Da sinistra a destra

    ?:

    Operatore condizionale

    Da destra a sinistra

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    Assegnazione

    Moltiplicazione con assegnazione

    Divisione con assegnazione

    Modulo con assegnazione

    Addizione con assegnazione

    Sottrazione con assegnazione

    Spostamento a sinistra con assegnazione

    Spostamento a destra con assegnazione

    AND bitwise con assegnazione

    OR esclusivo con assegnazione

    OR Bitwise con assegnazione

    Da destra a sinistra

    ,

    Virgola

    Da sinistra a destra

    () Chiamata di funzione Da sinistra a destra [] Riferimento a un elemento della matrice
    !      Negazione logica Da destra a sinistra - Operazione di cambio di segno ++ Incremento -- Decremento ~ Negazione bitwise (complemento)
    Operazione bitwise AND Da sinistra a destra| Operazione bitwise OR ^ Operazione bitwise OR esclusivo << Spostamento a sinistra >> Spostamento a destra
    * Moltiplicazione Da sinistra a destra / Divisione % Divisione modulo
    + Addizione Da sinistra a destra - Sottrazione
    < Meno di Da sinistra a destra <= Meno di o uguale > Più grande di >= Più grande di o uguale == Uguale!= Non uguale
    || OR logico Da sinistra a destra
    && AND logico Da sinistra a destra
    = Assegnazione Da destra a sinistra += Addizione di assegnazione -= Sottrazione di assegnazione *= Moltiplicazione di assegnazione /= Divisione di assegnazione %= Modulo di assegnazione >>= Spostamento a destra di assegnazione <<= Spostamento a sinistra di assegnazione &= AND bitwise di assegnazione |= OR bitwise di assegnazione ^= OR esclusivo di assegnazione
    Comma Da sinistra a destra
 

WHRoeder ho trovato il tuo codice (seleziona l'ultimo ordine a mercato) e ho aggiunto delle linee evidenziate per controllare il suo prezzo tp e per impostare lo stesso prezzo tp sugli ordini precedenti:

int PositionIndex;    //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP=0;
TotalNumberOfOrders = OrdersTotal();    // <-- we store the number of Orders in the variable

for(PositionIndex = TotalNumberOfOrders - 1; PositionIndex >= 0 ; PositionIndex --)  //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if( ! OrderSelect(PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if( OrderMagicNumber() == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol() == Symbol()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType() == OP_BUY           // <-- is the Order a Buy Order ? 
      ||   OrderType() == OP_SELL ) )      // <-- or is it a Sell Order ?
   if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
      //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

Una linea in più...

if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);

Per favore, guida se mi sbaglio.

(Tutti gli ordini a mercato + in attesa sono solo di acquisto, non di vendita o solo di vendita, non di acquisto e voglio che il tp di tutti gli ordini a mercato sia cambiato ogni volta, quando viene aperto un nuovo ordine a mercato ).

QUESTO È DAVVERO DIFFICILE PER ME, MA VOGLIO FARLO :(

 
La tua indentazione è sbagliata perché non hai usato le parentesi graffe
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); break;
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
Cosa è in realtà il tuo codice
if(OrderTakeProfit()>0) 
   Ord_TP = OrderTakeProfit(); 
break;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
Le cose stanno diventando complicate per me. Penso che dovrei scrivere il codice dall'inizio. e incollerò ogni parte del codice qui. forse potrei capire meglio.