[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 485

 
FOReignEXchange:


Non capisco? Sto solo guardando nell'aiuto, lì OrderSelect() usa una condizione. E non l'ho visto da nessuna parte senza il vero.

if è una dichiarazione di condizione. E ci dovrebbe essere una condizione tra parentesi. Questo mi sembra più logico. Anche se non ci può essere alcuna differenza.


specifica:

bool OrderSelect( int index, int select, int pool=MODE_TRADES) 

restituisce vero o falso

vedi https://docs.mql4.com/ru/basis/operators/if.

Se l'espressione è vera, l'operatore1 viene eseguito, e il controllo viene dato all'operatore che segue l'operatore2 (cioè l'operatore2 non viene eseguito). Se l'espressione è falsa, l'operatore2 viene eseguito.

se (espressione) operator1 else operator2

La parte else dell'operatore if può essere omessa. Pertanto, le dichiarazioni if annidate con la parte else omessa possono causare ambiguità. In questo caso else è collegato al più vicino operatore if precedente nello stesso blocco che non ha una parte else.

cioè il confronto tra OrderSelect()==true non è necessario - basta usare OrderSelect() o !OrderSelect() invece di OrderSelect()==false

 

Non è quello che voglio dire.

È che quando seleziono un ordine, lo scrivo sempre per intero.

if(OrderSelect(count,SELECT_BY_POS,MODE_TRADES)==true)

Non l'ho mai visto senza il vero.

abolk:
то есть сравнение OrderSelect()==true делать не обязательно - достаточно просто использовать OrderSelect() или !OrderSelect() вместо OrderSelect()==false

Ho capito.

 
FOReignEXchange:

Non ne ho mai visto uno senza vero.


State guardando i codici delle persone sbagliate.
 
FOReignEXchange:

Non è quello che voglio dire.

È che quando seleziono un ordine, lo scrivo sempre per intero.

Non l'ho mai visto senza il vero.

Ho capito.


due voci perfettamente uguali - una voce non è peggiore o migliore dell'altra - ognuno fa come vuole, come capisce, come è abituato
 
sergeev:

Stai guardando i codici delle persone sbagliate.


A proposito, devo riconoscere che FOReignEXchange.

Ho aperto "Moving Average.mq4" e l'ho visto:

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
 
abolk:


Print() per emettere il valore della variabile global_trailing_SP direttamente nella funzione che avete definito.

Dove leggete il valore di questa variabile?


Wow! )) Se stampo() il valore della variabileglobal_trailing_SP dalla funzione presentata, vedo un valore completamente inaspettato nel log (evidenziato in giallo). Mentre prima al di fuori di questa funzione viene stampato correttamente (di fronte al punto rosso).

global_trailing_SP è una variabile globale. È dichiarato al di fuori della funzione Start(),

double global_trailing_SP = 0.0; 

Dopo che la funzione trailing stop cambia con successo il valore della posizione principale, il valore della perdita di stop della posizione principale viene assegnato in un ciclo separato alla variabileglobal_trailing_SP .

   for(count = OrdersTotal()-1; count >= 0; count--)
      {  OrderSelect(count,SELECT_BY_POS,MODE_TRADES);
         if(OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble(OrderStopLoss(),dgt); Print("global_trailing_SP: ",DoubleToStr(global_trailing_SP,5));  }
      }
Questo è il valore indicato dal punto rosso qui sopra.

Questo valore viene poi passato alla funzione dove avvengono varie modifiche dell'ordine. Ma come risultato, il log mostra un valore che non mi aspettavo e il valore di Stop Loss non è certo modificato. Come si può risolvere questo problema? Si scopre che non tutto è sempre così logico come può sembrare a prima vista)))

 

Non è meglio farlo qui, dove c'è il SELLSTOP?

if((global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) 
{  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP,0,0,DeepPink);
Print("Условие ModifyOrder исполнилось: global_trailing_SP: ",global_trailing_SP,", Stop Loss: ",OrderStopLoss());  }
else   Print("Условие не выполняется!");

In modo che tutto sia esattamente come in SELL.

 
FOReignEXchange:

Non è meglio farlo qui, dove si trova il SELLSTOP?

In modo che tutto sia esattamente come in SELL.


Non sembra essere il problema in questo caso. Leggi più sopra.
 
tol64:


Wow! )) Se stampo() il valore della variabile global_trailing_SP dalla funzione presentata, vedo un valore assolutamente inaspettato nel giornale (evidenziato in giallo). Mentre prima al di fuori di questa funzione viene stampato correttamente (di fronte al punto rosso).

global_trailing_SP è una variabile globale. È dichiarato al di fuori della funzione Start(),

Dopo che la funzione trailing stop cambia con successo il valore della posizione principale, in un ciclo separato la variabile global_trailing_SP viene assegnata con il valore di stop loss della posizione principale.

Questo è il valore indicato dal punto rosso qui sopra.

Questo valore viene poi passato alla funzione dove avvengono varie modifiche dell'ordine. Ma come risultato, il log mostra un valore che non mi aspettavo, mentre il valore di Stop Loss non viene certo modificato. Come si può risolvere questo problema? Si scopre che non tutto è sempre così logico come può sembrare a prima vista)))


mostra come si legge la variabile global_trailing_SP
 

Quindi non capisco. L'ordine pendente esiste al momento della modifica dell'ordine principale?

Se esiste, allora la modifica dell'ordine principale e la modifica dell'ordine in sospeso sono nello stesso blocco. E se l'ordine principale viene modificato, quello in sospeso dovrebbe fare lo stesso, se questa è la vostra idea.

Un'altra cosa è che la nostra idea non funziona. Questo significa un errore nella condizione. Provate a fare tutto nello stesso modo come nella condizione di modifica dell'ordine principale, come ho mostrato sopra. Mi sembra che l'errore sia nella logica. Non sono sorpreso. Tutto è molto complicato qui. Dovresti renderlo più semplice.

Motivazione: