|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ich versuche es mal ganz einfach mit dem Basisanteil zu erklären.
Wenn Du etwas verdoppeln willst (oder verdreifachen oder vervielfachen), richtest Du Dich nach dem Basisanteil. In diesem Beispiel wird der Basisanteil als Zahl für ein MinLot von 0.01 ausgerechnet. Wenn Du 0.01 Lots handelst, dann ist das 1 Anteil MinLot. Wenn Du 0.02 Lots handelst, dann sind das 2 Anteile MinLot. Wenn Du 0.03 Lots handelst, dann sind das 3 Anteile MinLot. und so weiter. Wenn Du jetzt Deine Anteile verdoppeln willst, dann sind das bei 1 Anteil verdoppelt 2 Anteile (1*2) bei 2 Anteilen verdoppelt 4 Anteile (2*2) bei 3 Anteilen verdoppelt 6 Anteile (3*2). und so weiter. Wenn Du Deine Anteile verdreifachen willst, dann sind das bei 1 Anteil verdreifacht 3 Anteile (1*3) bei 2 Anteilen verdreifacht 6 Anteile (2*3) bei 3 Anteilen verdreifacht 9 Anteile (3*3). und so weiter. Code:
1.Order: 0.01 Lots => 1.Basis: Lots/MinLot = 0.01/0.01 => 1 -. verdoppeln der 1.Order Lots heißt verdoppeln der 1.Basis 2.Order: 1.Basis 1 verdoppelt *2 = 2 => MinLot 0.01 *2 = 0.02 -. verdoppeln der 2.Order heißt verdoppeln der 2.Basis 3.Order: 2.Basis: Lots/MinLot = 0.02/0.01 => 2 2.Basis 2 verdoppelt *2 = 4 => MinLot 0.01 *4 = 0.04 oder -. verdreifachen der 2.Order heißt verdreifachen der 2.Basis 3.Order: 2.Basis: Lots/MinLot = 0.02/0.01 => 2 2.Basis 2 verdreifacht *3 = 6 => MinLot 0.01 *6 = 0.06 |
|
|||
Jetzt fragt sich MA_EA wahrscheinlich, was, wo, wer überall rumspinnt :-)
|
|
|||
Da wird die Mathematik von @AVT weit übers Ziel schießen.
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Wenn immer wieder irgendwelche OrderLots() miteinander und mit anderen Werten multipliziert werden, kommen irgendwann Ergebnisse raus, die sich nicht einfach so als Lot-Wert nutzen lassen. Bzw. dem MT4 überhaupt nicht passen. Die wirken sich dann auch auf weitere Berechnungen/Vergleiche aus.
Man müsste wohl nur die jeweiligen OrderLots() * Lots_Multi rechnen. Aber wie das jeweilige Zwischen-Ergebnis zwischen speichern, ohne das unbrauchbare Lot-Werte rauskommen? Der EA hat an 2 Tagen hintereinander mit EURUSD Gewinn gemacht. Nicht besonders viel, aber wie gesagt praktisch ohne Verlust-Risiko. Solange diese Lot-Berechnungen eben brauchbare Lot-Werte ergeben haben. Code:
// ...Lots für NextSel-by-NextBuy berechnen: L_LO=1.0; for(m=OrdersTotal()-1;m>=0;m--){ if(OrderSelect(m,SELECT_BY_POS)){ if(OrderSymbol()==Symbol()){ if( OrderMagicNumber()==MN_NeBuy ){ Lots_Sel = L_LO * OrderLots() * Lots_Multi; L_LO = Lots_Sel; }}}} Code:
// ...Lots für NextBuy-by-NextSel berechnen: L_SH=1.0; for(m=OrdersTotal()-1;m>=0;m--){ if(OrderSelect(m,SELECT_BY_POS)){ if(OrderSymbol()==Symbol()){ if( OrderMagicNumber()==MN_NeSel ){ Lots_Buy = L_SH * OrderLots() * Lots_Multi; L_SH = Lots_Buy; }}}} Geändert von MA-EA (02.12.21 um 13:39 Uhr) |
|
|||
Dann halt mit geringem Verlust-Risiko.
Wenn ich das richtig sehe, zieht er von OrdersTotal() 1 ab und geht dann alle Orders von der mit dem höchsten "Stellen-Wert" an zu der mit dem kleinsten "Stellen-Wert" durch. Sozusagen von der Neuesten zur Ältesten. Aber ich vermute, dass das in dem Fall anders rum sein muss. Er müsste mit der ältesten Order anfangen und mit der Neuesten aufhören. Wie müsste man das proggen? Code:
Opened_Buy=NULL; for(m=OrdersTotal()-1;m>=0;m--){ if(OrderSelect(m,SELECT_BY_POS)){ if(OrderSymbol()==Symbol()){ if( OrderMagicNumber()==MN_NeBuy ){ ...}}}} |
|
||||
Martingale hat immer ein Risiko von einem Totalverlust, und der ist manchmal ganz schnell erreicht!
Zitat:
Du wirst doch wohl noch die Zählweise einer For-Schleife umdrehen können oder? |
|
|||
Zitat:
Zählweise einer For-Loop umdrehn klingt eigentlich einfach, ist es aber vermutlich nicht. Momentan ist mir nur klar, dass am Ende sowas wie Code:
... ; m++ ) { ... |
|
||||
Und zum 1000 mal:
MACH EINEN PROGRAMMIERKURS oder LASS ES VON EINEM PROGRAMMIEREN! Das ist, als ob man dir erklären muss beim Autofahren das Lenkrad nach links drehen zu müssen, wenn du nach links fahren willst. Mehr Grundlagenwissen geht bald nicht mehr. Code:
for(m=0;m<OrdersTotal();m++) |
Lesezeichen |
|
|