Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 91

 
Jenya77769:

Ciao, i due numeri meno q e w sono confrontati in modo errato, quando sono uguali, l'operatore if pensa che uno sia maggiore dell'altro, qual è l'errore? Quando q = -0,0002 e w è anche -0,0002, res12=falso, perché?

perché è un doppio e non sono esattamente uguali.

FIGURA : confrontare i valori normalizzati

 
Jenya77769:

Ciao, i due numeri meno q e w sono confrontati in modo errato, quando sono uguali, l'operatore if pensa che uno sia maggiore dell'altro. Quando q = -0,0002 e w è anche -0,0002, res12=falso, perché?


Confronta la loro differenza con zero, questo è più corretto e funziona per numeri di qualsiasi tipo.

 

Gente, ecco una domanda -

C'è una linea orizzontale, lunga un giorno.

Ha un'etichetta di testo, un oggetto etichetta.

Come posso fare in modo che questa etichetta di testo sia sempre al centro della linea (a metà del giorno), in qualsiasi zoom del grafico?

 
John Smith:

Gente, ecco una domanda -

C'è una linea orizzontale, lunga un giorno.

Ha un'etichetta di testo, un oggetto etichetta.

Come posso fare in modo che questa etichetta di testo sia sempre al centro della linea (a metà del giorno), in qualsiasi zoom del grafico?

Cambiare la coordinata X dell'etichetta, cioè calcolarla come il centro della linea
 
Renat Akhtyamov:
Cambia la coordinata X del marcatore, cioè calcolala come il centro della linea

Beh, è comprensibile, ma come faccio?


Avevo una seconda opzione - con marcatore legato all'inizio del giorno, usando una variabile di testo per inserire spazi davanti al valore del marcatore, a seconda dello zoom del grafico.

In sostanza, voglio che l'etichetta sia a sinistra con lo zoom vicino, e con lo zoom fuori l'etichetta dovrebbe essere spostata al centro. Poiché i livelli di zoom in mt4 sono standard, allora per ogni livello di zoom non è così difficile trovare il giusto numero di spazi. Ma ecco una domanda - mql4 ha una tale funzione che determinerebbe il livello corrente di zoom del grafico?

Allora tutto sarà semplice, qualcosa del genere: "se chartzoom = 50% allora spacesnumber = 10", ecc.

Dove spacesnumber è una variabile stringa che definisce il numero di spazi prima del testo dell'etichetta, come __________1.23456 - ci sono 10 spazi con il segno _.

 
John Smith:

Beh, è comprensibile, ma come faccio?


Avevo una seconda opzione - con marcatore legato all'inizio del giorno, usando una variabile di testo per inserire spazi davanti al valore del marcatore, a seconda dello zoom del grafico.

In sostanza, voglio che l'etichetta sia a sinistra con lo zoom vicino, e con lo zoom fuori l'etichetta dovrebbe essere spostata al centro. Poiché i livelli di zoom in mt4 sono standard, allora per ogni livello di zoom non è così difficile trovare il giusto numero di spazi. Ma ecco una domanda - mql4 ha una tale funzione che determinerebbe il livello corrente di zoom del grafico?

Allora tutto sarà semplice, qualcosa del genere: "se chartzoom = 50% allora spacesnumber = 10", ecc.

Dove spacesnumber è una variabile stringa che definisce il numero di spazi prima del testo dell'etichetta, come __________1.23456 - ci sono 10 spazi con il segno _.

Leggi i miei commentiqui
 

