Les conditions devraient être plus précises. Par exemple : quand les deux indicateurs signalent la même chose, c'est très fréquent. Alors, quand exactement devraient-ils le faire. À la première occurrence de ce signal ? À chaque occurrence de ce signal ? De même, si vous sortez à chaque changement de l'un des deux signaux, les sorties seront très fréquentes.
Merci pour la réponse ! Oui, ce n'est peut-être pas une bonne stratégie. C'est juste que si j'obtiens ceci comme un modèle, je peux probablement faire quelques changements par moi-même plus tard. Ce que je veux, c'est la possibilité de combiner deux indicateurs (et l'utilisation de leurs tampons).
Disons que la stratégie devrait plutôt être : acheter quand les deux indicateurs indiquent. Et vendre quand les deux indicateurs l'indiquent. Cela devrait se produire après un changement d'indicateur et une barre fermée. Cela devrait se produire à chaque fois que cela se produit.
quand l'indicateur est appliqué pendant l'exécution de l'EA (la moyenne mobile standard dans MT4) les valeurs sont très différentes des valeurs qui sont affichées en appliquant le même indicateur à la fin de l'exécution de l'EA.
Pouvez-vous expliquer pourquoi et si possible corriger l'indicateur ?
Mladen vient de terminer ma personnalisation dans l'indicateur précédent que vous avez modifié. Qu'est-ce qui ne va pas dans ce code ? Il n'affiche rien...Aucune erreur lors de la compilation.
#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers4#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 LimeGreen
#property indicator_color4 Crimson
#property indicator_width1 2#property indicator_width2 2#property indicator_width3 2#property indicator_width4 2externstring NOTE1 = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMSexternint SpanPeriod = 1; // Period of Spanexternint SpanShift = -26; // Shift of SpanexternENUM_MA_METHOD SpanMode = 1; // Mode of SpanexternENUM_APPLIED_PRICE SpanPrice = 0; // Applied price of Spanexternint MaPeriod = 55; // Period of Moving averageexternint MaShift = 0; // Shift of Moving averageexternENUM_MA_METHOD MaMode = 1; // Mode of Moving averageexternENUM_APPLIED_PRICE MaPrice = 0; // Applied price of Moving averageexternstring NOTE2 = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLESexterncolor SpanClr = Gold; // Span colorexternint SpanWdt = 2; // Span widthexternENUM_LINE_STYLE SpanStl = 0; // Span line styleexterncolor MaClr = DodgerBlue; // Moving average colorexternint MaWdt = 2; // Moving average widthexternENUM_LINE_STYLE MaStl = 0; // Moving average line styleexternstring NOTE3 = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWSexternbool DrawArrows = true; // Draw signal arrows?externbool DrawMaLines = true; // Draw lines?externcolor UpArrowClr = LimeGreen; // Up arrow colorexternint UpArrowWdt = 2; // Up arrow widthexterncolor DnArrowClr = Crimson; // Down arrow colorexternint DnArrowWdt = 2; // Down arrow widthexternint ArrowsDistance = 10; // Arrows distance from candleexternstring NOTE4 = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERTexternbool AlertsOn = true; // Active alert?externbool AlertsOnCurrent = true; // Alert on current unclosed barexternbool AlertsMessage = true; // Alert messageexternbool AlertsSound = true; // Alert soundexternbool AlertsEmail = false; // Alert e-mailexternstring SoundFile = "alert2.wav"; // Filename of sound alertstring IndicatorFileName;
int WhichBar;
double Gap;
double SpanBuffer[]; // Buffer of the Spandouble MaBuffer[]; // Buffer of the Moving averagedouble CrossUpBuffer[]; // Up arrow bufferdouble CrossDnBuffer[]; // Down arrow bufferdouble TrendBuffer[]; // Span/Ma cross bufferint init()
{
IndicatorFileName = WindowExpertName();
IndicatorBuffers(5);
SetIndexBuffer(0, SpanBuffer);
SetIndexBuffer(1, MaBuffer);
SetIndexBuffer(2, CrossUpBuffer);
SetIndexBuffer(3, CrossDnBuffer);
SetIndexBuffer(4, TrendBuffer);
if (DrawMaLines) {
SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);
SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
else {
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);}
if (DrawArrows) {
SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(0, 233);
SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(0, 234);}
else {
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);}
return(0);}
int deinit() { return(0); }
int start() {
int counted_bars = IndicatorCounted();
int i, limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars, Bars-1);
for(i=limit; i>=0; i--){
SpanBuffer[i] = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
MaBuffer[i] = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
Gap = iATR(NULL,0,20,i);
TrendBuffer[i] = TrendBuffer[i+1];
if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
CrossUpBuffer[i] = EMPTY_VALUE;
CrossDnBuffer[i] = EMPTY_VALUE;
if (TrendBuffer[i]!= TrendBuffer[i+1])
if (TrendBuffer[i] == 1)
CrossUpBuffer[i] = Low[i] - ArrowsDistance * Gap;
else CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap;
}
if (AlertsOn)
{
if (AlertsOnCurrent)
WhichBar = 0;
else WhichBar = 1;
if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
if (TrendBuffer[WhichBar] == 1)
doAlert("uptrend");
else doAlert("downtrend");
}
return(0);
}
// CUSTOM FUNCTIONS -------------------------void doAlert(string doWhat)
{
staticstring previousAlert="nothing";
staticdatetime previousTime;
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
if (AlertsMessage) Alert(message);
if (AlertsEmail) SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
if (AlertsSound) PlaySound(SoundFile);
}
}
Mladen vient de terminer ma personnalisation dans l'indicateur précédent que vous avez modifié. Qu'est-ce qui ne va pas dans ce code ? Il n'affiche rien...Aucune erreur lors de la compilation.
thefxpros
Essayez-le comme ceci
#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers4#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 LimeGreen
#property indicator_color4 Crimson
#property indicator_width1 2#property indicator_width2 2#property indicator_width3 2#property indicator_width4 2externstring NOTE1 = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMSexternint SpanPeriod = 1; // Period of Spanexternint SpanShift = -26; // Shift of SpanexternENUM_MA_METHOD SpanMode = 1; // Mode of SpanexternENUM_APPLIED_PRICE SpanPrice = 0; // Applied price of Spanexternint MaPeriod = 55; // Period of Moving averageexternint MaShift = 0; // Shift of Moving averageexternENUM_MA_METHOD MaMode = 1; // Mode of Moving averageexternENUM_APPLIED_PRICE MaPrice = 0; // Applied price of Moving averageexternstring NOTE2 = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLESexterncolor SpanClr = Gold; // Span colorexternint SpanWdt = 2; // Span widthexternENUM_LINE_STYLE SpanStl = 0; // Span line styleexterncolor MaClr = DodgerBlue; // Moving average colorexternint MaWdt = 2; // Moving average widthexternENUM_LINE_STYLE MaStl = 0; // Moving average line styleexternstring NOTE3 = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWSexternbool DrawArrows = true; // Draw signal arrows?externbool DrawMaLines = true; // Draw lines?externcolor UpArrowClr = LimeGreen; // Up arrow colorexternint UpArrowWdt = 2; // Up arrow widthexterncolor DnArrowClr = Crimson; // Down arrow colorexternint DnArrowWdt = 2; // Down arrow widthexternint ArrowsDistance = 10; // Arrows distance from candleexternstring NOTE4 = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERTexternbool AlertsOn = true; // Active alert?externbool AlertsOnCurrent = true; // Alert on current unclosed barexternbool AlertsMessage = true; // Alert messageexternbool AlertsSound = true; // Alert soundexternbool AlertsEmail = false; // Alert e-mailexternstring SoundFile = "alert2.wav"; // Filename of sound alertstring IndicatorFileName;
int WhichBar;
double Gap;
double SpanBuffer[]; // Buffer of the Spandouble MaBuffer[]; // Buffer of the Moving averagedouble CrossUpBuffer[]; // Up arrow bufferdouble CrossDnBuffer[]; // Down arrow bufferdouble TrendBuffer[]; // Span/Ma cross bufferint init()
{
IndicatorFileName = WindowExpertName();
IndicatorBuffers(5);
SetIndexBuffer(0, SpanBuffer);
SetIndexBuffer(1, MaBuffer);
SetIndexBuffer(2, CrossUpBuffer);
SetIndexBuffer(3, CrossDnBuffer);
SetIndexBuffer(4, TrendBuffer);
if (DrawMaLines) {
SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);
SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
else {
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);}
if (DrawArrows) {
SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(0, 233);
SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(0, 234);}
else {
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);}
return(0);}
int deinit() { return(0); }
int start() {
int counted_bars = IndicatorCounted();
int i, limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars, Bars-1);
for(i=limit; i>=0; i--){
SpanBuffer[i] = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
MaBuffer[i] = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
Gap = iATR(NULL,0,20,i);
if (i<Bars-1) TrendBuffer[i] = TrendBuffer[i+1];
if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
CrossUpBuffer[i] = EMPTY_VALUE;
CrossDnBuffer[i] = EMPTY_VALUE;
if (i<Bars-1 && TrendBuffer[i]!= TrendBuffer[i+1])
if (TrendBuffer[i] == 1)
CrossUpBuffer[i] = Low[i] - ArrowsDistance * Gap;
else CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap;
}
if (AlertsOn)
{
if (AlertsOnCurrent)
WhichBar = 0;
else WhichBar = 1;
if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
if (TrendBuffer[WhichBar] == 1)
doAlert("uptrend");
else doAlert("downtrend");
}
return(0);
}
// CUSTOM FUNCTIONS -------------------------void doAlert(string doWhat)
{
staticstring previousAlert="nothing";
staticdatetime previousTime;
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
if (AlertsMessage) Alert(message);
if (AlertsEmail) SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
if (AlertsSound) PlaySound(SoundFile);
}
}
Ou supprimez complètement la déclaration stricte (puisque cet indicateur a besoin d'une réécriture complète s'il doit être utilisé avec le "strict").
Cher mladen,
J'ai essayé les deux suggestions sans succès mais j'ai réalisé que l'indicateur ne se met pas à jour lorsqu'il est exécuté dans un EA comme dans l'image suivante.
J'ai essayé avec Mladen et cela semble fonctionner mais dans le testeur de stratégie, il ne se rafraîchit pas et n'affiche pas l'alerte, lorsque le marché sera ouvert, j'essaierai sur le marché réel. Merci.
Simon
Les conditions devraient être plus précises. Par exemple : quand les deux indicateurs signalent la même chose, c'est très fréquent. Alors, quand exactement devraient-ils le faire. À la première occurrence de ce signal ? À chaque occurrence de ce signal ? De même, si vous sortez à chaque changement de l'un des deux signaux, les sorties seront très fréquentes.
Merci pour la réponse ! Oui, ce n'est peut-être pas une bonne stratégie. C'est juste que si j'obtiens ceci comme un modèle, je peux probablement faire quelques changements par moi-même plus tard. Ce que je veux, c'est la possibilité de combiner deux indicateurs (et l'utilisation de leurs tampons).
Disons que la stratégie devrait plutôt être : acheter quand les deux indicateurs indiquent. Et vendre quand les deux indicateurs l'indiquent. Cela devrait se produire après un changement d'indicateur et une barre fermée. Cela devrait se produire à chaque fois que cela se produit.
Tout est parfait !
Cher mladen,
J'ai un problème avec l'indicateur ci-joint :
quand l'indicateur est appliqué pendant l'exécution de l'EA (la moyenne mobile standard dans MT4) les valeurs sont très différentes des valeurs qui sont affichées en appliquant le même indicateur à la fin de l'exécution de l'EA.
Pouvez-vous expliquer pourquoi et si possible corriger l'indicateur ?
Mr mladen ,
Je suis en train de faire quelques changements pour le ruban ma rempli de canal ma mais j'ai un problème avec le buffer .
Est-ce qu'il y a un moyen de cacher le canal derrière l'histogramme ou de faire un vide entre les canaux ?
J'ai essayé de le faire mais je ne peux le faire que d'un seul côté, est-il nécessaire d'ajouter un autre tampon ?
Et un autre problème est à la ligne 44, je ne peux pas l'externaliser ou la supprimer.
Il y a toujours une erreur qui s'affiche.
S'il vous plaît donnez-moi quelques conseils, merci.
Steven .
Mr mladen ,
Je suis en train de faire quelques changements pour le ruban ma rempli de canal ma mais j'ai un problème avec le buffer .
Est-ce qu'il y a un moyen de cacher le canal derrière l'histogramme ou de faire un vide entre les canaux ?
J'ai essayé de le faire mais je ne peux le faire que d'un seul côté, est-il nécessaire d'ajouter un autre tampon ?
Et un autre problème est à la ligne 44, je ne peux pas l'externaliser ou la supprimer.
Il y a toujours une erreur qui s'affiche.
S'il vous plaît donnez-moi quelques conseils, merci.
Steven .
Je ne suis pas sûr que ce soit ce que vous essayez de faire, mais essayez-le.
Je ne suis pas sûr que ce soit ce que vous essayez de faire, mais essayez-le.
OUI, exactement ce que je veux :D
Mais pouvez-vous m'aider à vérifier le code à la ligne 44 'AlertOnClosedCandle', pourquoi il ne peut pas supprimer ou extern bool ?
C'est la première fois que j'ai ce type de problème.
En tout cas, j'ai appris des choses sur le tampon.
Merci.
Mladen vient de terminer ma personnalisation dans l'indicateur précédent que vous avez modifié. Qu'est-ce qui ne va pas dans ce code ? Il n'affiche rien...Aucune erreur lors de la compilation.
Mladen vient de terminer ma personnalisation dans l'indicateur précédent que vous avez modifié. Qu'est-ce qui ne va pas dans ce code ? Il n'affiche rien...Aucune erreur lors de la compilation.
thefxpros
Essayez-le comme ceci
Correction :
Changez les lignes 74 et 75 de sigma par ceci :
à ceci :
Et cela devrait fonctionner
Ou supprimez complètement la déclaration stricte (puisque cet indicateur a besoin d'une réécriture complète s'il doit être utilisé avec le "strict").
Cher mladen,
J'ai essayé les deux suggestions sans succès mais j'ai réalisé que l'indicateur ne se met pas à jour lorsqu'il est exécuté dans un EA comme dans l'image suivante.
Il devrait être possible de le corriger ?
:
thefxpros
Essayez-le comme ceci
Bonjour Mr Mladen,
Je pensais ajouter un commentaire lorsque le prix s'est inversé de la tendance et avoir "attendre pour acheter" et "attendre pour vendre".
L'ajout de la nouvelle ligne à l'achat ne pose aucun problème, mais lorsqu'on l'ajoute à la vente, cela ne fonctionne pas.
Que dois-je changer ?