Può il prezzo != prezzo ? - pagina 6

 

Questo è quello che io chiamo un doppio barattolo di vermi.... (gioco di parole voluto;)

Sembra che tra le varie funzioni personalizzate proposte, nessuna abbia raggiunto il consenso. Qualcuno vuole condividere a questo punto (nessun gioco di parole), quale usano come funzione CompareDouble quotidianamente?

Ovviamente dobbiamo usare qualche funzione CompareDouble personalizzata, se vogliamo sistemi affidabili.

 

Il problema può essere ignorato, per lo più a meno che il valore ESATTO sia importante.

Se sto cercando di aprire sopra un prezzo di trigger (possibilmente non normalizzato) uso Bid > trigger. Se capita che si inneschi al prezzo a causa di un arrotondamento, non mi interessa.

Se sto cercando di aprire a o intorno a un prezzo di trigger (possibilmente non normalizzato), verifico la presenza di un gap: Bid > trigger && Bid < trigger+3*pips2dbl. Il mercato può facilmente muoversi di un intero pip in un tick quindi Bid == trigger è sempre sbagliato e MathAbs(bid-trigger) < Point/2 è corretto ma molto probabilmente non funzionerà.

Se l'uguaglianza è importante, come ad esempio cercare di spostare uno SL ma sono troppo vicino al mercato(livello di stop) allora e uso Bid - newSL > StopLelvel - Point/2

 
WHRoeder:

Il problema può essere ignorato, per lo più a meno che il valore ESATTO sia importante.

Se sto cercando di aprire sopra un prezzo di trigger (possibilmente non normalizzato) uso Bid > trigger. Se capita che si inneschi al prezzo a causa di un arrotondamento, non mi interessa.

Se sto cercando di aprire a o intorno a un prezzo di trigger (possibilmente non normalizzato), verifico la presenza di un gap: Bid > trigger && Bid < trigger+3*pips2dbl. Il mercato può facilmente muoversi di un intero pip in un tick quindi Bid == trigger è sempre sbagliato e MathAbs(bid-trigger) < Point/2 è corretto ma molto probabilmente non funzionerà.

Se l'uguaglianza è importante, come ad esempio cercare di spostare uno SL ma sono troppo vicino al mercato (livello di stop) allora e uso Bid - newSL > StopLelvel - Point/2


Grazie. Ora questo è quello che chiamerei filo decotto...

Infatti quello che hai menzionato è molto vicino alla mia applicazione: Sto stabilendo se il nuovo TakeProfit è diverso (secondo gli standard del broker o di MQL4) dal TakeProfit originale già impostato e inviato. Sto confrontando due valori di indicatore e due valori di TakeProfit prima che OrderModify sia chiamato.

if (Volume[0]>1)return;
 
       for(int b=OrdersTotal()-1;b>=0; b--)
       {
       if(atr2kTP == atr2kTPAdjust|| btphold==btp)) return;//-----------This is where I am comparing them, and where the function would go.
         if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
           if(OrderMagicNumber()==MAGICMA)
             if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)                                  
                  atr2kTPAdjust=atr2kTP; 
                       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
 
       }              
         for(int s=OrdersTotal()-1;s>=0; s--)
         {
          if(atr2kTP == atr2kTPAdjust|| stphold==stp) return;
           if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
             if(OrderMagicNumber()==MAGICMA)
               if(OrderSymbol()==Symbol())
                  if(OrderType()==OP_SELL)                      
                      atr2kTPAdjust=atr2kTP;                      
                        OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
         }
 }
 

Questo era il mio codice finale di OrderMod, usando il filtro Point/2 per confrontare i valori degli ordini doppi. Ha funzionato senza errori e ha modificato gli ordini ogni volta. Grazie!

