KristijanO: Je reçois beaucoup d'erreurs ... Je reçois une erreur de jeton inattendue.
Ne détournez pas d'autres fils de discussion pour votre message hors sujet. Vous ne demandez pas une "aide au codage". La prochaine fois, créez votre propre fil de discussion.
Vous attendez vraiment une réponse ? Il n'y a pas de lecteurs de pensées ici et nos boules de cristal sont fissurées. Nous ne pouvons pas voir votre code cassé. Il n'y a pas de contexte pour votre seule ligne. Votre problème est probablement au-dessus de cela.
Postez tout le code pertinent (comme ce qui est au-dessus de cette ligne).
Affichez les messages d'erreur et indiquez quelle ligne contient l'erreur.
J'ai passé 3 semaines à créer un indicateur personnalisé, mais je ne suis clairement pas assez bon, en espérant que quelqu'un puisse m'aider.
Mon indicateur prend 3 externs : "Timeframe", "nombre de niveau d'affichage sur le graphique" et "distance min entre chaque niveau".
Tout ce dont j'ai besoin pour coder est de regrouper, de supprimer le point fractal à une distance minimale, puis d'afficher le niveau de point fractal restant.
La première version (MainRS_AddOn2.mq4) que j'ai créée fait exactement ce que je veux, mais j'utilise une méthode stupide en dessinant un objet et en continuant à modifier l'objet, l'indicateur est extrêmement lent.
La deuxième version (17_8_2020_RS_Indicator.mq4) stocke tous les niveaux dans un tampon qui s'exécute beaucoup plus rapidement, mais j'ai des problèmes que je ne peux pas résoudre.
---- Je crois que j'ai une erreur logique dans le stockage du nouveau niveau fractal, dont certains niveaux d'affichage n'ont pas satisfait à l'exigence de distance minimale et ont obtenu plus de niveaux en double lorsqu'ils sont exécutés dans le testeur.
le côté gauche est 17_8_2020_RS_Indicator.mq4, qui ont un niveau dupliqué.
Ci-dessus se trouve le niveau dupliqué à l'intérieur du testeur.
if (modify == false ) // store new level when display level limit have no more room
{
if (RSMode[limit]== 1 )
{
int index = ArrayMinimum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
if (RSMode[limit]== 2 )
{
int index = ArrayMaximum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
modify = true ;
}
}
Je pense que le code ci-dessus peut provoquer l'erreur logique. Mais personne ne peut le dire à moins de vouloir passer du temps à examiner l'ensemble du dossier.
Merci si quelqu'un peut aider. Vous trouverez ci-dessous le code complet, vous pouvez copier et coller ou télécharger le fichier joint.
Merci beaucoup.
//+------------------------------------------------------------------+//| MainRS_Indicator.mq4 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property description"Indicator to show Grouped Fractal Support and Resisitance Level"#property strict#property indicator_chart_window#property indicator_buffers2#define Confirm_Level 3#define Up_Fractal 1#define Down_Fractal 2#define Combined_Up 4#define Combined_Down 5enum timeframe_display_option
{
Current = 0 ,
PeriodM5 = 5 ,
PeriodM15 = 15 ,
PeriodM30 = 30 ,
PeriodH1 = 60 ,
PeriodH4 = 240 ,
PeriodD1 = 1440 ,
PeriodW1 = 10080 ,
};
double RSBuffer1[]; //hold new form fractaldouble RSMode[]; //hold new form fractal statusdouble Display_level[]; // hold fractal display level double Display_Mode[]; // hold fractal display level statusexternint Show_Level_Limit = 15 ; //Max Level to be display on chartextern timeframe_display_option Level_of_TimeFrame=Current; //Option to display which timeframe level on chartexterndouble sensitvity = 15 ; // Min distance between each RS level,input in pips valuesint DisplayIndex = 0 ;
//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.0015 0.00150int Digitspips; // DoubleToStr(dbl/pips2dbl, Digits.pips)string indId = "SR_" ; // string to name object on chart for delete and create objectdouble fractal; // to store fractal point valuebool modify = false ; // to indicate a existing level on chart being modify or notdouble status; // status of display level, use to reduce and combine level within min distancecolor mark = clrRed ;
//--------------------------------------------------//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit ()
{
if ( Digits % 2 == 1 )
{ // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
pips2dbl = Point * 10 ;
pips2points = 10 ;
Digitspips = 1 ;
}
else
{ pips2dbl = Point ;
pips2points = 1 ;
Digitspips = 0 ;
}
SetIndexBuffer ( 0 , RSBuffer1);
SetIndexStyle( 0 , DRAW_ARROW );
SetIndexArrow( 0 , 251 ); //buffer 0 draw line not symbol
SetIndexEmptyValue( 0 , 0.0 );
SetIndexBuffer ( 1 , RSMode);
SetIndexStyle( 1 , DRAW_NONE );
SetIndexArrow( 1 , 251 ); //buffer 0 draw line not symbol
SetIndexEmptyValue( 1 , 0.0 );
sensitvity = sensitvity * pips2dbl; // min distance of each display level/fractal pointreturn ( 0 );
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
DeleteAllObjects();
return ( 0 );
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted();
if (counted_bars > 0 ) //---- the last calculated bar will be recalculated
counted_bars--;
int limit = Bars - counted_bars- 1 ;
//------------------------------------------------------------------------------------------------- //---- store fractal point to array //------------------------------------------------------------------------------------------------- while (limit> 0 )
{
fractal = iFractals ( NULL , Level_of_TimeFrame, MODE_UPPER, limit);
if (fractal != 0 )
{
RSBuffer1[limit]= fractal;
RSMode[limit]= Up_Fractal;
}
fractal = iFractals ( NULL , Level_of_TimeFrame, MODE_LOWER, limit);
if (fractal != 0 )
{
RSBuffer1[limit]= fractal;
RSMode[limit]= Down_Fractal;
}
//----------------------------------------------------------------------------------------------------------------------------------------------- //below status for fractal point reduction //Confirm_Level 3//Up_Fractal 1//Down_Fractal 2//Combined_Up 4//Combined_Down 5//upper fractal point with another upper fractal point == combined up//lower fractal point with another lower fractal point == combine down//opposite fractal merge == confirm level (up & down || up & combine down || up && confirm || down & up || down & combine up ||down && confirm)//--------------------------------------------------------------------------------------------------------------------------------------------------ArrayResize (Display_level,Show_Level_Limit+ 1 );
ArrayResize (Display_Mode,Show_Level_Limit+ 1 );
if ( RSBuffer1[limit]!= 0 )
{
for ( int i=Show_Level_Limit- 1 ; i>= 0 ; i--)
{
double diff = MathAbs (RSBuffer1[limit]-Display_level[i]); // calculate min distance between level
modify = false ;
if (diff<=sensitvity ) //new fractal, check against Displaylevel
{
if (Display_Mode[i]== 1 && RSMode[limit] == 1 ) //
{
Display_Mode[i]= 4 ; // mode up & up = combine upif (RSBuffer1[limit]<Display_level[i])
Display_level[i]=Display_level[i];
Comment ( " Up & Up== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
if (Display_Mode[i]== 4 && RSMode[limit] == 1 )
{
Display_Mode[i]= 4 ; // mode combine up & up = combine upif (RSBuffer1[limit]<Display_level[i])
Display_level[i]=Display_level[i];
Comment ( " Up & combine Up== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
if (Display_Mode[i]== 2 && RSMode[limit] == 2 )
{
Display_Mode[i]= 5 ; // mode down & down = combine downif (RSBuffer1[limit]>Display_level[i])
Display_level[i]=Display_level[i];
Comment ( "down & down== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
if (Display_Mode[i]== 5 && RSMode[limit] == 2 )
{
Display_Mode[i]= 5 ; // mode down & combine down = combine downif (RSBuffer1[limit]>Display_level[i])
Display_level[i]=Display_level[i];
Comment ( " Down & combine down== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
}
}
if (diff<=sensitvity)
{
if ((Display_Mode[i]== 2 && RSMode[limit] == 1 )||(Display_Mode[i]== 1 && RSMode[limit] == 2 ))
{
Display_Mode[i]= 3 ; // mode up & down & combine down = confirm
Display_level[i]=Display_level[i];
Comment ( "Up & down or combine down == " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
modify = true ;
break ;
}
if ( (Display_Mode[i]== 3 || Display_Mode[i]== 5 ))
{
Display_Mode[i]= 3 ; // mode up & confirm level = confirm
Display_level[i]=Display_level[i];
Comment ( "Up & confirm level== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
modify = true ;
break ;
}
if ( Display_Mode[i]== 3 || Display_Mode[i]== 4 )
{
Display_Mode[i]= 3 ; // mode down & confirm level = confirm
Display_level[i]=Display_level[i];
Comment ( "Down & confirm level== " + Display_level[i]+ "Display_Mode = " +Display_Mode[i]);
modify = true ;
break ;
}
}
} //end of modify existing level for loop if (modify == false ) // store disply level untill reacah show level limit
{
for ( int a= 0 ; a<Show_Level_Limit- 1 ; a++)
{
if (Display_Mode[a]== 0 )
{
Display_Mode[a]=RSMode[limit];
Display_level[a] = RSBuffer1[limit];
modify = true ;
break ;
}
a++;
}
if (modify == false ) // store new level when display level limit have no more room
{
if (RSMode[limit]== 1 )
{
int index = ArrayMinimum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
if (RSMode[limit]== 2 )
{
int index = ArrayMaximum (Display_level, WHOLE_ARRAY , 0 );
Display_Mode[index]=RSMode[limit] ;
Display_level[index]=RSBuffer1[limit];
}
modify = true ;
}
}
}
limit--;
}
DeleteAllObjects();
int uplevel= 1 ;
int downlevel= 1 ;
ArraySort (Display_level, WHOLE_ARRAY , 0 ,MODE_ASCEND);
DisplayIndex = 0 ;
for ( int a= 0 ;a< ArraySize (Display_level)- 1 ; a++)
{
if (Display_level[a]<Bid && Display_level[a+ 1 ]>Bid)
DisplayIndex =a+ 1 ;
}
for ( int c =DisplayIndex ; c<=Show_Level_Limit; c++)
{
HLine( "SR_RES" +uplevel+ " # " + c, Display_level[c],mark);
uplevel++;
}
for ( int c =DisplayIndex- 1 ; c> 0 ; c--)
{
HLine( "SR_SUP" +downlevel+ " # " + c, Display_level[c],mark);
downlevel++;
}
return ( 0 );
}
void HLine( string name, double P0, color clr)
{
#define WINDOW_MAIN 0/**/if ( ObjectMove ( name, 0 , Time[ 0 ], P0 )){}
elseif (! ObjectCreate ( name, OBJ_HLINE , WINDOW_MAIN, Time[ 0 ], P0 ))
Alert ( "ObjectCreate(" ,name, ",HLINE) failed: " , GetLastError () );
if (!ObjectSet(name, OBJPROP_COLOR , clr )) // Allow color changeAlert ( "ObjectSet(" , name, ",Color) [1] failed: " , GetLastError () );
if (!ObjectSetText(name, PriceToStr(P0), 10 ))
Alert ( "ObjectSetText(" ,name, ") [1] failed: " , GetLastError ());
}
void DeleteAllObjects()
{
// Delete all objects created by the indicatorfor ( int i = ObjectsTotal () - 1 ; i >= 0 ; i--)
{
string name = ObjectName (i);
if ( StringSubstr (name, 0 , StringLen (indId)) == indId)
ObjectDelete (name);
}
}
string PriceToStr( double p)
{
string pFrc = DoubleToStr(p, Digits );
if (Digitspips== 0 )
return (pFrc);
string pPip = DoubleToStr(p, Digits - 1 );
if (pPip+ "0" == pFrc)
return (pPip);
return (pFrc);
}
//--------------------------------------------------------------------------------------------- double Price( double Old, double New, int result) //1 return larger value, 2 return smaller value
{
double value= 0 ;
if (result== 1 )
value= MathMax (Old,New);
if (result== 2 )
value= MathMin (Old,New);
return (value);
}
//---------------------------------------------------------------------------------------------
Je m'excuse si j'aidétourné d'autres fils de discussion.
J'espère simplement que quelqu'un pourra m'aider à trouver l'erreur que j'ai commise dans mon code afin que je puisse résoudre mon problème de duplication de l'affichage.
Mais, j'ai besoin d'un stoploss et de cibles également dans l'alerte sur la base du calcul simple suivant.
Supposons que notre entrée d'achat soit à 524.55.
Stoploss : Entrée - 1.5% du prix d'entrée de l'action (524.55 - 7.85 = 516.70)
Objectif 1 : Entrée + 2.5% du prix d'entrée de l'action (524.55 + 13.10 = 537.65)
Cible 2 : Entrée + 5% du prix de l'action (524.55 + 26.20 = 550.75)
(Note : La taille du tick est de 0.05. Donc si le calcul du stoploss ou de la cible est un nombre impair, il doit être arrondi au tick le plus proche. Et si LSignal est un signal de vente, le calcul doit être inversé.
Enfin, j'ai besoin de la sortie suivante:
Nom du symbole (15M) --> Acheter à 524.55, SL : 516.70, Cible 1 : 537.65, Cible 2 : 550.75
Quelqu'un peut-il s'il vous plaît réécrire le code pour mon exigence ?
Ne doublez pas les messages! Vous aviez déjà ouvert ce fil de discussion.
Règles générales et bonnes pratiques du forum. - Général - Forum de programmation MQL5
"Ne fonctionne pas" n'a aucun sens - c'est comme dire que la voiture ne fonctionne pas. Elle ne démarre pas, ne passe pas de vitesse, n'a pas d'électricité, il manque la clé, les pneus sont à plat - cela ne veut rien dire.
Comment poser des questions de manière intelligente. 2004
Lorsque vous demandez le code
J'ai supprimé votre sujet avec le même thème.
Ne détournez pas d'autres fils de discussion pour votre message hors sujet. Vous ne demandez pas une "aide au codage". La prochaine fois, créez votre propre fil de discussion.
Vous attendez vraiment une réponse ? Il n'y a pas de lecteurs de pensées ici et nos boules de cristal sont fissurées. Nous ne pouvons pas voir votre code cassé. Il n'y a pas de contexte pour votre seule ligne. Votre problème est probablement au-dessus de cela.
Affichez les messages d'erreur et indiquez quelle ligne contient l'erreur.
Comment poser des questions de manière intelligente. 2004
Élaguer les requêtes inutiles.
Tous les symboles sont disponibles sur mes plateformes.
J'ai essayé avec 3 indicateurs renko différents et sur trois plateformes différentes mais toujours rien ne fonctionne sur les graphiques renko.
Tous les autres indicateurs fonctionnent correctement et ils sont CCI, RSI et stochs.
Quelqu'un d'autre a-t-il des suggestions ?
TEAMTRADER
Bonjour Auto_free_Teamleader
J'ai le même problème, si vous avez trouvé la solution, merci de me répondre.
Bonjour Auto_free_Teamleader
J'ai le même problème, si vous avez trouvé la solution, merci de me répondre.
Salut tout le monde,
J'ai passé 3 semaines à créer un indicateur personnalisé, mais je ne suis clairement pas assez bon, en espérant que quelqu'un puisse m'aider.
Mon indicateur prend 3 externs : "Timeframe", "nombre de niveau d'affichage sur le graphique" et "distance min entre chaque niveau".
Tout ce dont j'ai besoin pour coder est de regrouper, de supprimer le point fractal à une distance minimale, puis d'afficher le niveau de point fractal restant.
La première version (MainRS_AddOn2.mq4) que j'ai créée fait exactement ce que je veux, mais j'utilise une méthode stupide en dessinant un objet et en continuant à modifier l'objet, l'indicateur est extrêmement lent.
La deuxième version (17_8_2020_RS_Indicator.mq4) stocke tous les niveaux dans un tampon qui s'exécute beaucoup plus rapidement, mais j'ai des problèmes que je ne peux pas résoudre.
---- Je crois que j'ai une erreur logique dans le stockage du nouveau niveau fractal, dont certains niveaux d'affichage n'ont pas satisfait à l'exigence de distance minimale et ont obtenu plus de niveaux en double lorsqu'ils sont exécutés dans le testeur.
le côté gauche est 17_8_2020_RS_Indicator.mq4, qui ont un niveau dupliqué.
Ci-dessus se trouve le niveau dupliqué à l'intérieur du testeur.
Je pense que le code ci-dessus peut provoquer l'erreur logique. Mais personne ne peut le dire à moins de vouloir passer du temps à examiner l'ensemble du dossier.
Merci si quelqu'un peut aider. Vous trouverez ci-dessous le code complet, vous pouvez copier et coller ou télécharger le fichier joint.
Merci beaucoup.
Je m'excuse si j'aidétourné d'autres fils de discussion.
J'espère simplement que quelqu'un pourra m'aider à trouver l'erreur que j'ai commise dans mon code afin que je puisse résoudre mon problème de duplication de l'affichage.
Merci beaucoup.
J'essaie de passer de MQL4 à MQL5 mais je suis bloqué à la première étape. Pour la fonction iCCI, pourquoi n'y a-t-il plus de paramètre "shift" ?
Veuillez éditer votre message et
utilisez le bouton de code (Alt+S) lorsque vous collez du code.
Cette section est MQL4.
MQL5 vous créez un handle dans OnInit et accédez aux valeurs du buffer dans le code principal.
Je vous suggère de lire la documentation de MQL5.
Veuillez modifier votre message et
utilisez le bouton de code (Alt+S) lorsque vous collez du code.
Cette section concerne MQL4.
MQL5 vous créez un handle dans OnInit et accédez aux valeurs du buffer dans le code principal.
Je vous suggère de lire la documentation de MQL5.