Comment coder ? - page 327

 

Bonjour à tous, j'ai cette erreur particulière avec mon EA sur Stocastic.

Mes critères sont les suivants :

Lorsque mon stocEquator croise à la hausse (Uptrend), seul le long sera déclenché lorsque mon stocTrigger croise à la hausse et lorsque le stocEquator croise à la baisse (Downtrend), seul le short sera déclenché lorsque le stocTrigger croise à la baisse.

Cependant, lorsque j'exécute l'EA pour le tester, aucune transaction n'est déclenchée et je me demandais quel pouvait être le problème ici et j'apprécierais que quelqu'un puisse m'aider.

Merci d'avance pour votre aide.

Salutations

Terrance

int isCrossedTrigger= 0 ;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger ;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger ;

si ((diff1Trigger*diff2Trigger)<0)

{

si (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1 ;

sinon isCrossedTrigger= 2 ;

}

int isCrossedEquator = 0 ;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Equator = shortStoc1Equator-longStoc1Equator ;

double diff2Equator = shortStoc2Equator-longStoc2Equator ;

si ((diff1Equator*diff2Equator)<0)

{

si (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1 ;

sinon isCrossedEquator = 2 ;

}

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Acheter

}

si(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Vendre

}

return(0) ;

}

return(0) ;

 
tkuan77:
Bonjour à tous, j'ai cette erreur particulière avec mon EA sur Stocastic.

Mes critères sont les suivants :

Lorsque mon stocEquator croise à la hausse (tendance haussière), seul le long sera déclenché lorsque mon stocTrigger croise à la hausse et lorsque le stocEquator croise à la baisse (tendance baissière), seul le court sera déclenché lorsque le stocTrigger croise à la baisse.

Cependant, lorsque j'exécute l'EA pour le tester, aucune transaction n'est déclenchée et je me demandais quel pouvait être le problème ici et j'apprécierais que quelqu'un puisse m'aider.

Merci d'avance pour votre aide.

Salutations

Terrance

int isCrossedTrigger= 0 ;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger ;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger ;

si ((diff1Trigger*diff2Trigger)<0)

{

si (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1 ;

sinon isCrossedTrigger= 2 ;

}

int isCrossedEquator = 0 ;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Equator = shortStoc1Equator-longStoc1Equator ;

double diff2Equator = shortStoc2Equator-longStoc2Equator ;

si ((diff1Equator*diff2Equator)<0)

{

si (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1 ;

sinon isCrossedEquator = 2 ;

}

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Acheter

}

si(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Vendre

}

return(0) ;

}

retour(0) ;

Terrance

La seule chose que je n'ai pas pu vérifier est la variable "total".

Le code devrait fonctionner si la variable "total" est correctement définie. Voici un indicateur de test que j'ai utilisé avec vos conditions et il émet des signaux d'achat et de vente valides (exécutez l'indicateur en mode visuel et vous verrez quand il alerte), l'erreur est donc ailleurs.

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 

Salut mladen, merci pour la mise en évidence. Je suis retourné voir mes codes et je n'ai pas pu comprendre ce que vous vouliez dire par la variable "total". Quelle pourrait être la cause de mon erreur ?

Salutations

Terrance

//+------------------------------------------------------------------+

//| My_First_EA.mq4 |

//| TK|

//| Plate-forme de trading MetaTrader 4 / MetaQuotes Software Corp. |

//+------------------------------------------------------------------+

#property copyright "TK"

#property link "http://www.metaquotes.net"

//--- paramètres d'entrée

extern double TakeProfit=500.0 ;

extern double Lots=0.1 ;

extern double StopLoss=500.0 ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

datetime newbar ;

int start()

{

if(newbar==Time[0])return(0) ;

sinon newbar=Time[0] ;

int ticket, total ;

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

if(TakeProfit<10)

{

Print("TakeProfit inférieur à 10") ;

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert | Déclencheur stochastique

//+------------------------------------------------------------------+

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0) ; //mouvement stochastique original

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0) ; //orignial Stoc movement

//+--------------------------------------------------------------------------------------+

//| Fonction de démarrage expert | Déclenchement d'une transaction uniquement lorsque la ligne est franchie et la bougie fermée |//

//+--------------------------------------------------------------------------------------+

int isCrossed = 0 ;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1 = shortStoc1-longStoc1 ;

double diff2 = shortStoc2-longStoc2 ;

si ((diff1*diff2)<0)

{

si (shortStoc1>longStoc1)

isCrossed = 1 ;

sinon isCrossed = 2 ;

}

// Début de l'équateur Stoc -------------------------------------

int isCrossedEquator = 0 ;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Equator = shortStoc1Equator-longStoc1Equator ;

double diff2Equator = shortStoc2Equator-longStoc2Equator ;

si ((diff1Equator*diff2Equator)<0)

{

si (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1 ;

sinon isCrossedEquator = 2 ;

}

// Fin de l'équateur Stoc -------------------------------------

//+------------------------------------------------------------------------------------+

//| Fonction de fin d'expert | Déclencher une transaction uniquement lorsque la ligne est franchie et que la bougie est fermée |//

//+------------------------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| expert end function | Stochastic Trigger

//+------------------------------------------------------------------+

//| expert start function | Ordre de déclenchement

//+------------------------------------------------------------------------------------------------------------+

total = OrdersTotal() ;

if(total < 2) //restreindre le nombre de transactions ouvertes

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"My EA",12345,0,Green) ;

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

return(0) ;

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"My EA",12345,0,Red) ;

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;

