[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 793

 
artmedia70:
Non stiamo aprendo Buy at Ask price ???????


Questo è quello che ho scritto: "Gliordini di acquisto sono aperti al prezzo Ask".

Ma sul grafico si vede il prezzo Bid.

 
PapaYozh:


Questo è quello che ho scritto: "Gli ordini di acquisto sono aperti al prezzo Ask".

Ma sul grafico si vede il prezzo Bid.

Ho sempre entrambi i prezzi sul grafico... Nelle impostazioni del terminale con F8 ho abilitato la visualizzazione dei prezzi Ask`... Ho anche corretto un po' il post precedente sullo spread - non può essere così.
 
artmedia70:
Non stiamo aprendo un Buy su Ask ??????? E non può esserci uno spread di 60 pips (se lo prendi dopo il gap), e se lo prendi prima ... allora lo spread sull'EUR di 325 pips equivale a ... :)

la tua foto non mostra i punti.
 
PapaYozh:

La tua foto non mostra i punti.
Sì, mi pento .... può essere fuorviante (come le parentesi nel tuo post, dove mi hanno fatto perdere il senso della tua risposta sulle domande e ho risposto nel modo sbagliato... :) )
 
artmedia70:
Ho sempre entrambi i prezzi sul grafico... Nelle impostazioni del terminale ho abilitato la visualizzazione di Ask`ts con F8... E corretto un po 'il post precedente circa la diffusione - non può essere.


Ma il prezzo Ask non è visibile nelle barre.

Sulla diffusione. È uno spread a cinque cifre? Se sì, spread allargato sulle notizie + slippage = sono 6 pips pieni (60 a cinque cifre) per voi

 
PapaYozh:


Ma il prezzo Ask non è visibile nelle barre.

Sulla diffusione. È uno spread a cinque cifre? Se sì, allora spread esteso sulle notizie + slippage = sono 6 pips pieni (60 a cinque cifre)

Questo è il punto: quattro... :(
 
PapaYozh:

Se ho capito bene il tuo problema, non dovresti essere guidato dal tempo di chiusura dell'ordine. Devi partire dall'inizio della barra in cui il segnale di apertura e la posizione sono stati aperti. Quello che farei, personalmente, è il seguente:

1) creare una variabile di tipo datetime dove inserirei il valore Time[0] se l'ordine viene piazzato con successo;

2) nella funzione init(), inizializzate questa variabile con il valore "0". Preferisco un'inizializzazione esplicita, poiché è più chiara quando si rivede il codice;

3) quando appaiono le condizioni per aprire una posizione, prima di inviare la richiesta OrderSend(...), confronta il valore di questa variabile con il valore Time[0] e se non sono uguali, invia una richiesta.

4) se la posizione si apre, memorizzerei il valore di Time[0] nella stessa variabile.


Grazie per il chiarimento - ma pensi che invece di confrontare con il valore di Time[0], provare a dare questo compito prima della richiesta OrderSend(...): controllare se c'è una chiusura StopLoss-y sulla barra corrente? Allora ho bisogno di inserire la funzione duble StopLoss() che funzionerà con la variabile StopLoss che ho annunciato? O è ancora fondamentalmente NON POSSIBILE? Per me è importante che non si apra una nuova posizione sulla barra che ha preso una perdita, anche se corrisponde ai parametri dell'apertura.

extern double Stoploss           =1000;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
    
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }
//----
  }

La questione è che i fattori temporali dovrebbero essere considerati per ultimi - molto spesso scivolano - o piuttosto l'interpretazione di un ordine in qualche modo risulta essere diversa (ambigua).

 
obla4ko, crea una variabile datetime x e lascia che sia il tempo di apertura della barra in cui si è verificato lo stop loss. E in condizione aperta impostare che (Tempo[0]!=x). In questo caso x dovrebbe essere aggiornato su un nuovo stoploop innescato. Questa è la prima variante. E il secondo, come sto scrivendo per la terza volta, dopo uno stop innescato in attesa di 1 barra, questo sarebbe esattamente lo stesso, non è logico?
 
PapaYozh:


Ma non si può vedere il prezzo Ask nelle barre.

Sulla diffusione. È uno spread a cinque cifre? Se sì, allora lo spread si è allargato sulle notizie + lo slippage = sono 6 pips pieni (60 a cinque cifre)

Inoltre, secondo me, ci può essere un "tornante", successivamente ripulito :)), ma "salvato nella memoria" dei tempi minori, a cui non si arriva...

E la domanda sui test sulla storia:

può un Expert Advisor (uno semplice!) - ) sullo stesso periodo storico, con gli stessi parametri danno risultati completamente diversi?

L'unica cosa che ho fatto, tra queste due prove, è stato aggiornare l'archivio delle citazioni... e che potrebbe aver portato a questo risultato? - poi si scopre che tutta la storia è una stronzata!?

 

Qualcuno può dirmi perché MathRound() si comporta in modo strano. I valori grandi contano, quelli piccoli no...

C'è un semplice codice per aumentare i valori di alcune variabili del 10%:

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/10*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/10*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

I valori calcolati sono registrati. Se tutte le linee tranne la prima sono divise per 10, allora questa conta come numero 100 e non ci sono problemi:

2010.08.11 19:16:20 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: Funzione di calcolo: SLs = 11 e TPs = 66, TStartS = 60, TStop.Sell = 20, TStopLastPosS = 60, TStop.SellLP = 25

Ciò che è segnato in verde è ciò che conta nella prima linea di codice.

Ma se metti la divisione per 100 (come dovrebbe essere)

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/100*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10 0*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/100*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

... allora tutte le linee tranne quella superiore non contano affatto - i valori iniziali rimangono, come se non fossero stati aggiunti

dieci per cento:

2010.08.11 19:41:03 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: Funzione di calcolo: SLs = 11 e TPs = 66, TStartS = 30, TStop.Sell = 10, TStopLastPosS = 30, TStop.SellLP = 15

Aiutami a capire cosa e dove cazzo è... :)