Алексей КоКоКо: Bitte beraten mql5, ich möchte Statistiken über die durchschnittliche Größe von zB eine 12-Stunden-Kerze zu sammeln, heute zum Beispiel ist Freitag, und ich möchte die Daten von Donnerstag, Mittwoch, Dienstag und Montag für die Berechnungen zu nehmen.
Ich nehme time[] ich konvertieren TimeToString, dann SplitString und TD. Gibt es eine schnellere und weniger umständlich Weg, um auf die gleiche Zeit Kerze einen Tag oder mehr zurück beziehen? Natürlich könnte ich mit der Anzahl der Candlesticks des aktuellen Zeitrahmens pro Tag arbeiten, aber ich befürchte, dass die Kurse verschoben werden, wenn sie Löcher haben.
Ich denke, wir können auf die Schleife nicht verzichten. Die Schleife kann jedoch auf unterschiedliche Weise aufgebaut werden. Achten Sie auf CopyRates()
intCopyRates(
string symbol_name, // имя символаENUM_TIMEFRAMES timeframe, // периодdatetime start_time, // с какой датыint count, // сколько копируемMqlRates rates_array[] // массив, куда будут скопированы данные
);
Wir setzen PERIOD_H1, start_time - Datum 12:00 und count 1. Bei der nächsten Iteration wird zu diesem Datum addiert oder davon subtrahiert (je nachdem, wie die Schleife aufgebaut ist) PeriodSeconds(PERIOD_D1)
Ich habe einen Stochastik-Indikator mit Allergie, er gibt ein Signal beim Überschreiten von Bewegungslinien. Bitte sagen Sie mir, wie ich es schaffe, ein Signal zu geben, indem ich die Slips nur dann überquere, wenn sie über oder unter der überkauften oder überverkauften Zone liegen.
#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);
}
Einen guten Tag an alle. Können Sie mir bitte sagen, wie ich die folgende Bedingung richtig kodieren kann, wobei ich mich nicht mehr an die mathematische Funktion erinnere.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;} Ich weiß, dass es eine mathematische Funktion gibt, die in der obigen Bedingung ohne &&-Zeichen verwendet werden kann , und das Programm wird auf Preiskonsistenz im Bereich von 4 Punkten prüfen. Aber ich weiß nicht mehr, wie diese mathematische Funktion heißt und wie man sie anwendet. Vielen Dank für die Hilfe.
Diese Frage scheint sich auf die Grundlagen von MQL4 zu beziehen. Angenommen, einige Variablen X, Y, Z werden im globalen Bereich deklariert. Dann ruft das Programm die Funktion F1() auf, um den X-Wert zu ermitteln. Obwohl diese Funktion nur X zurückgibt, werden die Variablen Y und Z während ihrer Ausführung berechnet, d.h. ihnen werden Werte zugewiesen, die später nicht mehr geändert werden. Weiter unten in der Zeile werden Y und Z erneut in einer Funktion F2() verwendet. Sollten wir zur Berechnung dieser Variablen erneut die Funktion F1() verwenden, die nicht nur X, sondern auch Y und Z zurückgibt? Oder sind Y und Z bereits im globalen Bereich überschrieben und werden automatisch in geänderter Form in die Funktion F2() eingefügt?
Wenn Sie eine globale Variable in einer Funktion ändern, wird sie sich ändern. Dies ist jedoch eine gefährliche Art der Programmierung, da der Code mit der Zeit wächst und es zu unübersichtlichen Zuweisungen in verschiedenen Funktionen des Programms kommt.
Im Programm gibt es eine Hauptfunktion, in der Sie die Zuweisung der globalen Variablen vornehmen. Und bei anderen Funktionen machen Sie es so:
int X, Y, Z;
voidOnTick()
{
X=Sum(Y,Z);
}
int Sum(int y, int z)
{
return(y+z);
}
Oder so:
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;
}
Einen guten Tag an alle. Können Sie mir bitte sagen, wie ich die folgende Bedingung richtig kodieren kann, wobei ich mich nicht mehr an die mathematische Funktion erinnere.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;} Ich weiß, dass es eine mathematische Funktion gibt, die in der obigen Bedingung ohne && Zeichen verwendet werden kann . Aber ich weiß nicht mehr, wie diese mathematische Funktion heißt und wie man sie anwendet. Vielen Dank für die Hilfe.
Könnten Sie mir bitte sagen, warum das Programm (auf mql4, auf Minuten, alle Ticks) liest die Zahl ausdrücklich und die gleiche Zahl in der Funktion anders berechnet? Hier ist der Code
Das Programm liest Pr nicht als 1,60854, obwohlPrint( ) den Wert von Pr als 1,60854 anzeigt. Infolgedessen öffnet das Programm den zweiten Auftrag, aber das sollte es nicht tun .
Und wenn wir die Zahl 1,60854 anstelle der Variable Pr setzen , liest das Programm sie und öffnet nicht die zweite Ordnung.
FRAGE Welche Änderungen sollten wir im Code vornehmen, damit das Programm Pr liest und nicht die zweite Bestellung öffnet. Ich danke Ihnen für Ihre Hilfe.
Bitte beraten mql5, ich möchte Statistiken über die durchschnittliche Größe von zB eine 12-Stunden-Kerze zu sammeln, heute zum Beispiel ist Freitag, und ich möchte die Daten von Donnerstag, Mittwoch, Dienstag und Montag für die Berechnungen zu nehmen.
Ich denke, wir können auf die Schleife nicht verzichten. Die Schleife kann jedoch auf unterschiedliche Weise aufgebaut werden. Achten Sie auf CopyRates()
Wir setzen PERIOD_H1, start_time - Datum 12:00 und count 1. Bei der nächsten Iteration wird zu diesem Datum addiert oder davon subtrahiert (je nachdem, wie die Schleife aufgebaut ist) PeriodSeconds(PERIOD_D1)
Bitte sagen Sie mir, wie man Indikatorparameter in iCustom aufzählt.
Ich habe einen Stochastik-Indikator mit Allergie, er gibt ein Signal beim Überschreiten von Bewegungslinien. Bitte sagen Sie mir, wie ich es schaffe, ein Signal zu geben, indem ich die Slips nur dann überquere, wenn sie über oder unter der überkauften oder überverkauften Zone liegen.
Einen guten Tag an alle.
Können Sie mir bitte sagen, wie ich die folgende Bedingung richtig kodieren kann, wobei ich mich nicht mehr an die mathematische Funktion erinnere.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;}
Ich weiß, dass es eine mathematische Funktion gibt, die in der obigen Bedingung ohne &&-Zeichen verwendet werden kann , und das Programm wird auf Preiskonsistenz im Bereich von 4 Punkten prüfen. Aber ich weiß nicht mehr, wie diese mathematische Funktion heißt und wie man sie anwendet.
Vielen Dank für die Hilfe.
Wenn Sie eine globale Variable in einer Funktion ändern, wird sie sich ändern. Dies ist jedoch eine gefährliche Art der Programmierung, da der Code mit der Zeit wächst und es zu unübersichtlichen Zuweisungen in verschiedenen Funktionen des Programms kommt.
Im Programm gibt es eine Hauptfunktion, in der Sie die Zuweisung der globalen Variablen vornehmen. Und bei anderen Funktionen machen Sie es so:
Oder so:
wie man die folgende Bedingung korrekt kodiert, wobei ich mich nicht mehr an die mathematische Funktion erinnere
Ich kenne keine bessere Möglichkeit, die Bedingung zu setzen
Einen guten Tag an alle.
Können Sie mir bitte sagen, wie ich die folgende Bedingung richtig kodieren kann, wobei ich mich nicht mehr an die mathematische Funktion erinnere.
if (Bid - Low[1]>=0.0030 && Bid - Low[1]<0.0035) {action;}
Ich weiß, dass es eine mathematische Funktion gibt, die in der obigen Bedingung ohne && Zeichen verwendet werden kann . Aber ich weiß nicht mehr, wie diese mathematische Funktion heißt und wie man sie anwendet.
Vielen Dank für die Hilfe.
Ohne und
Vielen Dank für den Hinweis.
Hier ist der Code
Das Programm liest Pr nicht als 1,60854, obwohlPrint( ) den Wert von Pr als 1,60854 anzeigt. Infolgedessen öffnet das Programm den zweiten Auftrag, aber das sollte es nicht tun
.
Und wenn wir die Zahl 1,60854 anstelle der Variable Pr setzen , liest das Programm sie und öffnet nicht die zweite Ordnung.
FRAGE Welche Änderungen sollten wir im Code vornehmen, damit das Programm Pr liest und nicht die zweite Bestellung öffnet.
Ich danke Ihnen für Ihre Hilfe.