Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ciao Mladen,
Sto cercando di codificare questo in MT5, ma penso che non sto usando l'implementazione corretta,
la mia idea è di usare più indicatori, per favore dammi una luce... ;-)
this is a sample to understand I'm trying to do..
in this sample:
I put only 3 indicadors.
//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
IN_OUT=0, //in & out
IN=1, //in
OUT=2, //out
};
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT; //Itrend usage => In & Out
RSI_InOut = IN_; //RSI usage =>only IN
MFI_InOut = OUT_; //MFI usage =>only OUT
//
//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance
{
if (!iT_InOut==OUT_) //Itrend (only options with IN)
{
m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
if (!RSI_InOut==OUT_) //RSI (only options with IN)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
if (!MFI_InOut==OUT_) //MFI (only options with IN)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
///We have opened order it's EXIT
else
{
//Itrend (only options with EXIT)
if (!iT_InOut==IN_)
{
m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
//RSI (only options with EXIT)
if (!RSI_InOut==IN_)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
//MFI (only options with EXIT)
if (!MFI_InOut==IN_)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
Ciao Mladen,
Sto cercando di codificare questo in MT5, ma penso che non sto usando l'implementazione corretta,
la mia idea è di usare più indicatori, per favore dammi una luce... ;-)
this is a sample to understand I'm trying to do..
in this sample:
I put only 3 indicadors.
//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
IN_OUT=0, //in & out
IN=1, //in
OUT=2, //out
};
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT; //Itrend usage => In & Out
RSI_InOut = IN_; //RSI usage =>only IN
MFI_InOut = OUT_; //MFI usage =>only OUT
//
//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance
{
if (!iT_InOut==OUT_) //Itrend (only options with IN)
{
m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
if (!RSI_InOut==OUT_) //RSI (only options with IN)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
if (!MFI_InOut==OUT_) //MFI (only options with IN)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
///We have opened order it's EXIT
else
{
//Itrend (only options with EXIT)
if (!iT_InOut==IN_)
{
m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
//RSI (only options with EXIT)
if (!RSI_InOut==IN_)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
//MFI (only options with EXIT)
if (!MFI_InOut==IN_)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
Ciao ragazzi,
Ho davvero bisogno di aiuto, sto costruendo un esperto con l'indicatore waddah attar scalping, la logica funziona, tutto è ok.
Tranne una cosa, come si vede nello screenshot del backtest, ad ogni barra verde l'esperto apre un acquisto, lo stesso per le barre rosse. Voglio solo 1 trade per ogni cambio di colore.
Quello che voglio è :
L'indicatore diventa verde ---> apre un acquisto ---> l'acquisto si chiude ---> L'indicatore diventa rosso ---> apre una vendita ---> la vendita si chiude ---> ripeto
Voglio solo 1 trade per ogni cambio di colore.
Ecco il mio codice: (lo stesso per lo short)
bool SendLong = false, SendShort = false;
double clnowsell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar);
double clpresell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar+1);
double clnowbuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar);
double clprebuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar+1);
//Long trade
//Specific system filters
//if (some condition) SendLong = true;
if (clnowbuy > 0) SendLong = true;
Qualcuno può per favore venire con una soluzione semplice, guardate la linea 1265, la logica viene qui.
Grazie mille!
Ciao ragazzi,
Ho davvero bisogno di aiuto, sto costruendo un esperto con l'indicatore waddah attar scalping, la logica funziona, tutto è ok.
Tranne una cosa, come si vede nello screenshot del backtest, ad ogni barra verde l'esperto apre un acquisto, lo stesso per le barre rosse. Voglio solo 1 trade per ogni cambio di colore.
Quello che voglio è :
L'indicatore diventa verde ---> apre un acquisto ---> l'acquisto si chiude ---> L'indicatore diventa rosso ---> apre una vendita ---> la vendita si chiude ---> ripeto
Voglio solo 1 trade per ogni cambio di colore.
Ecco il mio codice: (lo stesso per lo short)
bool SendLong = false, SendShort = false;
double clnowsell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar);
double clpresell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar+1);
double clnowbuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar);
double clprebuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar+1);
//Long trade
//Specific system filters
//if (some condition) SendLong = true;
if (clnowbuy > 0) SendLong = true;
Qualcuno può per favore venire con una soluzione semplice, guardate la linea 1265, la logica viene qui.
Grazie mille!
Cambia la condizione in
Lo stesso per i pantaloncini
Grazie Mladen!
A volte ci blocchiamo e abbiamo bisogno di uno sguardo nuovo sul nostro lavoro.
Grazie ancora!
Grazie Mladen!
A volte ci blocchiamo e abbiamo bisogno di uno sguardo nuovo sul nostro lavoro.
Grazie ancora!
Bonjour,
Ravi de voir une Française, tiens moi au courant des tes résultats avec waddah attar ;)
Pippi verdi
Ciao ragazzi sto cercando di modificare un indicatore ema-rsi che può mostrare una freccia verso l'alto o verso il basso quando si incrociano 4 ema e l'rsi è > o < 50.
Il mio problema è che queste frecce non si aggiornano perogni tick una volta che sono apparse, ho bisogno di cambiare timeframe se voglio controllare se le condizioni sono ancora buone per mostrare la freccia. Potete dirmi dov'è il problema? Ho postato il codice.
Grazie a voi
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 4
#property indicator_width2 4
double CrossUp[];
double CrossDown[];
extern int FasterEMA1 = 6;
extern int SlowerEMA1 = 12;
extern int FasterEMA2 = 7;
extern int SlowerEMA2 = 14;
extern int RSInowPeriod = 6;
extern int barsBack = 2000;
extern bool AlertsMessage = true;
extern bool AlertsSound = true;
extern bool debug = false;
extern double K = 1.0 ;
bool EMACrossedUp = false;
bool RSICrossedUp = false;
bool EMACrossedDown = false;
bool RSICrossedDown = false;
int SignalLabeled = 0; // 0: initial state; 1: up; 2: down.
int upalert=false,downalert=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 241);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 242);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int limit, i, counter;
double fasterEMA1now, slowerEMA1now, fasterEMA1previous, slowerEMA1previous, fasterEMA2now, slowerEMA2now, fasterEMA2previous, slowerEMA2previous;
double RSInow;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,barsBack);
for(i = limit; i>=0; i--) {
counter=i;
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
fasterEMA1now = iMA(NULL, 0, FasterEMA1, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMA1previous = iMA(NULL, 0, FasterEMA1, 0, MODE_EMA, PRICE_CLOSE, i+1);
fasterEMA2now = iMA(NULL, 0, FasterEMA2, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMA2previous = iMA(NULL, 0, FasterEMA2, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMA1now = iMA(NULL, 0, SlowerEMA1, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMA1previous = iMA(NULL, 0, SlowerEMA1, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMA2now = iMA(NULL, 0, SlowerEMA2, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMA2previous = iMA(NULL, 0, SlowerEMA2, 0, MODE_EMA, PRICE_CLOSE, i+1);
RSInow=iRSI(NULL,0,RSInowPeriod,PRICE_CLOSE,i);
if (RSInow > 50) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" RSI UP ");
RSICrossedUp = true;
RSICrossedDown = false;
}
if (RSInow < 50) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" RSI DOWN ");
RSICrossedUp = false;
RSICrossedDown = true;
}
if ((fasterEMA1now >= slowerEMA1now) && (fasterEMA1previous < slowerEMA1previous) && (fasterEMA2now >= slowerEMA2now) && (fasterEMA2previous < slowerEMA2previous) ) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" EMA UP ");
EMACrossedUp = true;
EMACrossedDown = false;
}
if ((fasterEMA1now <= slowerEMA1now) && (fasterEMA1previous > slowerEMA1previous) && (fasterEMA2now <= slowerEMA2now) && (fasterEMA2previous > slowerEMA2previous)) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" EMA DOWN ");
EMACrossedUp = false;
EMACrossedDown = true;
}
if ((EMACrossedUp == true) && (RSICrossedUp == true) && (SignalLabeled != 1)) {
CrossUp[i] = Low[i] - K*Range;
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" SIGNAL UP ");
if(i<=2 && AlertsMessage && !upalert)
{
Alert (Symbol()," ",Period(),"M BUY SIGNAL ");
//SendMail("EMA Cross Up on "+Symbol(),"");
upalert=true;
downalert=false;
}
if(i<=2 && AlertsSound && !upalert)
{
PlaySound("alert.wav");
upalert=true;
downalert=false;
}
SignalLabeled = 1;
}
else if ((EMACrossedDown == true) && (RSICrossedDown == true) && (SignalLabeled != 2)) {
CrossDown[i] = High[i] + K*Range;
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" SIGNAL DOWN ");
if(i<=2 && AlertsMessage && !downalert)
{
Alert (Symbol()," ",Period(),"M SELL SIGNAL ");
//SendMail("EMA Cross Down on "+Symbol(),"");
downalert=true;
upalert=false;
}
if(i<=2 && AlertsSound && !downalert)
{
PlaySound("alert.wav");
downalert=true;
upalert=false;
}
SignalLabeled = 2;
}
}
return(0);
}
//end
In quel codice non vedo affatto l'uso dell'indicatore (e come i valori vengono copiati negli array corrispondenti)
Ciao Mladen,
Ecco il "sample-ea-modular.mq5" con del codice all'interno... e con l'interfaccia che ha l'idea che voglio.
Sto cercando di renderlo modulare, l'idea è di ottimizzare separatamente in/out di ogni indicatore...
Se riesco a fare questo con il "sample-ea-modular.mq5" cambierò il vero EA.
la base reale è il Ea-sample.mq5. (sto postando solo per voi vedere tutti gli indicatori)
Caro @mladen,
Se sei in grado di risolvere l'errore menzionato qui sotto, ti prego di essere molto contento.
Grazie...
"Domanda: C'è un avviso quando ho collegato il grafico e uso l'offset gmt automatico.
oguz
Come al solito (lo sai già) non commento il codice decompilato, ma vedo che sei sulla strada giusta: se funziona (l'opzione), usala. Se non funziona allora non farlo. Per quanto vedo che è solo un messaggio (non un errore) quindi ...
Caro @mladen,
Se sei in grado di risolvere l'errore menzionato qui sotto, ti prego di essere molto contento.
Grazie...
"Domanda: C'è un avviso quando ho collegato il grafico e uso l'offset gmt automatico.