return(0) ;

}

return(0) ;

}

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de fin d'expert |

//+------------------------------------------------------------------+

mladen:
Terrance

La seule chose que je n'ai pas pu vérifier est la variable "total".

Le code devrait fonctionner si la variable "total" est correctement définie. Voici un indicateur de test que j'ai utilisé avec vos conditions et il émet des signaux d'achat et de vente valides (exécutez l'indicateur en mode visuel et vous verrez quand il alerte).

#property indicator_separate_window

#property indicator_buffers 0

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int init()

{

return(0);

}

//------------------------------------------------------------------

//

//------------------------------------------------------------------

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 
tkuan77:
Bonjour mladen, merci pour la mise en évidence. Je suis retourné voir mes codes et je n'ai pas pu comprendre ce que vous vouliez dire par la variable "total". Quelle pourrait être la cause de mon erreur ?

Salutations

Terrance

//+------------------------------------------------------------------+

//| My_First_EA.mq4 |

//| TK|

//| Plate-forme de trading MetaTrader 4 / MetaQuotes Software Corp. |

//+------------------------------------------------------------------+

#property copyright "TK"

#property link "http://www.metaquotes.net"

//--- paramètres d'entrée

extern double TakeProfit=500.0 ;

extern double Lots=0.1 ;

extern double StopLoss=500.0 ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

datetime newbar ;

int start()

{

if(newbar==Time[0])return(0) ;

sinon newbar=Time[0] ;

int ticket, total ;

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

if(TakeProfit<10)

{

Print("TakeProfit inférieur à 10") ;

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert | Déclencheur stochastique

//+------------------------------------------------------------------+

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0) ; //mouvement stochastique original

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0) ; //orignial Stoc movement

//+--------------------------------------------------------------------------------------+

//| Fonction de démarrage expert | Déclenchement d'une transaction uniquement lorsque la ligne est franchie et la bougie fermée |//

//+--------------------------------------------------------------------------------------+

int isCrossed = 0 ;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1 = shortStoc1-longStoc1 ;

double diff2 = shortStoc2-longStoc2 ;

si ((diff1*diff2)<0)

{

si (shortStoc1>longStoc1)

isCrossed = 1 ;

sinon isCrossed = 2 ;

}

// Début de l'équateur Stoc -------------------------------------

int isCrossedEquator = 0 ;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1) ;

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2) ;

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Equator = shortStoc1Equator-longStoc1Equator ;

double diff2Equator = shortStoc2Equator-longStoc2Equator ;

si ((diff1Equator*diff2Equator)<0)

