Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 721
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hallo.
Bitte um Hilfe.
Signal, wenn die Indikatorlinien auf dem ersten Balken gekreuzt werden.
Die Position wird korrekt beim ersten Takt eröffnet, wenn die Verschiebung ma_shiftT = 0 und ma_shiftD = 0 ist. Wenn die Verschiebung ma_shiftT = -1 und ma_shiftD = 1 ist, wird die Position beim dritten oder vierten Takt eröffnet.
Was muss ich tun, um eine Position zu eröffnen, wenn sie auf dem ersten Balken gekreuzt wird?
input int ma_shiftD=1;
int iTEMAHandle; // хэндл индикатора iTEMA
int iDEMAHandle; // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений для каждого бара
double maVal[]; //
//+------------------------------------------------------------------+
int OnInit()
{
//---
m_symbol.Name(Symbol());
//--- Получить хэндл индикатора iTEMA
iTEMAHandle=iTEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftT,PRICE_CLOSE);;
//---Получить хэндл индикатора
iDEMAHandle=iDEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftD,PRICE_CLOSE);;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- освобождаем хэндлы индикаторов
IndicatorRelease(iTEMAHandle);
IndicatorRelease(iDEMAHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- массив значений индикатора
ArraySetAsSeries(ma1Val,true);
//--- массив значений индикатора
ArraySetAsSeries(maVal,true);
if(CopyRates(_Symbol,_Period,0,5,mrate)<0)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//====
if(CopyBuffer(iTEMAHandle,0,0,5,ma1Val)<0)
{
Alert("Ошибка копирования буферов индикатора TEMA - номер ошибки:",GetLastError(),"!!");
return;
}
if(CopyBuffer(iDEMAHandle,0,0,5,maVal)<0)
{
Alert("Ошибка копирования буферов индикатора DEMA - номер ошибки:",GetLastError());
return;
}
bool Sell_Condition_3=(maVal[2]<=ma1Val[2]);
bool Sell_Condition_4=(maVal[1]>ma1Val[1]);
if(Sell_Condition_3 && Sell_Condition_4)
{
// открываю позицию SELL
}
}
Erstens: Warum 5 Indikatorwerte kopieren, wenn Sie nur einen verwenden?
Zweitens: Die Position der Indikatorlinien bedeutet nicht, dass sie sich kreuzen.
Es genügt, 2 Werte zu kopieren, beginnend mit dem ersten Wert.
CopyBuffer(iTEMAHandle, 0, 1, 2, ma1Val)
CopyBuffer(iDEMAHandle, 0, 1, 2, maVal)
Die einzige Möglichkeit, um festzustellen, ob es einen Schnittpunkt gibt, besteht darin, die Position der Linien auf dem zweiten und dem ersten Balken zu vergleichen. FÜR DIE ANSTEHENDE AUFGABE.
Es ist notwendig, die Richtung der Array-Indexierung zu berücksichtigen. In diesem Fall erhalten wir
Wenn die Bedingung erfüllt ist, ist die Tatsache der Überschneidung offensichtlich. Die Richtung der Kreuzung können Sie selbst bestimmen.
ps; Oh, richtig... Ich habe mir die Definition der Tatsache der Überschneidung nicht genau angesehen. In jedem Fall sind zusätzliche Werte nicht erforderlich. Das hat Sie wahrscheinlich verwirrt.
Hallo.
Bitte um Hilfe.
Signal, wenn die Indikatorlinien auf dem ersten Balken gekreuzt werden.
Die Position wird korrekt beim ersten Takt geöffnet, wenn die Verschiebung ma_shiftT = 0 und ma_shiftD = 0 ist. Wenn die Verschiebung ma_shiftT = -1 und ma_shiftD = 1 ist, wird die Position beim dritten oder vierten Takt geöffnet.
Was sollte ich tun, um eine Position zu eröffnen, wenn sie sich auf dem ersten Balken kreuzt?
input int ma_shiftD=1;
int iTEMAHandle; // хэндл индикатора iTEMA
int iDEMAHandle; // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений для каждого бара
double maVal[]; //
//+------------------------------------------------------------------+
int OnInit()
{
//---
m_symbol.Name(Symbol());
//--- Получить хэндл индикатора iTEMA
iTEMAHandle=iTEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftT,PRICE_CLOSE);;
//---Получить хэндл индикатора
iDEMAHandle=iDEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftD,PRICE_CLOSE);;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- освобождаем хэндлы индикаторов
IndicatorRelease(iTEMAHandle);
IndicatorRelease(iDEMAHandle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- массив значений индикатора
ArraySetAsSeries(ma1Val,true);
//--- массив значений индикатора
ArraySetAsSeries(maVal,true);
if(CopyRates(_Symbol,_Period,0,5,mrate)<0)
{
Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
return;
}
//====
if(CopyBuffer(iTEMAHandle,0,0,5,ma1Val)<0)
{
Alert("Ошибка копирования буферов индикатора TEMA - номер ошибки:",GetLastError(),"!!");
return;
}
if(CopyBuffer(iDEMAHandle,0,0,5,maVal)<0)
{
Alert("Ошибка копирования буферов индикатора DEMA - номер ошибки:",GetLastError());
return;
}
bool Sell_Condition_3=(maVal[2]<=ma1Val[2]);
bool Sell_Condition_4=(maVal[1]>ma1Val[1]);
if(Sell_Condition_3 && Sell_Condition_4)
{
// открываю позицию SELL
}
}
Ich habe ein Beispiel angehängt, um Ihnen zu helfen - in diesem Beispiel kopiere ich nicht mehrere Werte, sondern einen nach dem anderen. Wenn Sie vergleichen, was mein Beispiel zurückgibt und was Ihr Beispiel zurückgibt, sollten Sie sehen, wie die Indizierung in den Arrays in Ihrem Beispiel erfolgt (d.h. Sie sollten verstehen, wo ein Element von Takt 1 im Array gespeichert wird und wo ein Element von Takt 2 gespeichert wird).
Wie man mit meinem Beispiel arbeitet:
Ich habe speziell für die Beispieleinstellungen eine Diagrammvorlage mit demselben Namen wie das Beispiel erstellt und gespeichert - "Two iMA Shift minus shift plus.tpl". Speichern Sie diese Vorlage im Ordner \MQL5\Profiles\Templates auf Ihrem Terminal. Wenn Sie nun den Tester starten, wird der Tester diese Vorlage aufnehmen und Sie werden so ein schönes Bild im Tester haben:
Wenn er eine Kreuzung erkennt, hält das Prüfgerät an der Richtlinie
if(ma_one_1<ma_two_1 && ma_one_2>ma_two_2)
{
string text="ma_one_1 = "+DoubleToString(ma_one_1,Digits()+1)+"\n"+
"ma_two_1 = "+DoubleToString(ma_two_1,Digits()+1)+"\n"+
"ma_one_2 = "+DoubleToString(ma_one_2,Digits()+1)+"\n"+
"ma_two_2 = "+DoubleToString(ma_two_2,Digits()+1);
Comment(text);
DebugBreak();
}
und Sie können im Tester mit dem "Fadenkreuz" über die Balken fahren und die Werte der Indikatoren auf Balken 1 und Balken 2 sehen (das "Datenfenster" einbeziehen).
Hallo!
Ich habe eine Frage zum Spread bei FOREX.
Wenn sich der Spread ausweitet, wird ASK erhöht, BID gesenkt oder bewegen sich beide symmetrisch in unterschiedliche Richtungen?
Hallo!
Ich habe eine Frage zum Spread bei FOREX.
Wenn sich der Spread ausweitet, steigt dann ASK und sinkt BID oder bewegen sich beide symmetrisch in unterschiedliche Richtungen?
Es kann alles sein, was Sie wollen. Eines bleibt jedoch gleich: Der Spread ist die Differenz zwischen dem Ask-Kurs und dem Bid-Kurs.
Habe ich das richtig verstanden, dass sie sich gleichzeitig aufeinander zubewegen können, wenn sich die Spanne zu verringern beginnt?
"Eines bleibt gleich: Der Spread ist die Differenz zwischen dem Ask-Kurs und dem Bid-Kurs."
Es gibt keine anderen Gesetze.
"Eines bleibt gleich: Der Spread ist die Differenz zwischen dem Ask-Kurs und dem Bid-Kurs."
Es gibt keine anderen Gesetze.
Was denken Sie, wenn ich einen Kauf getätigt habe und der Spread sich auszuweiten beginnt, der Ask steigt und der Bid sinkt, sollte ich die Position schließen oder warten, bis der Ask sinkt?
Ein Kauf (BUY-Position) wird zum Geldkurs geschlossen.
Eine weitere Frage, die Sie sich wahrscheinlich stellen, lautet: "Was tun in Zeiten extrem hoher Volatilität?". Die Antwort ist, dass jeder anders entscheidet.
Ein Kauf (BUY-Position) wird zum Geldkurs geschlossen.
Eine weitere Frage, die Sie sich wahrscheinlich stellen, lautet: "Was tun in Zeiten extrem hoher Volatilität?". Die Antwort ist, dass jeder anders entscheidet.
Ein Kauf (BUY-Position) wird zum Geldkurs geschlossen.
Eine weitere Frage, die Sie sich wahrscheinlich stellen, lautet: "Was tun in Zeiten extrem hoher Volatilität?". Die Antwort ist, dass jeder anders entscheidet.