[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 793
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 ... :)
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
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 barif(Volume[0]>1) return;
//---- get Moving Average
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditionsif(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 conditionsif(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?
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
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
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.
Questo è quello che ho scritto: "Gli ordini di acquisto sono aperti al prezzo Ask".
Ma sul grafico si vede il prezzo Bid.
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.
La tua foto non mostra i punti.
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
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)
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;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).
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%:
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)
... 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 è... :)