Ciao,
Dopo aver guardato a lungo e aver studiato alcuni strumenti o alcune strategie di questo (meraviglioso) forum, mi è apparso che l'indicatore CCI è spesso usato come un filtro affidabile.
Segni di riferimento: +100/-100 e 0 sono significativi. Ma prima di andare troppo lontano, cominciamo con il punto di riferimento 0.
Non appena questo segno di riferimento 0 viene rotto, il prezzo va obbligatoriamente nella stessa direzione.
Allora sarebbe possibile fare un EA (per mt3 o mt4) con i valori semplici?
Indicatore:
CCI (10 o 14) (possibilità di cambiare periodo)
FT: M30 o H1
SL: 20 (esterno)
TP: 200 (esterno)
TP: 6 (esterno)
Regole : Aprire : incrocio effettuato dal punto di riferimento 0
Chiudere : con SL, o TP, o TS o nuovo incrocio effettuato dal segno di riferimento 0.
Cominciamo semplicemente e secondo i primi risultati, metteremo dei filtri.
Questo metodo non vuole prendere il massimo di pips con rischio ma garantirsi dei piccoli trade affidabili e vantaggiosi ogni volta.
Grazie a tutti per il vostro interesse per questa richiestaBruno,
Vuoi dire che se il CCI sta salendo attraversando lo 0 allora è un segnale per comprare. Giusto?
Se il CCI sta andando verso il basso e attraversa lo zero è vendere.
È giusto?
Se sì, allora sembra che io sia in grado di farlo.
Ciao Newdigital,
You mean that if CCI is going up crossing the 0 so it is signal to buy. Right?
Se il CCI sta andando verso il basso e attraversa lo zero è da vendere.
È giusto?
Se sì così sembra che io sono in grado di farlo.sì è bene che, vuoi un'immagine di conferma?
Ti ringrazio per il tuo lavoro e il tuo interesse. Cosa ne pensi di questa strategia?
Possiamo anche tracciare la MA (25) sul grafico CCI (14), e prendere lo stesso segnale ma prima, o semplicemente aspettare che il CCI attraversi il livello 0 e confermi la direzione.
IMHO è meglio usare il grafico giornaliero, non è così rumoroso come il 1H.
Ho creato questo EA.
Sto cercando di allegarlo al post.
Ma penso che dovrebbe essere qualche filtro o qualche altro indicatore.
E t/s = 6 non è una buona idea, credo.
Comunque l'ho fatto.
Dovrebbe essere esatto secondo le vostre regole.
E possiamo aggiungere qualsiasi altro indicatore se vogliamo.
Possiamo anche tracciare la MA (25) sul grafico CCI (14), e prendere lo stesso segnale ma prima, o semplicemente aspettare che il CCI attraversi il livello 0 e confermi la direzione. IMHO è meglio usare il grafico giornaliero, non è così rumoroso come il 1H.
Ciao Krall,
Grazie per il tuo interesse e la tua idea.
Avevo pensato a questa possibilità, ma come ho scritto più in alto, iniziare con una semplice ea, senza filtro per convalidare i primi risultati.
BrunoFX,
Non posso allegarlo ora quindi sto postando il codice.
Spero che non ci siano bug.
//| CCI_ea.mq4 |
//| code by Newdigital |
//| https://www.forex-tsd.com |
//| using Gordago software |
//| http://www.gordago.com |
//| |
//| 21.02.2006 CCI_ea by idea of BrunoFX |
//| (see the thread |
//| https://www.forex-tsd.com/suggestions-trading-systems/1089-cci_ea.html |
//| |
//+--------------------------------------------------------------------------+
#property copyright "BrunoFX and newdigital"
#property link "https://www.forex-tsd.com"
extern int MAGIC = 976714;
extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern double Lots = 0.10;
extern int Slippage = 4;
extern double lStopLoss = 20;
extern double sStopLoss = 20;
extern double lTakeProfit = 200;
extern double sTakeProfit = 200;
extern double lTrailingStop = 6;
extern double sTrailingStop = 6;
extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "CCI_ea";
extern string PARAMETERS_ALARM = "PARAMETERS ALARM";
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern string PARAMETERS_HOURS = "TRADING HOURS";
extern bool UseHourTrade = True;
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;
extern string PARAMETERS_INDICATOR_ONE = "CCI";
extern int CCIPeriod=14;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
double diCCI0=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI1=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI2=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d3=(0);
double diCCI4=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI5=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI6=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d7=(0);
double diCCI8=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI9=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI10=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d11=(0);
double diCCI12=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,1);
double diCCI13=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double diCCI14=iCCI(NULL,0,CCIPeriod,PRICE_TYPICAL,0);
double d15=(0);
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((diCCI0=d3)){
OpenBuy();
return(0);
}
if ((diCCI4>diCCI5 && diCCI6<=d7)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((diCCI8>diCCI9 && diCCI10<=d11)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((diCCI12=d15)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }E alcuni miglioramenti riguardanti la chiusura degli ordini.
Possiamo scegliere ora il periodo di CCI per la chiusura degli ordini.
//+--------------------------------------------------------------------------+
//| CCI_ea.mq4 |
//| code by Newdigital |
//| https://www.forex-tsd.com |
//| using Gordago software |
//| http://www.gordago.com |
//| |
//| 21.02.2006 CCI_ea by idea of BrunoFX |
//| (see the thread |
//| https://www.forex-tsd.com/suggestions-trading-systems/1089-cci_ea.html |
//| |
//+--------------------------------------------------------------------------+
#property copyright "BrunoFX and newdigital"
#property link "https://www.forex-tsd.com"
extern int MAGIC = 976714;
extern string PARAMETERS_TRADE = "PARAMETERS TRADE";
extern double Lots = 0.10;
extern int Slippage = 4;
extern double lStopLoss = 20;
extern double sStopLoss = 20;
extern double lTakeProfit = 200;
extern double sTakeProfit = 200;
extern double lTrailingStop = 6;
extern double sTrailingStop = 6;
extern string PARAMETERS_EXPERT = "PARAMETERS EXPERT";
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "CCI_ea";
extern string PARAMETERS_ALARM = "PARAMETERS ALARM";
extern bool UseSound = True;
extern string NameFileSound = "alert.wav";
extern string PARAMETERS_HOURS = "TRADING HOURS";
extern bool UseHourTrade = True;
extern int FromHourTrade = 8;
extern int ToHourTrade = 18;
extern string PARAMETERS_INDICATOR_ONE = "CCI";
extern int CCIPeriod_signal=14;//taking the signal to open buy or sell
extern int CCIPeriod_close_buy=14;
extern int CCIPeriod_close_sell=14;
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);
} else Comment("");
}else Comment("");
if(Bars<100){
Print("bars less than 100");
return(0);
}
if(lStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(lTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
if(sStopLoss<10){
Print("StopLoss less than 10");
return(0);
}
if(sTakeProfit<10){
Print("TakeProfit less than 10");
return(0);
}
double diCCI0=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,1);
double diCCI1=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double diCCI2=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double d3=(0);
double diCCI4=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,1);
double diCCI5=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double diCCI6=iCCI(NULL,0,CCIPeriod_signal,PRICE_TYPICAL,0);
double d7=(0);
double diCCI8=iCCI(NULL,0,CCIPeriod_close_buy,PRICE_TYPICAL,1);
double diCCI9=iCCI(NULL,0,CCIPeriod_close_buy,PRICE_TYPICAL,0);
double diCCI10=iCCI(NULL,0,CCIPeriod_close_buy,PRICE_TYPICAL,0);
double d11=(0);
double diCCI12=iCCI(NULL,0,CCIPeriod_close_sell,PRICE_TYPICAL,1);
double diCCI13=iCCI(NULL,0,CCIPeriod_close_sell,PRICE_TYPICAL,0);
double diCCI14=iCCI(NULL,0,CCIPeriod_close_sell,PRICE_TYPICAL,0);
double d15=(0);
if(AccountFreeMargin()<(1000*Lots)){
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (!ExistPositions()){
if ((diCCI0=d3)){
OpenBuy();
return(0);
}
if ((diCCI4>diCCI5 && diCCI6<=d7)){
OpenSell();
return(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if ((diCCI8>diCCI9 && diCCI10<=d11)){
CloseBuy();
return(0);
}
}
if(OrderType()==OP_SELL){
if ((diCCI12=d15)){
CloseSell();
return(0);
}
}
}
TrailingPositionsBuy(lTrailingStop);
TrailingPositionsSell(sTrailingStop);
return (0);
}
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
void TrailingPositionsBuy(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (Bid-OrderOpenPrice()>trailingStop*Point) {
if (OrderStopLoss()<Bid-trailingStop*Point)
ModifyStopLoss(Bid-trailingStop*Point);
}
}
}
}
}
}
void TrailingPositionsSell(int trailingStop) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>trailingStop*Point) {
if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)
ModifyStopLoss(Ask+trailingStop*Point);
}
}
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
if (fm && UseSound) PlaySound(NameFileSound);
}
void CloseBuy() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
if (fc && UseSound) PlaySound(NameFileSound);
}
void CloseSell() {
bool fc;
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
if (fc && UseSound) PlaySound(NameFileSound);
}
void OpenBuy() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossBuy();
ldTake = GetTakeProfitBuy();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenBuy);
if (UseSound) PlaySound(NameFileSound);
}
void OpenSell() {
double ldLot, ldStop, ldTake;
string lsComm;
ldLot = GetSizeLot();
ldStop = GetStopLossSell();
ldTake = GetTakeProfitSell();
lsComm = GetCommentForOrder();
OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpenSell);
if (UseSound) PlaySound(NameFileSound);
}
string GetCommentForOrder() { return(Name_Expert); }
double GetSizeLot() { return(Lots); }
double GetStopLossBuy() { return (Bid-lStopLoss*Point);}
double GetStopLossSell() { return(Ask+sStopLoss*Point); }
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); }
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); }Non posso allegare l'immagine, ma l'EA sembra non funzionare correttamente, apre gli ordini su quasi ogni candela...
Ho pensato che il commercio sarà aperto solo una volta, quando il CCI attraversa il livello 0. Dai un'occhiata al grafico. Perché abbiamo così tanti scambi?
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Salve,
Dopo aver guardato a lungo e aver studiato alcuni strumenti o alcune strategie di questo (meraviglioso) forum, mi è sembrato che l'indicatore CCI sia spesso usato come un filtro affidabile.
Segni di riferimento: +100/-100 e 0 sono significativi. Ma prima di andare troppo lontano, cominciamo con il punto di riferimento 0.
Non appena questo segno di riferimento 0 viene rotto, il prezzo va obbligatoriamente nella stessa direzione.
Allora sarebbe possibile fare un EA (per mt3 o mt4) con i valori semplici?
Indicatore:
CCI (10 o 14) (possibilità di cambiare periodo)
FT: M30 o H1
SL: 20 (esterno)
TP: 200 (esterno)
TP: 6 (esterno)
Regole : Aprire : incrocio effettuato dal punto di riferimento 0
Chiudere : con SL, o TP, o TS o nuovo incrocio effettuato dal segno di riferimento 0.
Cominciamo semplicemente e secondo i primi risultati, metteremo dei filtri.
Questo metodo non vuole prendere il massimo di pips con rischio ma garantirsi dei piccoli trade affidabili e vantaggiosi ogni volta.
Grazie a tutti per il vostro interesse per questa richiesta