Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 4
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
Um die Funktionen zur Ermittlung beliebiger Fraktale vollständig vom Indikator zu trennen, sollten wir die Arrays high[] und low[] und den Grenzwert nicht per Referenz übergeben.
Da unser Code sehr nah an MQL5 ist, müssen wir die Funktionen High[], Low[], iHigh() und iLow() ablehnen. So wird es in diesem Indikator aussehen:
Allerdings sollten Sie auch für -1 von den Funktionen GetPriceHigh() und GetPriceLow() prüfenRSI sollte 15 Minuten betragen. Wir brauchen die EA, um es zu überprüfen alle 20 Minuten von der Markteröffnung (9-00, 9-20, 9-40 usw.) Nehmen wir an, bei 10-20 gab es eine Kreuzung unter der 70-Ebene es merkt sich den Preis und bei 10-40 prüft, ob der Preis niedriger ist als bei 10-20 es öffnet ein kurzes.
Nun, zuerst müssen Sie die Zeit eine bestimmte Anzahl von Minuten zurückbekommen. Hier ist ein Testskript:
//| sTestValueRSI.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15; // Таймфрейм RSI
input int MinutesBefore =20; // Количество минут назад
int minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
datetime time_before=TimeCurrent()-minutesBefore*PeriodSeconds(PERIOD_M1);
int shift=Bars(Symbol(),TimeframeRSI,TimeCurrent(),time_before);
double value=iRSI(Symbol(),TimeframeRSI,14,PRICE_CLOSE,shift);
Comment("\nCurrent time: ",TimeToString(TimeCurrent()),
"\nВремя ",minutesBefore," минут назад: ",TimeToString(time_before),
"\nБар времени ",TimeToString(time_before)," = ",shift," на таймфрейме ",EnumToString(TimeframeRSI),
"\nЗначение RSI на баре ",shift," периода ",EnumToString(TimeframeRSI),": ",DoubleToString(value,Digits()));
}
//+------------------------------------------------------------------+
Dieses Skript zählt von der aktuellen Serverzeit abwärts - testen Sie einfach, ob Sie RSI-Daten von vor einer bestimmten Anzahl von Minuten erhalten.
Als Nächstes müssen wir die aktuelle Uhrzeit wissen und ob ihr Wert ein Vielfaches der Minuten des Prüfintervalls ist. Ich habe es zu einem Test-EA gemacht:
//| exTestValueRSI.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15; // Таймфрейм RSI
input int PeriodRSI = 14; // Период расчёта RSI
input ENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE; // Цена расчёта RSI
input int MinutesBefore =20; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
double prevRSIValue; // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
MqlDateTime server_time;
TimeToStruct(TimeCurrent(),server_time);
if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
}
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
{
datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
int shift=Bars(symbol_name,timeframe,start_time,time_before);
return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
Was müssen wir als nächstes wissen?
Als Nächstes müssen wir die aktuelle Uhrzeit wissen und ob ihr Wert ein Vielfaches der Minuten des Prüfintervalls ist. Ich habe es zu einem Test-EA gemacht:
//| exTestValueRSI.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES TimeframeRSI = PERIOD_M15; // Таймфрейм RSI
input int PeriodRSI = 14; // Период расчёта RSI
input ENUM_APPLIED_PRICE PriceRSI = PRICE_CLOSE; // Цена расчёта RSI
input int MinutesBefore =20; // Количество минут назад
//--- global variables
int minutesBefore; // Количество минут назад
int periodRSI; // Период расчёта RSI
double prevRSIValue; // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
minutesBefore=(MinutesBefore<1?1:MinutesBefore); // Количество минут назад
periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
MqlDateTime server_time;
TimeToStruct(TimeCurrent(),server_time);
if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
}
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
{
datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
int shift=Bars(symbol_name,timeframe,start_time,time_before);
return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
}
//+------------------------------------------------------------------+
Was müssen wir als nächstes wissen?
Guten Tag. Ich bin neu im Trading, deshalb habe ich eine Menge Fragen, auch zur Software, in meinem Fall ist es MT4. Ist es möglich, den Spread eines Währungspaares im Chart-Fenster als Zahl anzuzeigen, und zwar auf dieselbe Weise wie der ATR-Indikator? Ich halte diese Art der Darstellung von Informationen über die Marktlage für sinnvoll, denn sie ist bequemer und schneller zu berechnen und auf der Grundlage von Durchschnittswerten zu bewerten. Der zweite Punkt ist ein gleitender Stopp auf Basis der ATR. Ist es möglich, dies automatisch zu machen? Wenn Sie in einer Pose sitzen, können Sie dank des Taschenrechners und guter Sehkraft problemlos manuell einen Anschlag berechnen und einstellen. Ein automatischer Stopp ist eine gute Idee für einen Händler, auch wenn er seine Nachteile hat, aber in einem guten Trend wird ein Trailing-Stop das Risiko eines falschen Stopps durch einen Anfänger verringern. Ich danke Ihnen im Voraus.
Es ist einfach und unkompliziert - zeigen Sie grafische Objekte, insbesondere Textbeschriftungen mit den erforderlichen Daten im Diagramm an, und aktualisieren Sie sie bei jedem Tick.
Wenn du nicht weißt, was du mit ihnen machen sollst, versuche, die richtige zu finden ;)
Wenn der RSI-Wert vor 20 Minuten überschritten wurde, überprüfen wir den Kurs, d.h. für einen Short sollte der Kurs niedriger sein als vor 20 Minuten. Ich danke Ihnen vielmals. Wenn alles klappt, bin ich dir ein Versprechen schuldig))
Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?
Es ist einfach und unkompliziert - Sie zeigen grafische Objekte, insbesondere Textbeschriftungen mit den gewünschten Daten im Diagramm an und aktualisieren sie bei jedem Tick.
Und verschiedene Schleppnetze in kodobase gibt es wie Sand am Meer - suchen Sie sich das richtige aus ;)
Vielen Dank ...... wir werden danach suchen))
Alles ist leicht und einfach - zeigen Sie grafische Objekte an, insbesondere Textbeschriftungen mit den erforderlichen Daten auf dem Diagramm, und aktualisieren Sie sie bei jedem Tick.
Und verschiedene Schleppnetze in kodobase gibt es wie Sand am Meer - finden Sie das richtige für sich ;)