void AutoAdjustTakeProfit()
{
if (Volume[0]>1 || atr2kTP == atr2kTPAdjust)return;  

       for(int b=OrdersTotal()-1;b>=0; b--)
          { 
            if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
               if(OrderMagicNumber()==MAGICMA)
                 if(OrderSymbol()==Symbol())
                    {          
                      if(OrderType()==OP_BUY)// buy ordeer section
                        {  
                          if((btphold-btp> Point/2) || (btphold-btp<-Point/2))  //--------------------------This is the DoubleCompare Code
                            {                                                                             
                              atr2kTPAdjust=atr2kTP; 
                              OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
                            }
                        } 
                     
                      if(OrderType()==OP_SELL) // Sell ordeer section
                        {   
                          if((stphold-stp>Point/2) || (stphold-stp <-Point/2)) //--------------------------This is the DoubleCompare Code
                            {                                                  
                               atr2kTPAdjust=atr2kTP;                      
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
                            }
                        }
                    }
           }
}
 
  1. if (Volume[0]>1)return;
    Se si perde qualche tick all'inizio di una nuova barra, il codice non viene eseguito. Usare sempre il tempo
  2.   if((stphold-stp>Point/2) || (stphold-stp <-Point/2))
      if( MathAbs(stphold - stp) > Point/2) // Simplified
    Di nuovo, vi interessa davvero l'uguale? Se avete usato:
      if( MathAbs(stphold - stp) >= Point)
    potrebbe scattare a poco meno di un punto. Questo è ancora lo stesso che non è uguale.
  3. Perché spostarlo di un punto, spostarli di pip ed evitare il problema dell'arrotondamento e ERR_TOO_FREQUENT_REQUESTS
 

newBar funziona benissimo.

MathAbs spacca, pensavo che convertisse solo i negativi sul lato sinistro delle equazioni, non sapevo che convertisse anche la differenza in valore positivo.

La precisione punto/2 non è importante per i miei scopi di segnalazione. Volevo solo evitare gli errori di arrotondamento per evitare una codifica debole.

Preferirei calpestare gli errori di frequenza così come gli errori di arrotondamento. Quindi voglio usare i calcoli più stabili senza errori, al contrario del codice di calcolo più accurato.

Quindi aumentando i miei confronti TakeProfit MathAbs (stphold - stp) ancora di più fino a >2*pips dovrei avere le maggiori possibilità di eliminare gli errori di arrotondamento e gli errori di frequenza ?

Grazie mille.

removed.

 
moneycode:

newBar funziona benissimo.

In precedenza ho trovato problemi con IsNewCandle, ecco perché sono passato a un trigger di volume. Se l'elaborazione dei tick del volume può essere lenta o mancante, allora anche le candele potrebbero esserlo. Quindi entrambi erano una cattiva idea.

Dato che newBar funziona bene, ho cercato di identificare i fallimenti di IsNewCandle, con questo codice qui sotto:

La chiamata alla funzione IsNewCandle() è all'interno di start(), SOPRA la linea di codice newBar. (Questo test di stampa non ha funzionato, invece ha stampato su ogni nuova barra.

Secondo me è una cattiva idea mettere il controllo di una nuova barra in una funzione, una funzione serve a rendere il codice riutilizzabile . . . provate a chiamare IsNewCandle() due volte durante lo stesso primo tick di una nuova barra e vedete che risposte ottenete . . .

A proposito . . . questo è fuori tema per questo thread, se volete continuare la discussione spostatela in un nuovo thread. Metterò in ordine più tardi . .

 
WHRoeder:

....Siccome i prezzi possono cambiare solo di un multiplo di punto, punto/2 è proprio questo....


Se state confrontando i prezzi, bene. Se invece state confrontando dei doppi, ad esempio le medie dei prezzi, Punto/2 non va bene.
 
HarriMQL4:

Se state confrontando i prezzi, bene. Se però state confrontando dei doppi, per esempio delle medie di prezzo, Point/2 non va bene.


Hai notato il titolo di questo topic?

;)

 
HarriMQL4:

Se state confrontando i prezzi, bene. Se però state confrontando dei doppi, per esempio delle medie di prezzo, Point/2 non va bene.
I prezzi sono doppi. . .