Алексей КоКоКо: Si prega di consigliare mql5, voglio raccogliere statistiche della dimensione media di ad esempio una candela di 12 ore, oggi per esempio è venerdì, e voglio prendere i dati di giovedì, mercoledì, martedì e lunedì per i calcoli.
Prendo time[] e converto TimeToString, poi SplitString e TD. C'è un modo più veloce e meno macchinoso per fare riferimento alla stessa candela del tempo un giorno o più indietro? Naturalmente, potrei eseguire il numero di candele del timeframe corrente in un giorno con intervalli, ma ho paura che se ci sono delle lacune nelle quotazioni, saranno spostate.
Penso che non possiamo fare a meno del ciclo. Ma il ciclo può essere costruito in modi diversi. Prestare attenzione a CopyRates()
intCopyRates(
string symbol_name, // имя символаENUM_TIMEFRAMES timeframe, // периодdatetime start_time, // с какой датыint count, // сколько копируемMqlRates rates_array[] // массив, куда будут скопированы данные
);
Abbiamo impostato PERIOD_H1, start_time - data 12:00 e count 1. Alla prossima iterazione, aggiungiamo a questa data o la sottraiamo (a seconda di come è organizzato il ciclo) PeriodSeconds(PERIOD_D1)
Ho un indicatore stocastico con allergia, dà un segnale sull'incrocio delle linee mobili. Per favore ditemi come fare in modo che dia un segnale attraversando gli slips solo quando è sopra o sotto la zona di ipercomprato o ipervenduto.
#property indicator_separate_window#property indicator_buffers4#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_level180#property indicator_level220#property indicator_maximum100#property indicator_minimum0//---- input parameters/*************************************************************************
PERIOD_M1 1
PERIOD_M5 5
PERIOD_M15 15
PERIOD_M30 30
PERIOD_H1 60
PERIOD_H4 240
PERIOD_D1 1440
PERIOD_W1 10080
PERIOD_MN1 43200
You must use the numeric value of the timeframe that you want to use
when you set the TimeFrame' value with the indicator inputs.
---------------------------------------
MODE_SMA 0 Simple moving average,
MODE_EMA 1 Exponential moving average,
MODE_SMMA 2 Smoothed moving average,
MODE_LWMA 3 Linear weighted moving average.
You must use the numeric value of the MA Method that you want to use
when you set the 'ma_method' value with the indicator inputs.
**************************************************************************/externint TimeFrame=240;
externint KPeriod=5;
externint DPeriod=3;
externint Slowing=3;
externint MAMethod=0;
externint PriceField=0;// PriceField: 0=Hi/Low 1=Close/Closeexternstring note_TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN";
externstring __MA_Method = "SMA0 EMA1 SMMA2 LWMA3";
externstring __PriceField = "0=Hi/Low 1=Close/Close";
//extern string __Price = "0O,1C 2H3L,4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6";double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
datetime last_t=0;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicator lineSetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_LINE,STYLE_DOT);
SetIndexLabel(0, "MTF_Stochastic("+KPeriod+","+DPeriod+","+Slowing+")TF"+TimeFrame+"");
SetIndexLabel(1,"MTF_Stochastic("+KPeriod+","+DPeriod+","+Slowing+")TF"+TimeFrame+"");
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,233);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,234);
//---- name for DataWindow and indicator subwindow label switch(TimeFrame)
{
case1 : string TimeFrameStr="Period_M1"; break;
case5 : TimeFrameStr="Period_M5"; break;
case15 : TimeFrameStr="Period_M15"; break;
case30 : TimeFrameStr="Period_M30"; break;
case60 : TimeFrameStr="Period_H1"; break;
case240 : TimeFrameStr="Period_H4"; break;
case1440 : TimeFrameStr="Period_D1"; break;
case10080 : TimeFrameStr="Period_W1"; break;
case43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("MTF_Stochastic("+KPeriod+","+DPeriod+","+Slowing+") "+TimeFrameStr);
start();
return(0);
}
//----//+------------------------------------------------------------------+//| MTF Stochastic |//+------------------------------------------------------------------+int deinit()
{
for (int i=Bars;i>=0;i--){
ObjectDelete("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0));
}
return(0);
}
bool up_a=false;
bool dn_a=false;
int start()
{
datetime TimeArray[];
ArrayResize(TimeArray,Bars);
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined timeframe on to current timeframe
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
// limit=Bars-counted_bars+TimeFrame/Period(); //igorad
limit=Bars-1;
limit=MathMax(limit,TimeFrame/Period());
//limit=MathMin(limit,BarsToCount);for(i=0,y=0;i<limit;i++)
{
if (Time[i]<TimeArray[y]) y++;
/***********************************************************
Add your main indicator loop below. You can reference an existing
indicator with its iName or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator timeframe
Rule 3: Use 'y' for the indicator's shift value
**********************************************************/
ExtMapBuffer3[i]=EMPTY_VALUE;
ExtMapBuffer4[i]=EMPTY_VALUE;
ExtMapBuffer1[i]=EMPTY_VALUE;
ExtMapBuffer2[i]=EMPTY_VALUE;
ExtMapBuffer1[i]=iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,0,y);
ExtMapBuffer2[i]=iStochastic(NULL,TimeFrame,KPeriod,DPeriod,Slowing,MAMethod,PriceField,1,y);
ObjectDelete("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0));
if (NormalizeDouble(ExtMapBuffer1[i],Digits)>NormalizeDouble(ExtMapBuffer2[i],Digits) && NormalizeDouble(ExtMapBuffer1[i+1],Digits)<=NormalizeDouble(ExtMapBuffer2[i+1],Digits) && NormalizeDouble(ExtMapBuffer1[i+1],Digits)!=NormalizeDouble(ExtMapBuffer1[i],Digits) ){
ExtMapBuffer3[i]=ExtMapBuffer1[i];
ObjectDelete("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0));
ObjectCreate("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0),22,0,Time[i],Low[i]-5*Point);
ObjectSet("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0),6,Blue);
ObjectSet("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0),14,233);
}
if (NormalizeDouble(ExtMapBuffer1[i],Digits)<NormalizeDouble(ExtMapBuffer2[i],Digits) && NormalizeDouble(ExtMapBuffer1[i+1],Digits)>=NormalizeDouble(ExtMapBuffer2[i+1],Digits) && NormalizeDouble(ExtMapBuffer1[i+1],Digits)!=NormalizeDouble(ExtMapBuffer1[i],Digits)){
ExtMapBuffer4[i]=ExtMapBuffer1[i];
ObjectDelete("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0));
ObjectCreate("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0),22,0,Time[i],High[i]+5*Point);
ObjectSet("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0),6,Red);
ObjectSet("st"+Symbol()+Period()+DoubleToStr(KPeriod+DPeriod+Slowing,0)+DoubleToStr(i,0),14,234);
}
}
////---- Refresh buffers ++++++++++++++ if (TimeFrame < Period()) TimeFrame = Period();
if (TimeFrame>Period()) {
int PerINT=TimeFrame/Period()+1;
datetime TimeArr[]; ArrayResize(TimeArr,PerINT);
ArrayCopySeries(TimeArr,MODE_TIME,Symbol(),Period());
for(i=0;i<PerINT+1;i++) {if (TimeArr[i]>=TimeArray[0]) {
/********************************************************
Refresh buffers: buffer[i] = buffer[0];
************************************************************/
ExtMapBuffer1[i]=ExtMapBuffer1[0];
ExtMapBuffer2[i]=ExtMapBuffer2[0];
} } }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++ Raff if (ExtMapBuffer3[0]!=EMPTY_VALUE && !up_a){
up_a=true;
dn_a=false;
Alert("MTF Stochastic Long cross Signal on "+Symbol());
}
if (ExtMapBuffer4[0]!=EMPTY_VALUE && !dn_a){
dn_a=true;
up_a=false;
Alert("MTF Stochastic Short cross Signal on "+Symbol());
}
return(0);
}
Buona giornata a tutti. Potete per favore dirmi come codificare correttamente la seguente condizione usando non ricordo quale funzione matematica.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;} So che c'è una funzione matematica che può essere usata nella condizione precedente senza il segno &&. Ma non ricordo come si chiama questa funzione matematica e come applicarla. Grazie per l'aiuto.
Questa domanda sembra essere dalle basi di MQL4. Supponiamo che alcune variabili X, Y, Z siano dichiarate nell'ambito globale. Poi, il programma chiama la funzione F1() per ottenere il valore X. Anche se questa funzione restituisce solo X, le variabili Y e Z sono calcolate durante il suo funzionamento, cioè vengono loro assegnati dei valori che non saranno modificati in seguito. Più avanti, Y e Z sono di nuovo usati in qualche funzione F2(). Per calcolare queste variabili, dobbiamo rivolgere di nuovo la funzione F1() prevedendo la restituzione non solo di X, ma anche di Y e Z? Oppure Y e Z sono già sovrascritti nell'ambito globale e saranno automaticamente inseriti nella funzione F2() in una forma modificata?
Se cambiate una variabile globale in una funzione, questa cambierà. Ma questo è un modo pericoloso di programmare, perché nel codice, man mano che cresce, ci saranno assegnazioni non ovvie in diverse funzioni del programma.
C'è una funzione principale nel programma, è lì che si fa l'assegnazione della variabile globale. E in altre funzioni, fate così:
int X, Y, Z;
voidOnTick()
{
X=Sum(Y,Z);
}
int Sum(int y, int z)
{
return(y+z);
}
O come questo:
int X, Y, Z;
voidOnTick()
{
Replace(X,Y,Z);
}
void Replace(int& x, int& y, int& z)
{
int a=x;
x=y;
y=z;
z=a;
}
Buona giornata a tutti. Potete per favore dirmi come codificare correttamente la seguente condizione usando non ricordo quale funzione matematica.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;} So che c'è una funzione matematica che può essere usata nella condizione precedente senza il segno &&. Ma non ricordo come si chiama questa funzione matematica e come applicarla. Grazie per l'aiuto.
Potreste dirmi perché il programma (su mql4, su minuti, tutti i tick) legge il numero esplicitamente e lo stesso numero calcolato nella funzione in modo diverso? Ecco il codice
Il programma non legge Pr come 1,60854 anche sePrint( ) mostra il valore di Pr come 1,60854. Di conseguenza, il programma apre il secondo ordine, ma non dovrebbe farlo .
E se impostiamo il numero 1,60854 invece della variabile Pr , il programma lo legge e non apre il secondo ordine.
Si prega di consigliare mql5, voglio raccogliere statistiche della dimensione media di ad esempio una candela di 12 ore, oggi per esempio è venerdì, e voglio prendere i dati di giovedì, mercoledì, martedì e lunedì per i calcoli.
Penso che non possiamo fare a meno del ciclo. Ma il ciclo può essere costruito in modi diversi. Prestare attenzione a CopyRates()
Abbiamo impostato PERIOD_H1, start_time - data 12:00 e count 1. Alla prossima iterazione, aggiungiamo a questa data o la sottraiamo (a seconda di come è organizzato il ciclo) PeriodSeconds(PERIOD_D1)
Per favore, ditemi come enumerare i parametri dell'indicatore in iCustom.
Ho un indicatore stocastico con allergia, dà un segnale sull'incrocio delle linee mobili. Per favore ditemi come fare in modo che dia un segnale attraversando gli slips solo quando è sopra o sotto la zona di ipercomprato o ipervenduto.
Buona giornata a tutti.
Potete per favore dirmi come codificare correttamente la seguente condizione usando non ricordo quale funzione matematica.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;}
So che c'è una funzione matematica che può essere usata nella condizione precedente senza il segno &&. Ma non ricordo come si chiama questa funzione matematica e come applicarla.
Grazie per l'aiuto.
Se cambiate una variabile globale in una funzione, questa cambierà. Ma questo è un modo pericoloso di programmare, perché nel codice, man mano che cresce, ci saranno assegnazioni non ovvie in diverse funzioni del programma.
C'è una funzione principale nel programma, è lì che si fa l'assegnazione della variabile globale. E in altre funzioni, fate così:
O come questo:
come codificare correttamente la seguente condizione usando non ricordo quale funzione matematica
Non conosco un modo migliore per impostare la condizione
Buona giornata a tutti.
Potete per favore dirmi come codificare correttamente la seguente condizione usando non ricordo quale funzione matematica.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;}
So che c'è una funzione matematica che può essere usata nella condizione precedente senza il segno &&. Ma non ricordo come si chiama questa funzione matematica e come applicarla.
Grazie per l'aiuto.
Senza e
Grazie mille per il suggerimento.
Ecco il codice
Il programma non legge Pr come 1,60854 anche sePrint( ) mostra il valore di Pr come 1,60854. Di conseguenza, il programma apre il secondo ordine, ma non dovrebbe farlo
.
E se impostiamo il numero 1,60854 invece della variabile Pr , il programma lo legge e non apre il secondo ordine.
DOMANDA Quali modifiche dovremmo fare nel codice in modo che il programma legga Pr e non apra il secondo ordine.
Grazie per il vostro aiuto.