Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 70
![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
Liebe Forumsnutzer!
Bitte helfen Sie, die Probleme sind wie folgt: 1) Wie in den Code zu verschreiben, so dass das Geschäft, sagen wir, auf SELL, eröffnet, wenn die obere Grenze des Kanals, und geschlossen, wenn es den Boden erreicht; 2) Wenn ein Signal sollte nur ein Geschäft zu öffnen; 3) bei der Installation des EA, das Geschäft eröffnet sofort, aber Sie wollen das Geschäft ist nur geöffnet, wenn der Kanal-Linie erreicht wird.
Für Ihre Hilfe wäre ich Ihnen sehr dankbar.
extern double Lots = 0.1;
extern int TakeProfit = 30; // TakeProfit (eine negative Zahl oder Null, um die Verwendung zu vermeiden);
extern int StopLoss = 20; // Stop-Loss-Niveau für Käufe;
extern inttern Schlupf = 2; // Schlupf
externer String Kommentar = "Keller";
extern inttern Magic = 333;
externer String Indi = "Indikatordaten";
extern string TimeFrame = "aktueller Zeitrahmen;
extern int int MA_Period = 10; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int Mode_MA = 0; // 0 - Schließen, 1 - Öffnen, 2 - Hoch, 3 - Tief, 4 - Median, 5 - Typisch, 6 - Gewichtet
extern int Preis_Typ = 5;
double PriceHigh, PriceLow, SL, TP;
int-Ticket;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
if (Ziffern ==3 || Ziffern ==3) // für einen fünfstelligen Makler
{
TakeProfit *= 10;
StopLoss *= 10;
Schlupf *= 10;
}
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom (Symbol(), 0, "Keller", TimeFrame, MA_Period, Mode_MA, Price_Type, 0, 0); // roter Spitzenpuffer 0
PriceLow = iCustom (Symbol(), 0, "Tma", TimeFrame, MA_Period, Mode_MA, Price_Type, 2, 0); // roter Bodenpuffer 2
if (Bid >= PriceHigh && CountSell() == 0) // wobei Countsell prüft, ob die Aufträge einzeln und nicht bei jedem Tick geöffnet werden
{
SL = NormalizeDouble (Bid + StopLoss * Point, Digits);
TP = NormalizeDouble (Bid - TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Comment, Magic, 0, Red); // wobei 0 für SL und TP steht (dies ist 0 für ßn Konten) und die letzte 0 eine Aktion ist
if (ticket > 0) // Prüfung auf einen offenen Auftrag
{
if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (Ticket, OrderOpenPrice(), SL, TP, 0); // wobei 0 ein Ausdruck ist
}
}
if (Ask <= PriceLow && CountBuy() == 0)// wobei Countsell prüft, dass die Aufträge einzeln und nicht bei jedem Tick eröffnet werden
{
SL = NormalizeDouble (Ask - StopLoss * Point, Digits);
TP = NormalizeDouble (Ask + TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Comment, Magic, 0, Blue); // wobei 0 für SL und TP steht (dies ist 0 für ßn-Konten), und die letzte 0 eine Aktion ist
if (ticket > 0) // Prüfung auf einen offenen Auftrag
{
if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (Ticket, OrderOpenPrice(), SL, TP, 0); // wobei 0 ein Ausdruck ist
}
}
if (Bid >= PriceHigh && CountBuy() > 0) // wenn der Preis die obere Grenze des Kanals erreicht hat und die Anzahl der Aufträge größer als 0 ist
{
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) // prüfen, ob dies unsere Kauforder ist
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); // schließt die Order am oberen Rand des Kanals
}
}
}
if (Ask <= PriceLow && CountSell() > 0) // wenn der Preis die untere Grenze des Kanals erreicht hat und die Anzahl der Aufträge größer als 0 ist
{
for ( i=OrdersTotal()-1; i >= 0; i--) // keine Variablendefinition für buy
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if(OrderMagicNumber() == Magic && OrderType() == OP_SELL) // prüfen, ob dies unser Verkaufsauftrag ist
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); // schließt die Order am unteren Rand des Kanals
}
}
}
zurück(0);
}
//+------------------------------------------------------------------+
int CountSell()// Prüfung - Anzahl der laufenden Verkaufsaufträge
{
int Count = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect (Handel, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
Graf++;
}
}
zurück(Count);
}
//+------------------------------------------------------------------+
int CountBuy()// Prüfung - Anzahl der in Arbeit befindlichen Kaufaufträge
{
int Count = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect (Handel, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (Auftragsart() == OP_BUY)
Graf++;
}
}
zurück(Count);
}
Nein, das haben sie nicht. Ich habe einen Blick auf Ihren Code geworfen und geantwortet "ohne zu schauen". Ihr Text:
- weist dem Zyklusindex i einen Wert zu, der der Gesamtzahl der horizontalen Linien entspricht. Wenn Sie 3 davon haben, ist der Zyklus von 2 bis 0. Es ist unklar, was in Ihrem Zyklus ist, aber es wird nur drei Iterationen von 2 bis 0 geben.
Ja, nun... Und genau darüber habe ich mir Sorgen gemacht. Die Sache ist die, dass es ohne spezielle Experimente, sondern nur durch Beobachtung, in der Gegenwart von anderen Objekten funktioniert hat.
Und auf den ersten Blick hat es auch funktioniert. Aber es gab Zweifel an genau dem, was Sie beschrieben haben. Deshalb wollte ich diesen Aspekt klären.
Und ich bin froh, dass Ihre Meinung meine Vermutung bestätigt. Wir können davon ausgehen, dass in dieser Angelegenheit Gewissheit besteht.
Nochmals herzlichen Dank!
Ich habe einen benutzerdefinierten Indikator, es ist ein Histogramm, alle Werte sind maximal, es ist nur wichtig, die Farbe der Balken im Histogramm, es hat keine Eingabe-Parameter, Puffer 2: 0 - mit rotem Balken, und 1 - blauen Balken, fand ich heraus, durch kaiserliche Methode, dass in 0 Puffer, nicht Wert ändern, und in 1 Änderungen. Wie man die Kriterien für die Transaktion zu schreiben, kann ich nicht verstehen, bitte erklären, wie, danke im Voraus.
Wenn Sie den Quellcode des Indikators haben, ist es nicht schwer: Sie schauen sich den Quellcode an und finden die Bedingungen für den Farbwechsel im Indikator. Mit ihnen bilden wir ein Signal. Es gibt 2 Möglichkeiten, die erste ist das Schreiben eines "Wrappers" für die Analyse der Bedingungen für die Änderung der Pufferwerte, wobei der Indikatorcode nicht verändert wird, sondern iCustom() verwendet wird, die zweite wandelt den Indikatorcode in eine Funktion um, die vom Expert Advisor aufgerufen werden kann. Beide Methoden werden in den Artikeln auf der Website beschrieben.
Wenn Sie sich z.B. für den geglätteten Heikin-Ashi-Indikator interessieren, schauen Sie auf der Website nach - zu diesem Indikator gab es eine Diskussion, soweit ich mich erinnere, wurden sowohl die Korrektheit des Algorithmus als auch die Signalanalyse besprochen. Der Code ist offen und steht in der Codebasis zur Verfügung (es gibt dort viele davon).
Wenn der Indikator einzigartig ist und keinen Quellcode hat, ist die Sache viel komplizierter: Reverse Engineering, was übrigens nicht immer den Aufwand rechtfertigt.
Wenn Sie den Quellcode des Indikators haben, ist das nicht schwer: Sehen Sie sich den Quellcode an und finden Sie die Bedingungen für den Farbwechsel im Indikator. Mit ihnen bilden wir ein Signal. Es gibt 2 Möglichkeiten, dies zu tun: die erste - durch das Schreiben eines "Wrappers" für die Analyse der Bedingungen der sich ändernden Pufferwerte, der Indikatorcode wird nicht verändert, iCustom() wird verwendet, die zweite - durch die Umwandlung des Indikatorcodes in die Funktion, die vom Expert Advisor aufgerufen werden kann. Beide Methoden werden in den Artikeln auf der Website beschrieben.
Wenn Sie sich z.B. für den geglätteten Heikin-Ashi-Indikator interessieren, schauen Sie auf der Website nach - zu diesem Indikator gab es eine Diskussion, soweit ich mich erinnere, wurden sowohl die Korrektheit des Algorithmus als auch die Signalanalyse besprochen. Der Code ist offen und steht in der Codebasis zur Verfügung (es gibt dort viele davon).
Wenn der Indikator einzigartig ist und keinen Quellcode hat, ist die Sache viel komplizierter: Reverse Engineering, was übrigens nicht immer den Aufwand rechtfertigt.
Vielen Dank, ich werde es ausprobieren. Könnten Sie mir bei der Suche nach Artikeln über das "Wrapping" und die Konvertierung von Indikatorcode helfen, denn ich fürchte, ich kann dies nicht in eine Suchanfrage umwandeln.
Hilfe, bitte. Der Indikator zeichnet die Höchst- und Tiefstwerte des Vortages ein. Ich brauche es, um jeden Tag Linien in der Geschichte zu ziehen. Ich danke Ihnen.
Vielen Dank, ich werde es ausprobieren. Könnten Sie mir helfen, Artikel über "Wrapper" und die Umwandlung von Indikatorcode zu finden, denn ich fürchte, ich kann dies nicht in eine Suchanfrage umwandeln.
https://www.mql5.com/ru/forum/114117 ist ein Beispiel für die Erstellung einer Wrapper-Funktion zur Interpretation von Indikatorsignalen
Hier finden Sie Artikel über die Verwendung von Indikatorcodes:
https://www.mql5.com/ru/articles/1456
https://www.mql5.com/ru/articles/1457
Ich danke Ihnen!
https://www.mql5.com/ru/forum/114117 ist ein Beispiel für die Erstellung einer Wrapper-Funktion zur Interpretation von Indikatorsignalen
Hier finden Sie Artikel über die Verwendung von Indikatorcodes:
https://www.mql5.com/ru/articles/1456
https://www.mql5.com/ru/articles/1457
Nochmals herzlichen Dank.