{

si (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1 ;

sinon isCrossedEquator = 2 ;

}

// Fin de l'équateur Stoc -------------------------------------

//+------------------------------------------------------------------------------------+

//| Fonction de fin d'expert | Déclencher une transaction uniquement lorsque la ligne est franchie et que la bougie est fermée |//

//+------------------------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| expert end function | Stochastic Trigger

//+------------------------------------------------------------------+

//| Fonction de début d'expert | Ordre de déclenchement

//+------------------------------------------------------------------------------------------------------------+

total = OrdersTotal() ;

if(total < 2) //restreindre le nombre de transactions ouvertes

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"My EA",12345,0,Green) ;

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

return(0) ;

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"My EA",12345,0,Red) ;

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordre VENTE ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;

return(0) ;

}

return(0) ;

}

return(0) ;

}

//+------------------------------------------------------------------+

//| expert end function |

//+------------------------------------------------------------------+

Terrance

Dans mes tests, cette EA fonctionne

Voici le résultat du test et le rapport du back test. Testé sur une période de 1 minute

Dossiers :
tk.zip  16 kb
result.gif  13 kb
 

Bonjour à tous, quelqu'un peut-il m'aider avec le code ci-dessous,,,, qui continue à me donner une alerte sonore à chaque tick au lieu de seulement lorsque les conditions requises pour le trading sont déclenchées ! Je ne veux pas que l'alerte soit sonore à chaque tick ou lorsque de nouveaux chandeliers se forment.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

//---- paramètres d'entrée

extern int ADXbars=14 ;

extern int CountBars=350 ;

//---- tampons

double val1[] ;

double val2[] ;

double b4plusdi,nowplusdi,b4minusdi,nowminusdi ;

//+------------------------------------------------------------------+

//| Fonction personnalisée de désinitialisation de l'indicateur |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int init()

{

//-- nom court de l'indicateur

IndicatorShortName("PipsdatorPro1("+Symbol()+")") ;

//---- ligne d'indicateur

IndicatorBuffers(2) ;

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,233) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(1,234) ;

SetIndexBuffer(0,val1) ;

SetIndexBuffer(1,val2) ;

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2 |

//+------------------------------------------------------------------+

int start()

{

si (CountBars>=Bars) CountBars=Bars ;

SetIndexDrawBegin(0,Bars-CountBars) ;

SetIndexDrawBegin(1,Bars-CountBars) ;

int i,shift,counted_bars=IndicatorCounted() ;

//---- vérifier les erreurs éventuelles

if(counted_bars<0) return(-1) ;

//---- zéro initial

si(barres comptées<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0 ;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0 ;

}

for (shift = CountBars ; shift>=0 ; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1) ;

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift) ;

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1) ;

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift) ;

si (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

// Alert("Flèche d'achat","\n", "L'heure actuelle est ",TimeToStr(CurTime()),"\n",Symbol()) ;

i++ ;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=High[shift]+5*Point ;

// Alert("Flèche de vente","\n", "L'heure actuelle est ",TimeToStr(CurTime()),"\n",Symbol()) ;

i++ ;

}

}

return(0) ;

}

//+---------------------------------------------------------------+

 
Mastercash:
Bonjour à tous, quelqu'un peut-il m'aider avec ce code ci-dessous,,,, il continue à me donner une alerte sonore à chaque tick au lieu de seulement lorsque les conditions requises pour le trading sont déclenchées ! Je ne veux pas que l'alerte soit sonore à chaque tick ou lorsque de nouveaux chandeliers se forment.

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Red

//---- paramètres d'entrée

extern int ADXbars=14 ;

extern int CountBars=350 ;

//---- tampons

double val1[] ;

double val2[] ;

double b4plusdi,nowplusdi,b4minusdi,nowminusdi ;

//+------------------------------------------------------------------+

//| Fonction personnalisée de désinitialisation de l'indicateur |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int init()

{

//-- nom court de l'indicateur

IndicatorShortName("PipsdatorPro1("+Symbol()+")") ;

//---- ligne d'indicateur

IndicatorBuffers(2) ;

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,233) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(1,234) ;

SetIndexBuffer(0,val1) ;

SetIndexBuffer(1,val2) ;

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2 |

//+------------------------------------------------------------------+

