KristijanO: Sto ottenendo un sacco di errori ... sto ottenendo è un errore token inaspettato.
Non dirottare altri thread per i tuoi post fuori tema. Non stai chiedendo "aiuto per la codifica". La prossima volta, fai il tuo proprio, nuovo, thread.
Ti aspetti davvero una risposta? Non ci sono lettori del pensiero qui e le nostre sfere di cristallo sono incrinate. Non possiamo vedere il tuo codice rotto. Non c'è un contesto per la tua linea. Il tuo problema è probabilmente al di sopra di questo.
Posta tutto il codice rilevante (come quello che è sopra quella linea).
Posta i messaggi di errore e indica quale linea ha l'errore.
Ho trascorso 3 settimane per creare un indicatore personalizzato ma chiaramente non sono abbastanza bravo, sperando che qualcuno possa aiutare.
Il mio indicatore prende 3 esterni: "Timeframe", "numero del livello di visualizzazione sul grafico" e "distanza minima tra ciascun livello".
Tutto ciò di cui ho bisogno per codificare è raggruppare, rimuovere il punto frattale entro una distanza minima e quindi visualizzare il livello del punto frattale rimanente.
La prima versione (MainRS_AddOn2.mq4) che ho creato fa esattamente quello che voglio, tuttavia uso il metodo stupido disegnando l'oggetto e continuo a modificare l'oggetto, l'indicatore funziona estremamente lentamente.
La seconda versione (17_8_2020_RS_Indicator.mq4) memorizza tutti i livelli nel buffer che viene eseguito molto più velocemente, ma ho riscontrato problemi che non sono in grado di risolvere.
----credo di avere un errore logico nella memorizzazione di un nuovo livello frattale, che alcuni livelli di visualizzazione non hanno soddisfatto il requisito di distanza minima e hanno ottenuto un livello più duplicato quando eseguito in tester.
il lato sinistro è 17_8_2020_RS_Indicator.mq4, che ha un livello duplicato.
Sopra è il livello duplicato all'interno del 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 ;
}
}
Sto pensando che il codice sopra possa causare l'errore logico. Ma nessuno può dirlo a meno che non sia disposto a dedicare del tempo a esaminare l'intero file.
Apprezzo se qualcuno può aiutare. Di seguito è riportato il codice completo, sei libero di copiare e incollare o scaricare il file allegato.
Grazie molto.
//+------------------------------------------------------------------+//| 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);
}
//---------------------------------------------------------------------------------------------
Spero solo che qualcuno possa aiutarmi a sottolineare l'errore che ho fatto nel mio codice in modo da poter risolvere il mio problema del livello di visualizzazione duplicato.
Ma, ho bisogno di stoploss e obiettivi anche nell'avviso basato sul seguente semplice calcolo.
Assumiamo la nostra entrata di acquisto a 524.55.
Stoploss : Entrata - 1.5% del prezzo di entrata del titolo (524.55 - 7.85 = 516.70)
Target 1 : Entrata + 2.5% del prezzo di entrata delle azioni (524.55 + 13.10 = 537.65)
Obiettivo 2 : Entrata + 5% del prezzo di entrata delle azioni (524.55 + 26.20 = 550.75)
(Nota: la dimensione del tick è 0,05. Quindi se il calcolo dello stoploss o del target viene un numero dispari, deve essere arrotondato alla dimensione del tick più vicina. E se LSignal è un segnale di vendita, ho bisogno di un calcolo inverso.
Infine ho bisogno del seguente output:
Nome del simbolo (15M) --> Acquista a 524.55, SL: 516.70, Target 1: 537.65, Target 2: 550.75
Qualcuno può riscrivere il codice per il mio requisito?
Non postare due volte! Avevi già aperto questo thread.
Regole generali e buone pratiche del forum. - Generale - Forum di programmazione MQL5
"Non funziona" non ha senso - proprio come dire che la macchina non funziona. Non parte, non va in marcia, niente elettricità, manca la chiave, gomme sgonfie - senza senso.
Come fare domande in modo intelligente. 2004
Quando si chiede un codice
Ho cancellato il tuo topic con lo stesso argomento.
Non dirottare altri thread per i tuoi post fuori tema. Non stai chiedendo "aiuto per la codifica". La prossima volta, fai il tuo proprio, nuovo, thread.
Ti aspetti davvero una risposta? Non ci sono lettori del pensiero qui e le nostre sfere di cristallo sono incrinate. Non possiamo vedere il tuo codice rotto. Non c'è un contesto per la tua linea. Il tuo problema è probabilmente al di sopra di questo.
Posta i messaggi di errore e indica quale linea ha l'errore.
Come fare domande in modo intelligente. 2004
Elimina le query inutili.
Tutti i simboli sono disponibili sulle mie piattaforme.
Ho provato con 3 diversi indicatori renko e su tre diverse piattaforme, ma ancora niente funziona sui grafici renko.
Tutti gli altri indicatori funzionano correttamente e sono CCI, RSI e stochs.
Qualcun altro ha qualche suggerimento?
TEAMTRADER
Ciao Auto_free_Teamleader
Ho lo stesso problema, se hai trovato la soluzione rispondi pls
Ciao Auto_free_Teamleader
Ho lo stesso problema, se hai trovato la soluzione pls rispondere
Ciao a tutti,
Ho trascorso 3 settimane per creare un indicatore personalizzato ma chiaramente non sono abbastanza bravo, sperando che qualcuno possa aiutare.
Il mio indicatore prende 3 esterni: "Timeframe", "numero del livello di visualizzazione sul grafico" e "distanza minima tra ciascun livello".
Tutto ciò di cui ho bisogno per codificare è raggruppare, rimuovere il punto frattale entro una distanza minima e quindi visualizzare il livello del punto frattale rimanente.
La prima versione (MainRS_AddOn2.mq4) che ho creato fa esattamente quello che voglio, tuttavia uso il metodo stupido disegnando l'oggetto e continuo a modificare l'oggetto, l'indicatore funziona estremamente lentamente.
La seconda versione (17_8_2020_RS_Indicator.mq4) memorizza tutti i livelli nel buffer che viene eseguito molto più velocemente, ma ho riscontrato problemi che non sono in grado di risolvere.
----credo di avere un errore logico nella memorizzazione di un nuovo livello frattale, che alcuni livelli di visualizzazione non hanno soddisfatto il requisito di distanza minima e hanno ottenuto un livello più duplicato quando eseguito in tester.
il lato sinistro è 17_8_2020_RS_Indicator.mq4, che ha un livello duplicato.
Sopra è il livello duplicato all'interno del tester.
Sto pensando che il codice sopra possa causare l'errore logico. Ma nessuno può dirlo a meno che non sia disposto a dedicare del tempo a esaminare l'intero file.
Apprezzo se qualcuno può aiutare. Di seguito è riportato il codice completo, sei libero di copiare e incollare o scaricare il file allegato.
Grazie molto.
Mi scuso se ho fattoHijack altri thread.
Spero solo che qualcuno possa aiutarmi a sottolineare l'errore che ho fatto nel mio codice in modo da poter risolvere il mio problema del livello di visualizzazione duplicato.
Molte grazie
Sto cercando di passare da MQL4 a MQL5 ma sono bloccato al primo passo. per la funzione iCCI, perché non c'è più il parametro "shift"?
Per favore, modifica il tuo post e
usa il pulsante del codice (Alt+S) quando incolli il codice
Questa sezione è MQL4.
MQL5 si crea un handle in OnInit e si accede ai valori del buffer nel codice principale.
Ti suggerisco di leggere la documentazione per MQL5
Per favore, modifica il tuo post e
utilizzare il pulsante del codice (Alt+S) quando si incolla il codice
Questa sezione è MQL4.
MQL5 si crea un handle in OnInit e si accede ai valori del buffer nel codice principale.
Ti suggerisco di leggere la documentazione per MQL5