Hilfe bei der Codierung - Seite 782

 
  1. Nicht doppelt posten! Sie hatten diesen Thread bereits geöffnet.
    Allgemeine Regeln und bewährte Praktiken des Forums. - Allgemeines - MQL5 Programmierforum

  2. mcaesart: Aber es funktioniert nicht so, wie ich will.

    "Funktioniert nicht" ist bedeutungslos - genau wie die Aussage, dass das Auto nicht funktioniert. Springt nicht an, geht nicht in den Gang, keine Elektrik, fehlender Schlüssel, platte Reifen - bedeutungslos.
    Wie man Fragen auf intelligente Weise stellt. 2004
    Wenn Sie nach einem Code fragen

 
mcaesart

Ich habe Ihr Thema mit demselben Thema gelöscht.

 
KristijanO: Ich erhalte eine Menge Fehler ... Ich erhalte einen unerwarteten Token-Fehler.
  1. Versuchen Sie nicht, andere Threads für Ihre themenfremden Beiträge zu entführen. Sie bitten nicht um "Hilfe bei der Programmierung". Machen Sie das nächste Mal einen eigenen, neuen Thread auf.

  2. Erwarten Sie wirklich eine Antwort? Es gibt hier keine Gedankenleser und unsere Kristallkugeln sind geknackt. Wir können Ihren fehlerhaften Code nicht sehen. Es gibt keinen Kontext für Ihre eine Zeile. Ihr Problem liegt wahrscheinlich darüber.

  3. Posten Sie den gesamten relevanten Code (z. B. was über dieser Zeile steht).
  4. Posten Sie die Fehlermeldungen und geben Sie an, in welcher Zeile der Fehler auftritt.

  5. Wie man Fragen auf intelligente Weise stellt. 2004
    Unnötige Abfragen st reichen.

 
auto_free_TEAMTRADER:

Alle Symbole sind auf meinen Plattformen verfügbar.

Habe es mit 3 verschiedenen Renko-Indikatoren und auf drei verschiedenen Plattformen versucht, aber es funktioniert immer noch nichts auf Renko-Charts.

Alle anderen Indikatoren arbeiten korrekt und sie sind CCI, RSI und Stochs.

Hat sonst noch jemand einen Vorschlag?

TEAMTRADER

Hallo Auto_free_Teamleader


Ich habe das gleiche Problem, wenn Sie die Lösung gefunden haben pls Antwort

 
Rex Kalist:

Hallo Auto_free_Teamleader


Ich habe das gleiche Problem, wenn Sie die Lösung gefunden haben pls Antwort

auto_free_TEAMTRADER oder Mladen , Bitte um Unterstützung
 

Hallo allerseits,

Ich habe 3 Wochen damit verbracht, einen benutzerdefinierten Indikator zu erstellen, aber ich bin eindeutig nicht gut genug und hoffe, dass jemand helfen kann.

Mein Indikator nimmt 3 extern: "Zeitrahmen", "Anzahl der Anzeigeebenen auf dem Diagramm" und "Mindestabstand zwischen den einzelnen Ebenen".

Alles, was ich codieren muss, ist zu gruppieren, Fraktalpunkte innerhalb einer minimalen Entfernung zu entfernen und dann das verbleibende Fraktalpunktniveau anzuzeigen.

Die erste Version (MainRS_AddOn2.mq4), die ich erstellt habe, macht genau das, was ich will, aber ich benutze eine dumme Methode, indem ich ein Objekt zeichne und das Objekt ändere, der Indikator läuft extrem langsam.

Die zweite Version (17_8_2020_RS_Indicator.mq4) speichert alle Ebenen im Puffer, die viel schneller laufen, aber ich habe Probleme, die ich nicht beheben kann.

---- Ich glaube, ich habe einen logischen Fehler beim Speichern neuer Fraktalebenen, bei denen einige Anzeigeebenen die Mindestabstandsanforderungen nicht erfüllten und beim Ausführen im Tester mehr doppelte Ebenen erhielten.

Die linke Seite ist 17_8_2020_RS_Indicator.mq4, die eine duplizierte Ebene haben.

Oben ist die doppelte Ebene im Tester.


 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 ; 
                                      
                     } 
                 }          

Ich denke, der obige Code kann den logischen Fehler verursachen. Aber niemand kann es sagen, es sei denn, er ist bereit, Zeit zu investieren, um sich die gesamte Akte anzusehen.

Schätzen Sie, wenn jemand helfen könnte. Nachfolgend finden Sie den vollständigen Code. Sie können die angehängte Datei gerne kopieren und einfügen oder herunterladen.

Vielen Dank.

 //+------------------------------------------------------------------+
//|                                             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_buffers 2
#define Confirm_Level 3
#define Up_Fractal   1
#define Down_Fractal   2
#define Combined_Up   4
#define Combined_Down   5
 
enum timeframe_display_option
   {
    Current = 0 ,
    PeriodM5 = 5 ,
    PeriodM15 = 15 ,
    PeriodM30 = 30 ,
    PeriodH1 = 60 ,
    PeriodH4 = 240 ,
    PeriodD1 = 1440 ,
    PeriodW1 = 10080 ,
   };
double RSBuffer1[]; //hold new form fractal
double RSMode[]; //hold new form fractal status
double Display_level[]; // hold fractal display level 
double Display_Mode[]; // hold fractal display level status

extern int                        Show_Level_Limit = 15 ;         //Max Level to be display on chart
extern timeframe_display_option  Level_of_TimeFrame=Current; //Option to display which timeframe level on chart
extern double                     sensitvity = 15 ;     // Min distance between each RS level,input in pips values
int DisplayIndex = 0 ;


//++++ These are adjusted for 5 digit brokers.
   int      pips2points;     // slippage  3 pips    3=points    30=points
   double   pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
   int      Digitspips;     // DoubleToStr(dbl/pips2dbl, Digits.pips)
   string indId = "SR_" ;     // string to name object on chart for delete and create object
   double fractal;         // to store fractal point value
   bool modify = false ;     // to indicate a existing level on chart being modify or not
   double status; // status of display level, use to reduce and combine level within min distance
   color mark = clrRed ;                 

   //--------------------------------------------------
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
                                            
     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 point
     return ( 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 up
                                 if (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 up
                                     if (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 down
                                   if (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 down
                                     if (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 )){}
             else if (! ObjectCreate ( name, OBJ_HLINE , WINDOW_MAIN, Time[ 0 ], P0 ))
                     Alert ( "ObjectCreate(" ,name, ",HLINE) failed: " , GetLastError () );
           if (!ObjectSet(name, OBJPROP_COLOR , clr )) // Allow color change
                   Alert ( "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 indicator
   for ( 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);
   }
//---------------------------------------------------------------------------------------------   
 

Ich tue Entschuldigung, wenn ichHijack anderen Threads hatte.

Ich hoffe nur, jemand kann helfen, weisen Sie auf den Fehler, den ich in meinem Code gemacht, so dass ich meine doppelte Anzeigeebene Problem beheben kann.

Vielen Dank

 
wccmcd:

Ich versuche, von MQL4 auf MQL5 umzusteigen, bleibe aber beim ersten Schritt stecken. Warum gibt es bei der Funktion iCCI keinen Parameter "shift" mehr?

Bitte bearbeiten Sie Ihren Beitrag und

verwenden Sie die Code-Taste (Alt+S) beim Einfügen von Code

Dieser Abschnitt ist MQL4.

MQL5 erstellen Sie ein Handle in OnInit und greifen auf die Pufferwerte im Hauptcode zu.

Ich schlage vor, dass Sie die Dokumentation für MQL5 lesen

 
Keith Watford:

Bitte bearbeiten Sie Ihren Beitrag und

benutzen Sie die Code-Taste (Alt+S), wenn Sie Code einfügen

Dieser Abschnitt ist MQL4.

MQL5 erstellen Sie ein Handle in OnInit und greifen auf die Pufferwerte im Hauptcode zu.

Ich schlage vor, dass Sie die Dokumentation für MQL5 lesen

Entschuldigung dafür. Ich habe gerade gemerkt, dass ich an der falschen Stelle gepostet habe. Danke für deine Antwort. Ich habe sie gerade gelöscht.
 
Hallo,
Ich bin gerade Anfänger im Lernen von mql4. Ich versuche, eine grundlegende supertrend Indikator zu erstellen.
Ich brauche die Hilfe eines Experten bezüglich des Alert-Codes.


Aktuelle Alert Code:
Alert(Symbol() + " (" + Period() + "M) --> " + LSignal + CPri);

Die Ausgabe sieht wie folgt aus:
Symbolname (15M) --> Kauf zu 524,55

Ich benötige aber auch Stoploss und Targets im Alert, basierend auf der folgenden einfachen Berechnung.

Angenommen, wir kaufen bei 524,55.

Stoploss : Einstieg - 1,5% des Einstiegskurses (524,55 - 7,85 = 516,70)
Ziel 1: Einstieg + 2,5% des Einstiegskurses (524,55 + 13,10 = 537,65)
Ziel 2: Einstieg + 5% des Aktienkurses (524,55 + 26,20 = 550,75)

(Hinweis: Die Tick-Größe beträgt 0,05. Wenn die Stoploss- oder Zielberechnung also eine ungerade Zahl ergibt, muss auf die nächste Tickgröße gerundet werden. Und wenn LSignal ein Verkaufssignal ist, muss die Berechnung umgekehrt werden.


Schließlich benötige ich folgende Ausgabe:
Symbol Name (15M) --> Kauf bei 524,55, SL: 516,70, Ziel 1: 537,65, Ziel 2: 550,75


Kann jemand bitte den Code für meine Anforderungen umschreiben?

TY im Voraus.