int start()

{

si (CountBars>=Bars) CountBars=Bars ;

SetIndexDrawBegin(0,Bars-CountBars) ;

SetIndexDrawBegin(1,Bars-CountBars) ;

int i,shift,counted_bars=IndicatorCounted() ;

//---- vérifier les erreurs éventuelles

if(counted_bars<0) return(-1) ;

//---- zéro initial

si(barres comptées<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0 ;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0 ;

}

for (shift = CountBars ; shift>=0 ; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1) ;

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift) ;

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1) ;

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift) ;

si (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

// Alert("Flèche d'achat","\n", "L'heure actuelle est ",TimeToStr(CurTime()),"\n",Symbol()) ;

i++ ;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=High[shift]+5*Point ;

// Alert("Flèche de vente","\n", "L'heure actuelle est ",TimeToStr(CurTime()),"\n",Symbol()) ;

i++ ;

}

}

return(0) ;

}

//+---------------------------------------------------------------+

Mastercash, il y a une version de cet indicateur ici https://www.mql5.com/en/forum/173574/page320 peut-être que cela vous aidera.

 
mladen:
Terrance

Dans mes tests, cet EA fonctionne

Voici le résultat du test ainsi que le rapport du back test. Testé sur une échelle de temps de 1 minute

Bonjour mladen, j'ai revu le code en fonction de vos commentaires et j'ai remarqué que le trade ne se déclenche que lorsque mes deux lignes stocastiques se déclenchent à la hausse ou à la baisse dans la même bougie.

Cependant, ce que j'essaie d'accomplir est que si l'indicateur équateur croise à la hausse indiquant une tendance haussière, l'EA ne se déclenchera que lorsque l'indicateur rapide se déclenchera à la hausse et vice versa au lieu d'avoir l'indicateur équateur et l'indicateur rapide déclenchés dans la même direction à la même bougie.

J'ai essayé d'adapter l'EA à ce critère mais je n'ai pas réussi à obtenir les résultats souhaités. Y a-t-il quelque chose que je fais mal ? Veuillez m'aider. Merci encore.

Salutations

Terrance

 
tkuan77:
Bonjour mladen, j'ai revu le code en fonction de vos commentaires et j'ai remarqué que le trade ne se déclenche que lorsque mes deux lignes stocastiques se déclenchent à la hausse ou à la baisse sur la même bougie.

Cependant, ce que j'essaie d'accomplir, c'est que si l'indicateur équateur croise vers le haut, indiquant une tendance haussière, l'EA déclenchera seulement une position longue lorsque l'indicateur rapide se déclenchera vers le haut et vice versa, au lieu d'avoir l'indicateur équateur et l'indicateur rapide déclenchés dans la même direction à la même bougie.

J'ai essayé d'adapter l'EA à ce critère mais je n'ai pas réussi à obtenir les résultats souhaités. Y a-t-il quelque chose que je fais mal ? Veuillez m'aider. Merci encore.

Salutations

Terrance

Terrance

Vous devrez probablement écrire un indicateur personnalisé pour accomplir cela (certaines choses dans les EAs ne peuvent tout simplement pas être faites de la même manière que les indicateurs).

 
mladen:
Terrance Vous devrez probablement écrire un indicateur personnalisé pour accomplir cela (certaines choses dans les EAs ne peuvent tout simplement pas être faites de la même manière que les indicateurs).

Bonjour mladen, Une chose que je ne comprends pas est pourquoi je suis capable de faire cela avec MA et pas avec iMA bien que ce soit le même type de critères ? Serait-ce dû à une forme de paramétrage de l'indicateur ?

Salutations

Terrance

 
tkuan77:
Bonjour mladen, Une chose que je ne comprends pas est pourquoi je suis capable de faire cela avec MA et pas avec iMA bien que ce soit le même type de critères ? Pourrait-il s'agir d'une forme de paramétrage de l'indicateur ?

Salutations

Terrance

parce qu'avec l'indicateur personnalisé vous pouvez sauvegarder les états (tendances) entre les deux ticks, et quand vous utilisez iMA vous ne pouvez pas (juste un exemple)

Raison: