MyGridBasket
- Bibliotheken
-
Ahmad Aan Isnain Shofwan
About Me – Ahmad Aan Isnaini
“I don’t code to sell. I code to survive.”
In a marketplace flooded with rented hype and quick-profit illusions, I chose a different path:
Resilience over glamour. Discipline over noise. - Version: 1.0
Schreibgeschützte Basket-Analysebibliothek für Grid- und Averaging-EAs. Echtes Breakeven, Was-wäre-wenn-Szenarien, Stresstests und Stop-out-Abstand. Es werden keine Orders gesendet.
Was ist das?
Eine Bibliothek, die Ihre offenen Positionen ausliest und Ihnen den tatsächlichen Status eines Grid- oder Averaging-Korbs anzeigt.
Sie führt keine Handelsgeschäfte durch. Sie sendet keine Orders. Sie verfügt über keine Einstiegslogik.
Sie rufen sie aus Ihrem eigenen EA auf.
Was sie Ihnen mitteilt
- Die Breakeven-Marke des Korbs, unter Berücksichtigung von Swap und Provision
- Den Kurs, bei dem der Korb einen von Ihnen gewählten Geldbetrag erzielt
- Wohin sich der Durchschnittspreis und der Breakeven-Punkt verschieben, wenn Sie eine weitere Stufe hinzufügen
- Wie viele Lots den Durchschnitt auf einen von Ihnen gewählten Kurs bringen
- Eigenkapital und Margin-Level, falls sich der Kurs gegen den Korb bewegt
- Dasselbe, mit einem Raster, bei dem ständig weitere Stufen hinzugefügt werden
- Wie viele Punkte bis zum Stop-out verbleiben
Anwendung
1. Legen Sie die Datei „MyGridBasket.ex5“ im Ordner „MQL5/Libraries“ ab.
2. Fügen Sie den folgenden Importblock in Ihren EA ein.
3. Erstellen Sie ein Basket-Handle, aktualisieren Sie es und lesen Sie die Zahlen aus.
4. Löschen Sie das Handle in „OnDeinit“.
Beispiel
int hBuy = -1;
int OnInit()
{
hBuy = MyGB_Create(_Symbol, MagicNumber, MYGB_BUY); // MagicNumber -1 = jede MagicNumber
return (hBuy >= 0) ? INIT_SUCCEEDED : INIT_FAILED;
}
void OnDeinit(const int reason)
{
MyGB_Destroy(hBuy);
}
void OnTick()
{
MyGB_Refresh(hBuy);
double be = MyGB_Breakeven(hBuy);
double tp = MyGB_TargetPrice(hBuy, 50,0); // netto +50 in Kontowährung
double so = MyGB_StopOutDistance(hBuy); // Punkte bis zum Stop-out
}
Konventionen
Ungültiges Handle oder fehlgeschlagene Berechnung: double gibt EMPTY_VALUE zurück, int gibt -2 zurück, bool gibt false zurück.
Die Margin-Level-Angabe erfolgt in Prozent. -1 bedeutet, dass keine Margin verwendet wird.
Die Stop-out-Distanz wird in Punkten angegeben. -1 bedeutet, dass der Bereich noch nicht erreicht wurde, -2 bedeutet „unbekannt“.
Importblock
#define MYGB_BUY 0
#define MYGB_SELL 1
#import "MyGridBasket.ex5"
int MyGB_Create(string symbol, long magic, int side);
void MyGB_Destroy(int h);
bool MyGB_Refresh(int h);
string MyGB_Version();
bool MyGB_IsHedging(int h);
string MyGB_Warning(int h);
string MyGB_Summary(int h);
int MyGB_Positions(int h);
double MyGB_Lots(int h);
double MyGB_AvgPrice(int h);
double MyGB_Breakeven(int h);
double MyGB_ClosePrice(int h);
double MyGB_DistToBreakevenPoints(int h);
double MyGB_Floating(int h);
double MyGB_Swap(int h);
double MyGB_EntryCommission(int h);
double MyGB_ExitCommission(int h);
bool MyGB_ExitCommissionKnown(int h);
double MyGB_Nettoergebnis(int h);
double MyGB_SchlechtesterPositionsgewinn(int h);
double MyGB_BestPositionProfit(int h);
double MyGB_LayerSpanPoints(int h);
void MyGB_SetExitCommissionPerLot(int h, double rate_per_lot);
void MyGB_ClearExitCommissionOverride(int h);
double MyGB_TargetPrice(int h, double target_money);
double MyGB_MoneyAtPrice(int h, double price);
double MyGB_LotsForTargetAverage(int h, double price, double target_avg);
double MyGB_WhatIfNewAverage(int h, double lot, double price);
double MyGB_WhatIfNewBreakeven(int h, double lot, double price);
double MyGB_WhatIfMarginLevel(int h, double lot, double price);
double MyGB_StressEquity(int h, double adverse_points);
double MyGB_StressMarginLevel(int h, double adverse_points);
int MyGB_StressStopOut(int h, double adverse_points);
double MyGB_GridStressEquity(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
double MyGB_GridStressMarginLevel(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
double MyGB_GridStressLots(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
int MyGB_GridStressLevels(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
int MyGB_GridStressStopOut(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
double MyGB_StopOutDistance(int h);
double MyGB_StopOutDistanceGrid(int h, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
double MyGB_NetLots(string symbol, long magic);
#import
Die Grenzen kennen
- Für Hedging-Konten entwickelt. Bei Netting-Konten gibt es pro Symbol eine Position, daher entspricht der Basket dieser Position. Es wird eine Warnung ausgegeben.
- Ein Stop-out wird nur dann berechnet, wenn Ihr Broker den Stop-out in Prozent verwendet. Im „In-Money“-Modus ist das Ergebnis unbekannt.
- Die Margin der simulierten Stufen berücksichtigt keine Absicherungsausgleichszahlungen zwischen entgegengesetzten Positionen. Dies dient der Sicherheit.
- Simulierte Niveaus werden exakt zu ihrem Preis ausgeführt. Spread, Slippage und Ausführungsverzögerung werden nicht modelliert.
- Die Ausstiegsprovision wird anhand Ihrer eigenen abgeschlossenen Geschäfte mit dem Symbol in der Vergangenheit geschätzt. Wenn keine vorhanden sind, wird sie mit 0 angesetzt, und die Bibliothek weist Sie darauf hin.
- Andere Positionen auf dem Konto werden während eines Stresstests als unverändert angenommen.
- Ein Stresstest ist eine rechnerische Berechnung. Er stellt keine Prognose dar. Die tatsächlichen Ausführungsergebnisse in einem schnelllebigen Markt fallen schlechter aus.
- Testen Sie das Programm auf einem Demokonto mit den Symbolen Ihres Brokers, bevor Sie sich darauf verlassen.
Kostenlos. Keine Einschränkungen hinsichtlich Konten oder Wertpapieren. Keine Gewährleistung.
Version 1.00 ist die erste Veröffentlichung.
