![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Period: Wechsel des Zeitrahmens ist untersagt
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: Ändern des Symbols ist untersagt
Kann ich Handelssignalmodule getrennt von Wizard EAs verwenden? Zu Testzwecken habe ich geschrieben
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Period: Wechsel des Zeitrahmens ist untersagt
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: Ändern des Symbols ist untersagt
Der folgende Code:
Ruft bei jedem Funktionsaufruf den Konstruktor für label auf.
Mit folgendem Code: im ersten Fall ist das Kennzeichen gesetzt, im zweiten Fall nicht (mit Schrägstrichen geschaltet).
Die zweite Option in dieser Bibliothek gibt 0 aus. Alle anderen Funktionen scheinen zu funktionieren.
Für den nächsten Code: im ersten Fall ist das Kennzeichen gesetzt, im zweiten Fall nicht (mit Schrägstrichen umgeschaltet).
Soweit ich weiß, sind derzeit alle drei Parameter obligatorisch.
Daher müssen Sie die Fensternummer angeben (Varianten: 0 - Hauptfenster, ChartIndicatorsTotal() - neues Fenster, 0 bisChartIndicatorsTotal()-1 - ein bestehendes Fenster).
Das ist, was nicht gibt, Fehler ist nicht gut.
Bei dieser Bibliothek wird für die zweite Option 0 ausgegeben. Alle anderen Funktionen scheinen zu funktionieren.
Wahrscheinlich sollte vor dem Erhalt der Preis Refresh verwendet werden (zumindest RefreshRates).
Die richtige Variante sollte wie folgt aussehen
Danke, mit Bid hat es wirklich funktioniert, nachdem ich Refresh angegeben habe.
Aber der Indikator-Ausgang, mit der Bibliothek, erfordert 2 Parameter, ein Unterfenster und ein Handle. Ansonsten sagt es, die Anzahl der Parameter ist falsch, ich kann es nicht herausfinden, weil die Bibliothek die gleiche ChartIndicatorAdd verwendet.
Danke, mit Bid hat es wirklich funktioniert, nachdem ich Refresh angegeben habe.
Aber der Indikator-Ausgang, mit der Bibliothek, erfordert 2 Parameter, ein Unterfenster und ein Handle. Ansonsten sagt es, die Anzahl der Parameter ist falsch, ich kann es nicht herausfinden, weil die Bibliothek die gleiche ChartIndicatorAdd verwendet.
Die Verwendung der Bibliothek erfordert 2 Parameter. Diagramm und Unterfenster.
Ohne Handgriff? Und woher weiß das System, welchen Plattenspieler es verwenden soll? Bisher habe ich dem Geschriebenen vertraut :) Das Substrat und der Griff.
Ohne Griff? Woher weiß das System, welcher Indikator zu verwenden ist? Ich habe den Texten bisher vertraut :) Unterfenster und Griff.
Über die Bibliothek (aus der Klassenhilfe)
IndikatorAdd
Fügt einen Indikator mit dem angegebenen Handle in das angegebene Chartfenster ein.
Bezüglich der direkten Arbeit von ChartIndicatorAdd.
ChartIndicatorAdd
Fügt einen Indikator mit dem angegebenen Handle in das angegebene Chartfenster ein.
Was die Klasse CChart betrifft.
Um unnötige Fragen zu vermeiden, versuchen wir, drei Grundregeln zu befolgen:
1. Wir schauen uns den Quellcode an, und wenn etwas nicht klar ist, schauen wir in die Dokumentation (der Quellcode wird immer die "Wahrheit" sagen, aber die Dokumentation kann auch lügen);
2. Wenn die OOP-Implementierung für uns wichtig ist, gehen wir von der Beschreibung einer bestimmten Klasse aus und gehen bis zu den "direkten Implementierern". Wenn "echte Arbeit" wichtig ist, sollte OOP zuletzt studiert werden (Abwärts-/Aufwärtsprüfung des Codes);
3. Wenn nach dem Lesen der Dokumentation und der Quellen etwas nicht klar ist, wenden Sie sich an das Forum.
Direkt auf die Implementierung der Methode IndicatorAdd in einer Klasse
Wenn Sie sich den Quellcode ansehen, wird deutlich, dass die Methode Subwindow und Handle erhält (wie in der Hilfe angegeben), und der dritte Parameter wird aus den in der Klasse selbst gespeicherten Daten entnommen (ich meine die Graph-ID).