Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43251
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 243
Gesamt: 243
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #11 (permalink)  
Alt 15.05.16
Gesperrter Benutzer
 
Registriert seit: Dec 2015
Beiträge: 53
TLO Trader befindet sich auf einem aufstrebenden Ast
Standard

Du hast den Ansatz doch schon richtig beschrieben, nur würde ich zur Identifizierung der Baskets nicht den Comment nehmen, sondern die extra hierfür vorgesehene MagicNumber. Also jedem Basket eine eigene Magic zuweisen und die Trades darüber kontrollieren. Dann muss es funktionieren.

Ausserdem würde ich die Inhalte der einzelnen Baskets direkt extern definieren, dann wird´s beim Testen später einfacher.

Da Du immer eine Long- und eine Short-Order machst in etwa so:
extern string Basket1_OrderLong = "EURUSD";
extern string Basket1_OrderShort = "GBPUSD";
extern int Basket1_MagicNumber = 100;

usw.

Wieso Du allerdings bei angeblich positiver Korrelation ein Basket machen willst, ist mir ein Rätsel. Dann kannst Du auch jedes Währungspaar einzeln traden. Sinn macht das doch nur bei negativer Korrelation, in dem Du darauf setzt, dass sich eine Währung stärker entwickelt als die andere, und zwar in entgegengesetzter Richtung. Bei positiver Korrelation würde man ja wohl auch nicht die eine Währung long und die andere short traden, oder?
  #12 (permalink)  
Alt 16.05.16
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 17
oli44 befindet sich auf einem aufstrebenden Ast
Standard

Hallo TLO Trader,

danke für den Tipp. Die frage warum ich bei positiver korrelation ein basket machen möchte beantworte ich gerne:

