gspencer: Ich weiß nichts über die Codierung oder die Arbeit mit EAs im Meta Editor, aber Ihr Konzept mit dem BestInterval gefällt mir sehr. Wäre es zu viel Aufwand für Sie, mir zu erklären, wie ich es zu den EAs hinzufügen kann, die ich gerne testen möchte?
// Anzeige des BestInterval-Balance-Diagramms im Diagramm#property strict#property script_show_inputsinputint inAmountIntervals = 3; // Wie viele Handelsintervalle im schlimmsten Fall weggeworfen werden sollen#include <Graphics\Graphic.mqh> // https://www.mql5.com/de/articles/2866void ToChart( constdouble &Y[] )
{
CGraphic graphic;
graphic.Create(0, __FUNCTION__, 0, 30, 30, 780, 380);
graphic.CurveAdd(Y, CURVE_LINES);
graphic.CurvePlotAll();
graphic.Update();
}
#include <MT4Orders.mqh> // Nicht erforderlich, wenn MT4.#include <fxsaber\BestInterval\BestInterval.mqh> // Berechnung des besten HandelsintervallsvoidOnStart()
{
BESTINTERVAL BestInterval; // Erstellt ein Objekt zur Berechnung des besten Handelsintervalls
BestInterval.Set(); // Eine Geschichte des Bietens veröffentlichtfor (int i = 0; i < inAmountIntervals; i++)
if (BestInterval.DeleteWorseInterval()) // Wenn etwas weggeworfen wurdePrint(BestInterval.ToString()); // Drucken wir die erhaltenen Handelsdaten auselsebreak; // Sonst sind wir rausdouble Profits[];
double Balance[];
constint Size = ArrayResize(Balance, BestInterval.GetProfits(Profits) + 1); // Wir haben die Gewinne der BestInterval-Transaktion
Balance[0] = 0;
// Berechnen Sie die Gleichgewichtskurvefor (int i = 1; i < Size; i++)
Balance[i] = Balance[i - 1] + Profits[i - 1];
ToChart(Balance); // Visualisiert.
}
Wenn Sie dies am Ende eines EA aus der Standardlieferung einfügen
// Übertragen Sie Zitate von jedem Durchgang des Optimierers an das Terminal. Wenden Sie BestInterval auf sie an und visualisieren Sie sie.#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/de/code/22710#include <TypeToBytes.mqh> // https://www.mql5.com/de/code/16280#include <Graphics\Graphic.mqh> // https://www.mql5.com/de/articles/2866inputint inAmountIntervals = 1; // Wie viele Handelsintervalle im schlimmsten Fall weggeworfen werden sollen// Gibt den Graphen ausvoid ToChart( constdouble &Y[] )
{
CGraphic graphic;
graphic.Create(0, __FUNCTION__, 0, 30, 30, 780, 380);
graphic.CurveAdd(Y, CURVE_LINES);
graphic.CurvePlotAll();
graphic.Update();
}
// Sammelt die Geschichte des Handelsint GetDeals( DEAL_BASE &Deals[] )
{
constint Total = ArrayResize(Deals, OrdersHistoryTotal());
int Amount = 0;
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
{
Deals[Amount].OpenTime = OrderOpenTime();
Deals[Amount++].Profit = OrderProfit() + OrderCommission() + OrderSwap();
}
return(ArrayResize(Deals, Amount));
}
// Von hier aus (Agent) werden wir Daten an das Terminal sendendoubleOnTester()
{
DEAL_BASE Deals[];
if (MQLInfoInteger(MQL_OPTIMIZATION) && GetDeals(Deals)) // Wenn Optimierung, gesammelter Handelsverlauf
{
CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205
Container[0] = Deals; // Legen Sie den Gebotsverlauf in einen ContainerFrameAdd(NULL, 0, 0, Container.Data); // Senden von Daten vom Agenten an das Terminal
}
return(0);
}
// Hier (Terminal) Daten von Agenten empfangenvoidOnTesterPass()
{
ulong Pass;
string Name;
long ID;
double Value;
CONTAINER<uchar> Container; // https://www.mql5.com/ru/forum/95447/page4#comment_5464205while (FrameNext(Pass, Name, ID, Value, Container.Data))
{
Print("Pass = " + (string)Pass); // Passnummer
DEAL_BASE Deals[];
// Empfangene Daten vom Agenten
Container[0].Get(Deals);
BESTINTERVAL BestInterval; // Erstellt ein Objekt zur Berechnung des besten Handelsintervalls
BestInterval.Set(Deals); // Die übermittelte Gebotshistorie veröffentlichenPrint(BestInterval.ToString() + "\n"); // Drucken wir die erhaltenen Handelsdaten ausfor (int i = 0; i < inAmountIntervals; i++)
if (BestInterval.DeleteWorseInterval()) // Wenn etwas weggeworfen wurdePrint(BestInterval.ToString() + "\n"); // Drucken wir die erhaltenen Handelsdaten auselsebreak; // Sonst sind wir rausdouble Profits[];
double Balance[];
constint Size = ArrayResize(Balance, BestInterval.GetProfits(Profits) + 1); // Wir haben die Gewinne der BestInterval-Transaktion
Balance[0] = 0;
// Berechnen Sie die Gleichgewichtskurvefor (int i = 1; i < Size; i++)
Balance[i] = Balance[i - 1] + Profits[i - 1];
ToChart(Balance); // Visualisiert.
}
}
einfügen, sehen Sie im Terminalprotokoll (am Beispiel der gleitenden Standard-Durchschnitte) etwa Folgendes
Die Idee ist die des Autors. Es kann Analogien geben.
"
Etwas allgemeineres habe ich in einem Blog auf Englisch beschrieben(Teil 1, Teil 2). Querschnitte nur für Zeitintervalle zu erstellen, ist ein hochspezialisierter Ansatz. Die Idee ist, dass Querschnitte für andere Parameter ebenso interessant sein könnten.
Die Idee ist die des Autors. Es kann Analogien geben.
"
Etwas allgemeineres habe ich im englischen Blog beschriebenPositionseröffnung war (wir schreiben ihn in den OrderComment). Dementsprechend können alle Positionen in der Handelshistorie mit diesen MA-Werten verglichen werden.
Und dann wenden wir BestInterval auf diese MAs an. Und am Ausgang erhalten wir die Bereiche von МАшки, in denen Positionen eröffnet werden sollten, und in denen nicht.
Natürlich können Sie anstelle eines MA eine beliebige numerische Funktion verwenden. Als Ergebnis können Sie coole Filter finden, die die Zeit übertreffen.
Querschnitte nur nach Zeitintervallen zu erstellen, ist ein sehr spezieller Ansatz. In der Tat können Querschnitte nach anderen Parametern nicht weniger interessant sein.
Ich habe viel nachgedacht, aber mir ist noch nichts eingefallen, was sich so effektiv filtern lässt wie die Zeit.
Dieses Etwas sollte nicht Teil der Strategie sein und das Marktverhalten direkt beeinflussen.
Ich weiß nichts über die Codierung oder die Arbeit mit EAs im Meta Editor, aber Ihr Konzept mit dem BestInterval gefällt mir sehr. Wäre es zu viel Aufwand für Sie, mir zu erklären, wie ich es zu den EAs hinzufügen kann, die ich gerne testen möchte?
Versuchen Sie, die Diskussion in diesem Thread zu verstehen.
einfügen, sehen Sie im Terminalprotokoll (am Beispiel der gleitenden Standard-Durchschnitte) etwa Folgendes
Und auf dem Chart ist der BestInterval-profit-Chart des entsprechenden Durchgangs
Ich kam zufällig vorbei. Ich habe es gelesen.
In der Beschreibung steht: "
"
Etwas allgemeineres habe ich in einem Blog auf Englisch beschrieben(Teil 1, Teil 2). Querschnitte nur für Zeitintervalle zu erstellen, ist ein hochspezialisierter Ansatz. Die Idee ist, dass Querschnitte für andere Parameter ebenso interessant sein könnten.
Ich kam zufällig vorbei. Ich habe es gelesen.
In der Beschreibung steht: "
"
Etwas allgemeineres habe ich im englischen Blog beschriebenPositionseröffnung war (wir schreiben ihn in den OrderComment). Dementsprechend können alle Positionen in der Handelshistorie mit diesen MA-Werten verglichen werden.
Und dann wenden wir BestInterval auf diese MAs an. Und am Ausgang erhalten wir die Bereiche von МАшки, in denen Positionen eröffnet werden sollten, und in denen nicht.
Natürlich können Sie anstelle eines MA eine beliebige numerische Funktion verwenden. Als Ergebnis können Sie coole Filter finden, die die Zeit übertreffen.
Leider hindert mich die Sprachbarriere daran, in Ihre Arbeit einzusteigen. Was das Interesse an anderen Filtern angeht, so stimme ich natürlich zu
Seit wann gibt es eine solche Barriere? ;-) Das war doch vorher klar. Oder habe ich mein Englisch vermasselt?
Seit wann gibt es eine solche Barriere? ;-) Früher war das klar. Oder habe ich mein Englisch vermasselt?
Es gab immer eine Barriere. Manchmal bin ich gleich weitergegangen und habe den Quellcode gelesen.
Leider hindert mich die Sprachbarriere daran, in Ihre Arbeit einzusteigen. Was das Interesse an anderen Filtern angeht, so stimme ich natürlich zu
Gott ist Ihr Richter.
Querschnitte nur nach Zeitintervallen zu erstellen, ist ein sehr spezieller Ansatz. In der Tat können Querschnitte nach anderen Parametern nicht weniger interessant sein.
Ich habe viel nachgedacht, aber mir ist noch nichts eingefallen, was sich so effektiv filtern lässt wie die Zeit.
Dieses Etwas sollte nicht Teil der Strategie sein und das Marktverhalten direkt beeinflussen.
Stack? andere Datafeeds?
und noch eine Frage - macht es Sinn, Hypercubes zu machen? theoretisch sollte es auch individuell gut gefiltert werden.