Danke, wie schreibe ich eine Schleife, um die Nummer des Balkens zu finden, der die beiden MAs kreuzt, wenn die ersten beiden Punkte des Algorithmus erfüllt sind und es Werte der beiden MAs auf dem ersten Balken gibt?
/
.
Aha, Sie haben es also doch nicht durch Arrays gelöst.
Hinweis: Die Lösung über Arrays (Kopieren der LETZTEN DREI Werte aus den Indikatoren in die Arrays First[], Second[] und Third[]) ist dasKreuzen von zwei iMAs- OnTick():
//--- We look for crossing of two indicatorsdouble First[];
double Second[];
double Third[];
ArraySetAsSeries(First,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Second,true); // index [0] - the most right bar on a chartsArraySetAsSeries(Third,true); // index [0] - the most right bar on a chartsint buffer_num=0; // indicator buffer number int start_pos=0; // start position int count=3; // amount to copy if(!iMAGet(handle_iMA_First,buffer_num,start_pos,count,First))
return;
if(!iMAGet(handle_iMA_Second,buffer_num,start_pos,count,Second))
return;
if(InpFilterMA)
if(!iMAGet(handle_iMA_Third,buffer_num,start_pos,count,Third))
return;
//--- step 1: check in the arrays bars [0] and [1]if(First[0]>Second[0] && First[1]<Second[1]) // buy
{
if(InpFilterMA)
if(Third[0]>=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[0] && First[1]>Second[1]) // sell
{
if(InpFilterMA)
if(Third[0]<=First[0])
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
//--- step 2: on a step of 1 crossing haven't found. check in the arrays bars [0] and [2]if(First[0]>Second[0] && First[2]<Second[2]) // buy
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Bid()-InpStopLoss*m_adjusted_point;
double tp=m_symbol.Ask()+InpTakeProfit*m_adjusted_point;
OpenBuy(sl,tp);
return;
}
elseif(First[0]<Second[2] && First[1]>Second[2]) // sell
{
//--- search in historyif(SearchPositions(iTime(start_pos+3),iTime(start_pos)))
return;
if(!RefreshRates())
{
PrevBars=iTime(1);
return;
}
double sl=m_symbol.Ask()+InpStopLoss*m_adjusted_point;
double tp=m_symbol.Bid()-InpTakeProfit*m_adjusted_point;
OpenSell(sl,tp);
return;
}
In Ihrem Fall (ein Wert nach dem anderen) sieht die Schleife wie folgt aus:
int signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buydouble MA1_curr=iMAGet(handle_iMA_1,0); // the value of the 1st MA on i bardouble MA2_curr=iMAGet(handle_iMA_2,0); // the value of the 1st MA on i barfor(int i=0;i<100;i++)
{
double MA1_prev=iMAGet(handle_iMA_1,i+1); // the value of the 1st MA on i+1 th bardouble MA2_prev=iMAGet(handle_iMA_2,i+1); // the value of the 1st MA on i+1 th bar//---
signal=0; // "-1" -> Sell; "0" -> Not signal; "1" -> Buyif(MA1_prev<MA2_prev && MA1_curr>MA2_curr)
signal=1;
elseif(MA1_prev>MA2_prev && MA1_curr<MA2_curr)
signal=-1;
//---
MA1_curr=MA1_prev;
MA2_curr=MA2_prev;
}
MA1_curr - der Wert des Indikators MA1 auf bar #i, MA1_prev - der Wert des Indikators MA1 auf bar #i+1 MA2_curr - der Wert des Indikators MA2 auf bar #i, MA2_prev - der Wert des Indikators MA2 auf bar #i+1
Wenn Sie eine Kreuzung erhalten (die Variable signalisiert entweder "-1" oder "1"), ist der Wert von i die Nummer des Balkens, in dem die Kreuzung stattgefunden hat.
Dies ist der einfachste Algorithmus, um den Crossover zu finden, aber nicht der genaueste.
Guten Tag. Könnten Sie mir bitte sagen, in welchem Format ich historische Daten vom Finam- oder MFD.ru-Server herunterladen kann, um den Kursverlauf zu importieren? Ich kann es überhaupt nicht tun. Ich kann sie nur von txt nach csv speichern, das ist alles.
Guten Tag. Könnten Sie mir bitte sagen, in welchem Format ich historische Daten vom Finam- oder MFD.ru-Server herunterladen kann, um den Kursverlauf zu importieren? Ich kann es überhaupt nicht tun. Ich kann sie nur von txt nach csv speichern, das ist alles.
Sie müssen in MetaTrader 5 nichts herunterladen :) - Sobald Sie eine Verbindung zu einem Handelsserver herstellen, steht Ihnen der echte Tickverlauf zur Verfügung. Blick in RichtungCopyTicks
In MetaTrader 5 müssen Sie nichts herunterladen :) - Sobald Sie sich mit dem Handelsserver verbinden, steht Ihnen der echte Tickverlauf zur Verfügung. Blick in RichtungCopyTicks
Ich brauche nur russische Aktien im Wert von 10 Jahren. Mein Makler gibt mir nicht so viel, und es ist unwahrscheinlich, dass ich einen finde.
Guten Abend, habe eine Frage zu MQL5, wenn Sie helfen können.
Ich habe noch keine Lehrbücher über 5.
Die Frage ist.
#property indicator_level1 30 - Ich habe den Parameter definiert. Wenn ich den Indikator in das Diagramm lade. Ich habe verstanden.
Ich ändere die Linie mit der Funktion ColorBuffer[], wenn die Linie unter diesen Parameter abfällt.
Ich habe hier ein Problem. Wenn ich den Indikator öffne und den Parameter für einen anderen ändere, wird die Füllstandslinie auch nach dem Laden des Indikators dort platziert, aber der Indikator berechnet sie anhand des Parameters, der zuvor festgelegt wurde, d.h. #property indicator_level1 30
Wie sollte ich diese Ebene ansprechen, um sie zur Laufzeit ändern zu können?
- Ich habe bereits versucht, den Parameter zu überprüfen. Und berechnen Sie die gesamte Indikatorkette neu.
Aber es wird immer noch nicht so gezeichnet, wie ich es möchte!
Hilfe!
:)
Abfolge der Maßnahmen
RSI.mqh
#Eigenschaft indicator_level1 30
#Eigenschaft indicator_level2 70
In der Beschreibung Calculaite Code. Am Ende der Zeile, wo die Linie durch For geht, habe ich die Funktion hinzugefügt, die Farbe der Linie zu ändern, wenn sie unter diesem Niveau liegt. ExtColorsBuffer [i] =0; if (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1; } if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2;
Erwartetes Ergebnis
Ich sehe das gleiche wie auf dem Bild, aber wenn ich Einstellungen öffnen und ändern level indicator_level1 / 2 in den Prozess der Verwendung des Indikators erhalte ich ein Redraw. Der Indikator wird neu gezeichnet, so dass er seine Farbe ändert, wenn die Linie ein Niveau überschreitet. Aber für mich ist es auf dem gleichen Niveau wie vorher :)
Guten Abend, habe eine Frage zu MQL5, wenn Sie helfen können.
Ich habe noch keine Lehrbücher über 5.
Die Frage ist.
#property indicator_level1 30 - Ich habe den Parameter definiert. Wenn ich den Indikator in das Diagramm lade. Ich habe verstanden.
Ich ändere die Linie mit der Funktion ColorBuffer[], wenn die Linie unter diesen Parameter abfällt.
Ich habe hier ein Problem. Wenn ich den Indikator öffne und den Parameter für einen anderen ändere, wird die Füllstandslinie auch nach dem Laden des Indikators dort platziert, aber der Indikator berechnet sie anhand des Parameters, der zuvor festgelegt wurde, d.h. #property indicator_level1 30
Wie sollte ich diese Ebene ansprechen, um sie zur Laufzeit ändern zu können?
- Ich habe bereits versucht, den Parameter zu überprüfen. Und berechnen Sie die gesamte Indikatorkette neu.
Aber es wird immer noch nicht so gezeichnet, wie ich es möchte!
Hilfe!
:)
Abfolge der Maßnahmen
RSI.mqh
#Eigenschaft indicator_level1 30
#Eigenschaft indicator_level2 70
In der Beschreibung Calculaite Code. Am Ende der Zeile, wo die Linie durch For geht, habe ich die Funktion hinzugefügt, die Farbe der Linie zu ändern, wenn sie unter diesem Niveau liegt. ExtColorsBuffer [i] =0; if (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =1; } if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) { ExtColorsBuffer [i] =2;
Erwartetes Ergebnis
Ich sehe das gleiche wie auf dem Bild, aber wenn ich Einstellungen öffnen und ändern level indicator_level1 / 2 in den Prozess der Verwendung des Indikators erhalte ich ein Redraw. Der Indikator wird neu gezeichnet, so dass er seine Farbe ändert, wenn die Linie ein Niveau überschreitet. Aber für mich ist es auf dem gleichen Niveau wie vorher :)
Mehr Infos
...
IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrCrimson); // Поменяет цвет самого первого по счёту уровня на цвет CrimsonIndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrDeepSkyBlue); // Поменяет цвет второго по счёту уровня на цвет DeepSkyBlue
Igor, wir liegen beide falsch. Ich habe die Aufgabe nicht sofort verstanden...
Neben der #property-Direktive können Sie die Indikatorstufe mit der Funktion
IndicatorSetDouble(INDICATOR_LEVELVALUE,0,20);
Dementsprechend sollte dieser Wert in den Parametern für eingehende Indikatoren festgelegt werden. In diesem Fall wird der Pegel um den angegebenen Wert gezeichnet und sollte um diesen Wert geändert werden.
Print("Баланс на счёте = ",AccountInfoDouble(ACCOUNT_BALANCE));
printf("ACCOUNT_BALANCE = %G",AccountInfoDouble(ACCOUNT_BALANCE));
Wenn Sie %G in pintf entfernen, wird der Wert nicht angezeigt, aber in Print wird er ohne %G angezeigt.
Auch in Print wird der Saldowert 10000.0 angezeigt, in printf aber nur die ganze Zahl 10000
Ich bin mehr daran interessiert, was der Unterschied zwischen Print und Printf ist und vor allem, warum es nicht ohne %G angezeigt wird. Ich habe in dem Nachschlagewerk nichts verstanden.
Hallo Kollegen, ich habe eine Frage, ich versuche, ein Widget meines Signals in die Signatur des Forums "Forex Money" einzufügen, aber sie haben HTML deaktiviert oder blockiert, gibt es eine Möglichkeit, es in eine URL zu konvertieren?
Danke, wie schreibe ich eine Schleife, um die Nummer des Balkens zu finden, der die beiden MAs kreuzt, wenn die ersten beiden Punkte des Algorithmus erfüllt sind und es Werte der beiden MAs auf dem ersten Balken gibt?
/
.
Aha, Sie haben es also doch nicht durch Arrays gelöst.
Hinweis: Die Lösung über Arrays (Kopieren der LETZTEN DREI Werte aus den Indikatoren in die Arrays First[], Second[] und Third[]) ist dasKreuzen von zwei iMAs- OnTick():
In Ihrem Fall (ein Wert nach dem anderen) sieht die Schleife wie folgt aus:
MA1_curr - der Wert des Indikators MA1 auf bar #i, MA1_prev - der Wert des Indikators MA1 auf bar #i+1
MA2_curr - der Wert des Indikators MA2 auf bar #i, MA2_prev - der Wert des Indikators MA2 auf bar #i+1
Wenn Sie eine Kreuzung erhalten (die Variable signalisiert entweder "-1" oder "1"), ist der Wert von i die Nummer des Balkens, in dem die Kreuzung stattgefunden hat.
Dies ist der einfachste Algorithmus, um den Crossover zu finden, aber nicht der genaueste.
Ja, Sie haben sich entschieden, doch keine Arrays zu verwenden...
Danke, Ihr andererMA Cross EA wurde als Beispiel verwendet
Ich möchte es am dritten oder fünften oder...n Balken nach dem Überqueren eingeben
In Ihrem Fall (Sie erhalten einen Wert) sieht der Zyklus wie folgt aus
Warum gibt es keinen Ausgang aus der Schleife, wenn eine Kreuzung gefunden wird?
Können diese Bedingungen außerhalb der Schleife gestellt werden?
.
Guten Tag. Könnten Sie mir bitte sagen, in welchem Format ich historische Daten vom Finam- oder MFD.ru-Server herunterladen kann, um den Kursverlauf zu importieren? Ich kann es überhaupt nicht tun. Ich kann sie nur von txt nach csv speichern, das ist alles.
Guten Tag. Könnten Sie mir bitte sagen, in welchem Format ich historische Daten vom Finam- oder MFD.ru-Server herunterladen kann, um den Kursverlauf zu importieren? Ich kann es überhaupt nicht tun. Ich kann sie nur von txt nach csv speichern, das ist alles.
Sie müssen in MetaTrader 5 nichts herunterladen :) - Sobald Sie eine Verbindung zu einem Handelsserver herstellen, steht Ihnen der echte Tickverlauf zur Verfügung. Blick in RichtungCopyTicks
In MetaTrader 5 müssen Sie nichts herunterladen :) - Sobald Sie sich mit dem Handelsserver verbinden, steht Ihnen der echte Tickverlauf zur Verfügung. Blick in RichtungCopyTicks
Ich brauche nur russische Aktien im Wert von 10 Jahren. Mein Makler gibt mir nicht so viel, und es ist unwahrscheinlich, dass ich einen finde.
Beschreibung des Problems
Abfolge der Maßnahmen
RSI.mqh
#Eigenschaft indicator_level1 30
#Eigenschaft indicator_level2 70
In der Beschreibung Calculaite Code. Am Ende der Zeile, wo die Linie durch For geht, habe ich die Funktion hinzugefügt, die Farbe der Linie zu ändern, wenn sie unter diesem Niveau liegt.
ExtColorsBuffer [i] =0;
if (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1;
}
if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2;
Erwartetes Ergebnis
Ich sehe das gleiche wie auf dem Bild, aber wenn ich Einstellungen öffnen und ändern level indicator_level1 / 2 in den Prozess der Verwendung des Indikators erhalte ich ein Redraw. Der Indikator wird neu gezeichnet, so dass er seine Farbe ändert, wenn die Linie ein Niveau überschreitet. Aber für mich ist es auf dem gleichen Niveau wie vorher :)
Mehr Infos
...
5.0 Build 1755
Beschreibung des Problems
Abfolge der Maßnahmen
RSI.mqh
#Eigenschaft indicator_level1 30
#Eigenschaft indicator_level2 70
In der Beschreibung Calculaite Code. Am Ende der Zeile, wo die Linie durch For geht, habe ich die Funktion hinzugefügt, die Farbe der Linie zu ändern, wenn sie unter diesem Niveau liegt.
ExtColorsBuffer [i] =0;
if (ExtRSIBuffer [i]> indicator_level2& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =1;
}
if (ExtRSIBuffer [i]< indicator_level1& indicator_levelcolor!=NULL) {
ExtColorsBuffer [i] =2;
Erwartetes Ergebnis
Ich sehe das gleiche wie auf dem Bild, aber wenn ich Einstellungen öffnen und ändern level indicator_level1 / 2 in den Prozess der Verwendung des Indikators erhalte ich ein Redraw. Der Indikator wird neu gezeichnet, so dass er seine Farbe ändert, wenn die Linie ein Niveau überschreitet. Aber für mich ist es auf dem gleichen Niveau wie vorher :)
Mehr Infos
...
5.0 Build 1755
Beschreibung des Problems
Ich würde gerne wissen, warum mir die Antwort in einem separaten Thema nicht gefällt.
Dies ist das Forum für Handel, automatisierte Handelssysteme und Strategietests.
Ich brauche Hilfe in MQL5 #property indicator_level
Alexey Viktorov, 2018.01.31 09:06
Igor, wir liegen beide falsch. Ich habe die Aufgabe nicht sofort verstanden...
Neben der #property-Direktive können Sie die Indikatorstufe mit der Funktion
Dementsprechend sollte dieser Wert in den Parametern für eingehende Indikatoren festgelegt werden. In diesem Fall wird der Pegel um den angegebenen Wert gezeichnet und sollte um diesen Wert geändert werden.
Testfall
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
Aleksey Rodionov, 2018.02.06 16:31
Hier ist ein interessantes Beispiel:
Wenn Sie %G in pintf entfernen, wird der Wert nicht angezeigt, aber in Print wird er ohne %G angezeigt.
Auch in Print wird der Saldowert 10000.0 angezeigt, in printf aber nur die ganze Zahl 10000
Ich bin mehr daran interessiert, was der Unterschied zwischen Print und Printf ist und vor allem, warum es nicht ohne %G angezeigt wird. Ich habe in dem Nachschlagewerk nichts verstanden.
Hallo Kollegen, ich habe eine Frage, ich versuche, ein Widget meines Signals in die Signatur des Forums "Forex Money" einzufügen, aber sie haben HTML deaktiviert oder blockiert, gibt es eine Möglichkeit, es in eine URL zu konvertieren?
Hier ist der Code <iframe frameborder="0" width="220" height="140" src="https://www.mql5.com/ru/signals/widget/signal/328l?t=green"></iframe>