Betrachten wir z.b. das basket (EUR/USD // GBP/USD). Die Währungen EUR & GBP sind aufgrund der euro-zone wirtschaftlich eng miteinander verknüpft. Daher erklärt sich auch ihre positive korrelation.

In meinem ansatz bin ich (EUR/USD) "short" und (GBP/USD) "long". Fällt der EUR generiert die short-pos gewinn und die long-pos verlust. Steigt der EUR generiert die short-pos verlust und die long-pos gewinn. Somit haben wir einen "hedge-trade" der im prinzip "weder" gewinn noch verlust erzeugt. Allerdings korrelieren die beiden währungen nicht mit 100%, mal steigt/fällt die eine "schneller/langsamer". D.h. es wird immer phasen geben in denen wir mit dem Basket im profit/verlust liegen.

Da in diesem ansatz kein SL verwendet wird hat man durch den Hedge eine gewisse absicherung und ist auf der anderen seite vor stopfishing geschützt!

Langfristig möchte ich statistisch analysieren ab welchen wert (CashWin)
man die Gewinne mitnehmen sollte und ab welchen wert (CashLoss) man den verlust besser realisiert. Auch interessiert mich die folgende fragestellung sehr: mit welchen maximalen verlust kann man in diesem Basket überhaupt rechnen? Sollte dieser relativ überschaubar sein, kann man den wert für CashLoss relativ hoch ansetzen. Dies lässt sich aber leider wie gesagt mit dem MT4 "NICHT" backtesten, da er im StrategyTester nur mit einem währungspaar rechnen kann!

Ein grosser Vorteil bei richtig funktionierendem orderpool wäre es auch, das man weitere Baskets im laufenden betrieb des ea´s durch manuelle orderausführung eröffnen könnte. So müssten diese nicht mühselig vorab durch comments oder magicnumber definiert werden. Dies ist auch mit ein grund warum ich letztlich diesen "fehler" beheben möchte.
  #13 (permalink)  
Alt 17.05.16
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 17
oli44 befindet sich auf einem aufstrebenden Ast
Standard

In der MQL4 Referenz findet sich unter dem Stichwort "OrderSelect" der folgende interessante Satz:

"Consecutive selection of orders using the SELECT_BY_POS parameter returns information in the sequence in which it was received from the trading server. Sorting of the resulting list of orders cannot be guaranteed."

Bedeutet demnach, dass der OrderPool des TradeClients (Eigener Rechner) nicht unbedingt "synchron" zum (Broker Server) läuft. Und damit wäre meine Frage beantwortet!

Also progge ich das Teil neu und werde mich zukünftig nicht mehr auf eine korrekte Anordnung des OrderPools verlassen.
  #14 (permalink)  
Alt 17.05.16
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 17
oli44 befindet sich auf einem aufstrebenden Ast
Standard

Habe mir mal eben diesen Ansatz unter Verwendung eines "Arrays" überlegt:

string BasketArray[6] = {"EURUSD", "USDCHF", "NZDUSD", "GBPUSD", "USDCAD", "AUDUSD"};

/////////// Begin of trading block /////////

// EA Trade Logik ...

for(int Index1 = 0, Index2 = 3; Index1 < 3; Index1++, Index2++) // Durchlaufe BasketPool
{
for(int Counter = 0; Counter < OrdersTotal(); Counter++) // Durchlaufe OrderPool
{
Selected = false;
while(Selected == false)
{
Selected = OrderSelect(Counter,SELECT_BY_POS);
}

if(OrderSymbol() == BasketArray[Index1]) {OrderProfit_1 = OrderProfit() - ( OrderCommission() + OrderSwap() ); OrderTicketNumber1 = OrderTicket(); CurrencySymbol1 = OrderSymbol();}
if(OrderSymbol() == BasketArray[Index2]) {OrderProfit_2 = OrderProfit() - ( OrderCommission() + OrderSwap() ); OrderTicketNumber2 = OrderTicket(); CurrencySymbol2 = OrderSymbol();}
}

if(OrderProfit_1 + OrderProfit_2 >= CashWin || OrderProfit_1 + OrderProfit_2 <= CashLoss)
{
// Basket wird nun geschlossen und danach sofort ein neues gleichwertiges Basket eröffnet
BasketCount++;
if(OrderProfit_1 + OrderProfit_2 >= CashWin) {WinBasketCount++;CashWin += 0.1;CashLoss += 0.1; if(CashLoss >= -0.1){CashLoss = -1.0;}} // Bei Gewinn ziehen wir unseren CashLoss (um x Cent) zusammen (max. bis -0.1 Cent)
if(OrderProfit_1 + OrderProfit_2 <= CashLoss) {LossBasketCount++;CashWin -= 0.1;CashLoss -= 0.1;} // Bei Verlust weiten wir unseren CashLoss (um x Cent) aus

Print("CashLoss = ",CashLoss);
Print("CashWin = ",CashWin);

Selected = false;
while(Selected == false)
{
OrderSelect(OrderTicketNumber1,SELECT_BY_TICKET);
}
// Unterscheide ob Position eine buy oder sell Order ist
if(OrderType() == OP_BUY)
{
Closed = false;
while(Closed == false)
{
Closed = CloseBuyOrder(CurrencySymbol1,OrderTicketNumber1,S lippage);
}

if(Closed)
{
// Neue identische buy Order wird eröffnet
Opened = false;
while(Opened == false)
{
Opened = OpenBuyOrder(CurrencySymbol1,LotSize,Slippage,Magi cNumber);
}
}
}

else if(OrderType() == OP_SELL)
{
Closed = false;
while(Closed == false)
{
Closed = CloseSellOrder(CurrencySymbol1,OrderTicketNumber1, Slippage);
}

if(Closed)
{
// Neue identische sell Order wird eröffnet
Opened = false;
while(Opened == false)
{
Opened = OpenSellOrder(CurrencySymbol1,LotSize,Slippage,Mag icNumber);
}
}
}

Selected = false;
while(Selected == false)
{
OrderSelect(OrderTicketNumber2,SELECT_BY_TICKET);
}
// Unterscheide ob Position eine buy oder sell Order ist
if(OrderType() == OP_BUY)
{
Closed = false;
while(Closed == false)
{
Closed = CloseBuyOrder(CurrencySymbol2,OrderTicketNumber2,S lippage);
}

if(Closed)
{
// Neue identische buy Order wird eröffnet
Opened = false;
while(Opened == false)
{
Opened = OpenBuyOrder(CurrencySymbol2,LotSize,Slippage,Magi cNumber);
}
}
}

else if(OrderType() == OP_SELL)
{
Closed = false;
while(Closed == false)
{
Closed = CloseSellOrder(CurrencySymbol2,OrderTicketNumber2, Slippage);
}

if(Closed)
{
// Neue identische sell Order wird eröffnet
Opened = false;
while(Opened == false)
{
Opened = OpenSellOrder(CurrencySymbol2,LotSize,Slippage,Mag icNumber);
}
}
}
}
}
} // End -- void OnTimer()
  #15 (permalink)  
Alt 17.05.16
Neues Mitglied
 
Registriert seit: Nov 2012
Beiträge: 17
oli44 befindet sich auf einem aufstrebenden Ast
Standard

Zur besseren Übersicht das Fragment des EA´s als *.mq4 Datei
Angehängte Dateien
Dateityp: mq4 EA-Fragment.mq4 (7,5 KB, 6x aufgerufen)
Thema geschlossen

Lesezeichen

Stichworte
basket, mql4, orderpool, programmierung, programmierung metatrader

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------