Posso gentilmente chiederti di portare un esempio di come si potrebbe utilizzare questa classe nella scrittura di un consulente esperto, la mia intenzione è che l'utilizzo di questa classe in modello EA non EA generare...
Il log mostra che il livello di soglia del profitto deve essere maggiore del livello di impostazione degli ordini.
Nel costruttore ho inizializzato delle variabili che non sono vuote e non sono uguali a zero. Perché ricevo un errore?
//+------------------------------------------------------------------+//|TrailingFixedPips.mqh |//| Copyright 2009-2013, MetaQuotes Software Corp. | |//| http://www.mql5.com//+------------------------------------------------------------------+#include <Expert\ExpertTrailing.mqh>
// avvio della descrizione della procedura guidata//+----------------------------------------------------------------------+//| Descrizione della classe|//| Titolo=Trailing con Stop Loss fluttuante (Fox104) | |//| Tipo=Trailing|//| Nome=FixedPips|//| Classe=CTrailingFixedPips|//| Pagina=|//| Parametro=StopLevel,int,30,Livello di trailing dello Stop Loss (in punti) | |//| Parametro=ProfitLevel,int,50,livello di trailing del Take Profit (in punti) | |//+----------------------------------------------------------------------+// descrizione della procedura guidata fine//+------------------------------------------------------------------+//| Classe CTrailingFixedPips.|//| Scopo: Classe di trailing stop con livello di stop fisso in pip. || Scopo: Classe di trailing stop con livello di stop fisso in pip. ||//| Deriva dalla classe CExpertTrailing.|//+------------------------------------------------------------------+class CTrailingFixedPips : public CExpertTrailing
{
protected:
//--- parametri di ingressoint m_stop_level;
int m_profit_level;
public:
CTrailingFixedPips(void);
~CTrailingFixedPips(void);
//--- metodi di inizializzazione dei dati protettivoid StopLevel(int stop_level) { m_stop_level=stop_level; }
void ProfitLevel(int profit_level) { m_profit_level=profit_level; }
virtualbool ValidationSettings(void);
//---virtualbool CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
virtualbool CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
};
//+------------------------------------------------------------------+//| Costruttore|//+------------------------------------------------------------------+void CTrailingFixedPips::CTrailingFixedPips(void)
{
m_stop_level = 30;
m_profit_level = 50;
}
//+------------------------------------------------------------------+//| Distruttore|//+------------------------------------------------------------------+
CTrailingFixedPips::~CTrailingFixedPips(void)
{
}
//+------------------------------------------------------------------+//||Impostazioni di convalida dei dati protetti.//+------------------------------------------------------------------+bool CTrailingFixedPips::ValidationSettings(void)
{
if(!CExpertTrailing::ValidationSettings())
return(false);
//--- controlli iniziali dei datiif((m_profit_level-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit_level!=0.0)
{
printf(__FUNCTION__+": il livello di profitto soglia deve essere maggiore del livello di impostazione dell'ordine".);
return(false);
}
//--- okreturn(true);
}
//+------------------------------------------------------------------+//| Controllo del trailing stop e/o del profitto per una posizione lunga.//+------------------------------------------------------------------+bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp)
{
//--- controlloif(position==NULL)
return(false);
if(m_stop_level==0)
return(false);
//--- controllo dei parametri if(m_profit_level==0.0) return(false);
//- già in pareggio?double open=position.PriceOpen();
if(position.StopLoss()>=open) return(false);
//--- controllo del profitto
sl=EMPTY_VALUE;
tp=EMPTY_VALUE;
if(m_symbol.Bid()-open>m_profit_level*m_adjusted_point)
sl=m_symbol.NormalizePrice(open+m_stop_level*m_adjusted_point);
//---return(sl!=EMPTY_VALUE);
}
//+------------------------------------------------------------------+//| Controllo del trailing stop e/o del profitto per la posizione corta.//+------------------------------------------------------------------+bool CTrailingFixedPips::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp)
{
//--- controlloif(position==NULL)
return(false);
if(m_stop_level==0)
return(false);
//--- controllo dei parametriif(m_profit_level==0.0) return(false);
//- già in pareggio?double open=position.PriceOpen();
if(position.StopLoss()<=open) return(false);
//--- controllo del profitto
sl=EMPTY_VALUE;
tp=EMPTY_VALUE;
if(open-m_symbol.Ask()>m_profit_level*m_adjusted_point)
sl=m_symbol.NormalizePrice(open-m_stop_level*m_adjusted_point);
//---return(sl!=EMPTY_VALUE);
}
//+------------------------------------------------------------------+
Quando si utilizza il modulo specificato nell'articolo, nel log dell'Expert Advisor vengono generati degli errori durante il caricamento dell'Expert Advisor sul grafico:
2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: errore di inizializzazione degli indicatori
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: la modifica della serie temporale è proibita
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: la modifica delle serie temporali è vietata
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: i parametri di impostazione non sono controllati
Forse non è aggiornato, dove trovarne uno nuovo o cosa correggere in questo caso?
Modificare il modulo di trailing "sampleTrailing.mqh":
//+------------------------------------------------------------------+//| Controllare i parametri di impostazione.|//| INPUT: no.|//| OUTPUT: vero se le impostazioni sono corrette, altrimenti falso. || OUTPUT: vero se le impostazioni sono corrette, altrimenti falso.//| NOTA: No.|//+------------------------------------------------------------------+bool CSampleTrailing::ValidationSettings()
{
if(!CExpertTrailing::ValidationSettings())
return(false);//--- nel caso in cui il metodo Init non sia stato richiamatoif(m_symbol==NULL) return(false);
//--- controllo dei parametriif((m_profit-m_stop_level)*m_adjusted_point<=m_symbol.StopsLevel()*m_symbol.Point() && m_profit!=0.0)
{
printf(__FUNCTION__+": il livello di profitto soglia deve essere superiore al livello di impostazione dell'ordine".);
return(false);
}
//--- okreturn(true);
}
Quando si utilizza il modulo specificato nell'articolo, nel log dell'Expert Advisor vengono generati errori durante il caricamento dell'Expert Advisor su un grafico:
Forse è obsoleto, dove trovarne uno nuovo o cosa correggere in questo caso?
Grazie per il messaggio, l'articolo è stato corretto.
Quando si apre una posizione short e si imposta lo stop loss abituale (non trailing) a 0 nei parametri, il trailing stop non viene impostato su breakeven, ma se si sposta leggermente lo stop abituale e lo si imposta ad almeno -1 pip, tutto funziona. Nel longing tutto funziona normalmente. Nel verificare la condizione che ci sia già un breakeven (lo stop è inferiore al prezzo), inizialmente 0 nel valore dello stop e non lo lascia andare oltre.
È così. È lo Stop Loss specificato che fa scattare QUESTO modulo trailing per lavorare a pareggio. Si presume cioè che la posizione DEVE avere inizialmente uno stop loss.
Aggiunto:
lo scopo di ogni articolo è quello di mostrare e far conoscere gli approcci per risolvere alcuni problemi. Poi l'utente stesso dovrebbe sviluppare il proprio codice sulla base delle conoscenze acquisite.
Dovrebbe essere integrato in modo che se non c'è uno stop, lo sia anche il trailing - riempire la variabile con almeno il valore di apertura.
(Ho ricevuto una notifica push per 2 dei tuoi messaggi, ma uno di essi è mancante - cancellato)?
Se avete bisogno di cambiare qualcosa, questo non è il problema di questo articolo. Qui potete farlo da soli, sulla base delle conoscenze acquisite. Se invece volete comporre un incarico tecnico e pensate che l'articolo verrà riscritto in base ad esso, non è così.
Come vedo le vostre azioni: riscrivere il modulo (una piccola modifica) e utilizzare.
Aggiunto: Per l'ultima volta, si prega di utilizzare il pulsante "risposta". Altrimenti non risponderò.
Quindi sì, stavo modificando il mio post e ho cliccato su "cancella" per errore - cioè in realtà ho scritto DUE post e ne ho cancellato uno. Pertanto il push è arrivato correttamente.
Grazie per il tuo grande e utile articolo,
Posso gentilmente chiederti di portare un esempio di come si potrebbe utilizzare questa classe nella scrittura di un consulente esperto, la mia intenzione è che l'utilizzo di questa classe in modello EA non EA generare...
Grazie ancora,..
Buon pomeriggio. Il modulo non funziona.
Il log mostra che il livello di soglia del profitto deve essere maggiore del livello di impostazione degli ordini.
Nel costruttore ho inizializzato delle variabili che non sono vuote e non sono uguali a zero. Perché ricevo un errore?
Buon pomeriggio. Il modulo non funziona.
Il log mostra che il livello di soglia del profitto deve essere maggiore del livello di impostazione degli ordini.
Nel costruttore ho inizializzato delle variabili che non sono vuote e non sono uguali a zero. Perché ottengo un errore?
Quando si utilizza il modulo specificato nell'articolo, nel log dell'Expert Advisor vengono generati degli errori durante il caricamento dell'Expert Advisor sul grafico:
2017.09.06 00:28:29.873 1 (EURUSD,M5) OnInit: errore di inizializzazione degli indicatori
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetPriceSeries: la modifica della serie temporale è proibita
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::SetOtherSeries: la modifica delle serie temporali è vietata
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpertBase::InitIndicators: i parametri di impostazione non sono controllati
2017.09.06 00:31:20.256 1 (EURUSD,M5) CExpert::InitIndicators: errore inizializzazione indicatori dell'oggetto trailing
2017.09.06 00:31:20.256 1 (EURUSD,M5) OnInit: errore inizializzazione indicatori
Modificare il modulo di trailing "sampleTrailing.mqh":
Quando si utilizza il modulo specificato nell'articolo, nel log dell'Expert Advisor vengono generati errori durante il caricamento dell'Expert Advisor su un grafico:
Grazie per il messaggio, l'articolo è stato corretto.
Quando si apre una posizione short e si imposta lo stop loss abituale (non trailing) a 0 nei parametri, il trailing stop non viene impostato su breakeven, ma se si sposta leggermente lo stop abituale e lo si imposta ad almeno -1 pip, tutto funziona. Nel longing tutto funziona normalmente. Nel verificare la condizione che ci sia già un breakeven (lo stop è inferiore al prezzo), inizialmente 0 nel valore dello stop e non lo lascia andare oltre.
È così. È lo Stop Loss specificato che fa scattare QUESTO modulo trailing per lavorare a pareggio. Si presume cioè che la posizione DEVE avere inizialmente uno stop loss.
Aggiunto:
lo scopo di ogni articolo è quello di mostrare e far conoscere gli approcci per risolvere alcuni problemi. Poi l'utente stesso dovrebbe sviluppare il proprio codice sulla base delle conoscenze acquisite.
Dovrebbe essere integrato in modo che se non c'è uno stop, lo sia anche il trailing - riempire la variabile con almeno il valore di apertura.
(Ho ricevuto una notifica push per 2 dei tuoi messaggi, ma uno di essi è mancante - cancellato)?
Se avete bisogno di cambiare qualcosa, questo non è il problema di questo articolo. Qui potete farlo da soli, sulla base delle conoscenze acquisite. Se invece volete comporre un incarico tecnico e pensate che l'articolo verrà riscritto in base ad esso, non è così.
Come vedo le vostre azioni: riscrivere il modulo (una piccola modifica) e utilizzare.
Aggiunto: Per l'ultima volta, si prega di utilizzare il pulsante "risposta". Altrimenti non risponderò.
Ok, lo scriverò io stesso. Hai cancellato uno dei tuoi post (dimmi se l'hai fatto, così non dovrò cercarlo)?
Puoi aprire un nuovo argomento, qualcosa come"Modulo di mantenimento delle posizioni aperte per raggiungere il pareggio" - penso che un tale argomento sarà utile.
Quindi sì, stavo modificando il mio post e ho cliccato su "cancella" per errore - cioè in realtà ho scritto DUE post e ne ho cancellato uno. Pertanto il push è arrivato correttamente.