Ciao a tutti, ho bisogno di nuovo di aiuto. Non riesco a capire quale sia l'errore. Rastrellare di nuovo. Pesca a strascico da parte di MA. Ho bisogno di tracciare diversi ordini. Ci possono essere dei loop. Finché c'è un ordine aperto, tutto funziona perfettamente. Non appena un altro ordine è aperto, iniziano i baccanali - modifica costante (con uno stesso parametro) del primo ordine (l'errore 1 non è mostrato). In questo caso il secondo ordine è modificato come dovrebbe essere - quando le condizioni appropriate sono soddisfatte (il primo ordine, quando le condizioni cambiano, cambia i suoi parametri e continua la modifica costante con quelli nuovi). Non riesco a trovare la ragione. Chi potrebbe darmi un suggerimento?

void TrailingStop()
{
   int i;
   int k          = OrdersTotal(); 
   double Ma      = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   int MinDistans = int(MarketInfo(Symbol(), MODE_STOPLEVEL));
   
   double lips1  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   double lips2  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 2);
   double teeth1 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
   double teeth2 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 2);
   double jaw1   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 1);
   double jaw2   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 2);
   
   for (i = 0; i < k; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
                  break;
               
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
               {   
                  if((OrderStopLoss() + TrailingStep*Point) < Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);                 
                     
                     if((Bid - MinDistans) > Sl && (OrderStopLoss() + TrailingStep*Point) < Sl)
                     { 
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }     
 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_SELL)
            {
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
                  break;
                  
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
               {
                  if(MathAbs(OrderStopLoss() - TrailingOpen*Point) > Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);
                 
                     if((Ask + MinDistans) < Sl && (OrderStopLoss() - TrailingStep*Point) > Sl)
                     {
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }
   }
}



 
Youri Lazurenko:

Ciao a tutti, ho bisogno di nuovo di aiuto. Non riesco a capire quale sia l'errore. Rastrellare di nuovo. Pesca a strascico da parte di MA. Ho bisogno di tracciare diversi ordini. Ci possono essere dei loop. Finché c'è un ordine aperto, tutto funziona perfettamente. Non appena un altro ordine è aperto, iniziano i baccanali - modifica costante (con uno stesso parametro) del primo ordine (l'errore 1 non è mostrato). In questo caso il secondo ordine è modificato come dovrebbe essere - quando le condizioni appropriate sono soddisfatte (il primo ordine, quando le condizioni cambiano, cambia i suoi parametri e continua la modifica costante con quelli nuovi). Non riesco a trovare la ragione. Chi può aiutarmi?


1. Il ciclo dovrebbe essere invertito.

2. A cosa serve la pausa?

 
Artyom Trishkin:

1. Il ciclo deve essere invertito.

2. a cosa serve la pausa?


Salve.

1 - "Il ciclo deve essere inverso" - vuoi dire for(i = k; i > 0; i--)?

2. "A cosa serve la pausa?" - Per uscire. Generalmente, all'inizio, dopo aver selezionato il tipo di ordine e se è contro la rottura della tendenza. Poi selezioniamo di nuovo il tipo di ordine e se è in tendenza, lo modifichiamo.

Questa variante di rottura mi ha aiutato prima. Quando hai suggerito una soluzione per la pesca a strascico da parte di MA. Se, per esempio, in un trade di acquisto, lo stop era sopra la MA, ho avuto l'errore 1 fino a quando la MA era sopra lo stop, dopo di che l'errore è scomparso. Quando ho introdotto la condizione che se lo stop è sopra la MA, allora rompere, tutto è tornato alla normalità.

 
Youri Lazurenko:

Salve.

1 - "Il ciclo deve essere invertito" - vuoi dire for(i = k; i > 0; i--)?

2. "A cosa serve la pausa?" - Per uscire. Generalmente, all'inizio, dopo aver selezionato il tipo di ordine e se è contro la rottura della tendenza. Poi selezioniamo di nuovo il tipo di ordine e se è in tendenza, lo modifichiamo.

Questa variante di rottura mi ha aiutato prima. Quando hai suggerito una soluzione per la pesca a strascico da parte di MA. Se, per esempio, in un trade di acquisto, lo stop era sopra la MA, ho avuto l'errore 1 fino a quando la MA era sopra lo stop, dopo di che l'errore è scomparso. Quando imposto la condizione che se lo stop è sopra la MA, tutto si è normalizzato.

La pausa completa il ciclo. E il resto delle posizioni allora?
Controlla dove si trova lo stop rispetto al suo nuovo livello.
Il ciclo inverso da OrdersTotal()-1 a >=0
Motivazione: