Hedge- und MartinGale-Strategien für Metatrader-Bot?

 

Hallo.


Gibts gute Hedge- und Martin-Gale-Strategien, die sich für nen Metatrader4 (vielleicht irgendwann MT5 ) Bot gut eignen?


Im Grunde stell ich mir das einfach vor: Je nachdem in welche Richtung der Kurs läuft, werden in Diese immer mehr Orders geöffnet. Nur wann wird Welche geschlossen und wie? Wann werden Weitere geöffnet? Meine Idee ist im Grunde, mit vielen Orders viele kleine Gewinne zu machen. Allerdings sollen nun auch wieder nicht 5000 Orders auf einmal offen sein, um es mal so zu sagen.

 
ScalpXpert:

Hallo.


Gibts gute Hedge- und Martin-Gale-Strategien, die sich für nen Metatrader4 (vielleicht irgendwann MT5 ) Bot gut eignen?

Was willst du denn Hedgen auf demselben Symbol? Überleg mal ganz scharf.......am Ende merkst du, das du nur dem Broker Gewinne bescherst.


Im Grunde stell ich mir das einfach vor: Je nachdem in welche Richtung der Kurs läuft, werden in Diese immer mehr Orders geöffnet. Nur wann wird Welche geschlossen und wie? Wann werden Weitere geöffnet? Meine Idee ist im Grunde, mit vielen Orders viele kleine Gewinne zu machen. Allerdings sollen nun auch wieder nicht 5000 Orders auf einmal offen sein, um es mal so zu sagen.


Schau in die Codebase und pick dir was raus .

 

Ich glaube, er müsste einfach nur jedes Mal so viele Orders in Gegenrichtung öffnen, dass die alle Spreads und Verluste wieder rein holen.

Jetzt einfach mal angenommen, 3 Buy-Orders machen in einer "Runde" zusammen 100 Punkte Verlust. Dann müsste man eigentlich nur ( mindestens ) 11 Sell-Orders gleichzeitig offen haben, von denen jede 10 Punkte Gewinn macht, um nach dieser "Runde" mit 10 Punkten Gewinn raus zu kommen. Klingt jetzt nicht viel, aber das ganze Spielchen kann man ja immer wieder machen, so lange der Spread klein ist.

 
ScalpXpert:

Ich glaube, er müsste einfach nur jedes Mal so viele Orders in Gegenrichtung öffnen, dass die alle Spreads und Verluste wieder rein holen.

Jetzt einfach mal angenommen, 3 Buy-Orders machen in einer "Runde" zusammen 100 Punkte Verlust. Dann müsste man eigentlich nur ( mindestens ) 11 Sell-Orders gleichzeitig offen haben, von denen jede 10 Punkte Gewinn macht, um nach dieser "Runde" mit 10 Punkten Gewinn raus zu kommen. Klingt jetzt nicht viel, aber das ganze Spielchen kann man ja immer wieder machen, so lange der Spread klein ist.

Du wirst das spiel verlieren

 
Es gibt zB diese Methode:

https://youtu.be/JzN1fEZmc40

Allerdings muss jede Art dieser Spiele zur Tradingausführung passen.

Eine andere Methode über die ich gestolpert bin kommt von Patrick NNFX YouTube Channel.

Und ist hier dokumentiert:
https://nononsenseforex.com/uncategorized/reverse-labouchere/

Die erste Methode ist exponential während die zweite Methode lineares Verhalten zeigt.

Ich denke beide sind geeignet eine schlechte Strategie in gewisse Rahmen zu setzen, ändert aber nichts an der zugrunde liegenden Strategie.



 
Dominik Egert:
Es gibt zB diese Methode:

https://youtu.be/JzN1fEZmc40

Allerdings muss jede Art dieser Spiele zur Tradingausführung passen.

Eine andere Methode über die ich gestolpert bin kommt von Patrick NNFX YouTube Channel.

Und ist hier dokumentiert:
https://nononsenseforex.com/uncategorized/reverse-labouchere/

Die erste Methode ist exponential während die zweite Methode lineares Verhalten zeigt.

Ich denke beide sind geeignet eine schlechte Strategie in gewisse Rahmen zu setzen, ändert aber nichts an der zugrunde liegenden Strategie.



Naja, Labouchère? Ich hab mit mal eine Excel-Tabelle erstellt und festgestellt ein Verlustsystem bleibt ein Verlustsystem.

Hier Ihr könnt damit spielen, aber müsst selber rausfinden, wie es geht - ich hab alles schon vergessen.

Dateien:
 
Carl Schreiber:

Naja, Labouchère? Ich hab mit mal eine Excel-Tabelle erstellt und festgestellt ein Verlustsystem bleibt ein Verlustsystem.

Hier Ihr könnt damit spielen, aber müsst selber rausfinden, wie es geht - ich hab alles schon vergessen.

Jap, da kann ich nur zustimmen. 

Jedoch ist die Grundidee, so lange in der Wahrscheinlichkeitskette eine Folge von Verlusten besteht, diese bis zum nächsten Gewinn mitzunehmen. Bei einer Strategie mit 50% Gewinn, wird dies in der Regel auch mit einer Chance von 50% auftreten. Das Problem sind die Ketten an Verlusten in Folge. Je Länger die Kette, desto dicker der "Rucksack".

Beide vorgestellten Konzepte sehen genau das vor, tragen die Verluste weiter nach vorne um sie dann in der folgenden Gewinnserie wieder aufzulösen. Martin Gale hat das Problem der 2-Faktor Doppelung und ist daher sehr intensiv and dem was zurückgehalten werden muss. - Eine einfache Risiko-Rechnung der Art 2% vom Account wird hier wohl kaum den Bedarf einer Verlustserie decken. Die genannten Konzepte adressieren genau dieses Problem und haben eine weniger hohe Belastung. 

Dies kann schon auch aufgehen, sofern die Risikokalkulation für die zugrundeliegende Strategie stimmt. Wichtigster Faktor ist die Länge einer Verlustserie, denn diese gibt vor wie viel ich Vorhalten muss um diese durchzustehen.


Aber, ich stimme absolut zu, eine Verlust-Strategie ist und bleibt eine Verlust-Strategie. Ganz egal wie gut mein "Money-Management" dahinter ist um dies auszugleichen.

Besonders komplex wird es bei variablen Strategien, diese im Vorfeld zu berechnen, oder den "Worst-Case" zu definieren wird dann irgendwann schlicht unmöglich, bzw die Wahrscheinlichkeit der Richtigkeit der Einschätzung nimmt immer mehr ab. 


Jetzt könnte man natürlich noch hergehen und das Risiko der Strategie (Also die Gewinn und Verlust-Serien) überlappend gestalten, um daraus das Gesamt-Risiko wieder in einen Bereich der 50%-Wahrscheinlichkeit führen. Doch ich glaube, ein solches System ausgeklügelt zu entwickeln ist wenigstens so Aufwändig wie eine Strategie zu bauen, die diesem schon im Ansatz Rechnung trägt. 


Der Teufel sitzt im Detail. - Besonders wenn dann noch 1M Timeframe hinzukommen und Spread und Kommission die Last auf dem Konto weiter erhöhen.

 
ScalpXpert:

Ich glaube, er müsste einfach nur jedes Mal so viele Orders in Gegenrichtung öffnen, dass die alle Spreads und Verluste wieder rein holen.

Jetzt einfach mal angenommen, 3 Buy-Orders machen in einer "Runde" zusammen 100 Punkte Verlust. Dann müsste man eigentlich nur ( mindestens ) 11 Sell-Orders gleichzeitig offen haben, von denen jede 10 Punkte Gewinn macht, um nach dieser "Runde" mit 10 Punkten Gewinn raus zu kommen. Klingt jetzt nicht viel, aber das ganze Spielchen kann man ja immer wieder machen, so lange der Spread klein ist.

   Hallo,

   Martingale Strategie funktioniert nur wer sehr viel Geld hat und kleinen Hebel.

   Das sind schon Hunderttausende Anleger die ihres Geld verloren haben.

   In solchen Fasen, wie Corona Krise, wo fast alle Instrumenten heftigen Bewegungen ausgesetzt werden, 

   ist die MartinGale - Strategie Machtlos die Verluste wieder herzustellen. 

   Also Langfristig Verlustbringend!

   Gruß Igor.

 

Lese oft, dass MartinGale nicht funktioniert. Aber man kann sich das Ganze ja mal genauer anschaun und rum experimentieren.


Im Anhang mein Metatrader4-EA dazu, den ich nach vielen Monaten endlich so hin bekommen habe, dass er nicht zu Viele und nicht zu Wenig weitere Orders in die jeweilige Trend-Richtung öffnet.


Ein großes Problem scheint zu sein, dass bei zu kleinen Distanz-Werten sich Ask und Bid und irgendwelche Öffnen- und Schließen-Werte und -Distanzen sich gegenseitig in die Quere kommen.


Neulich hat das Gerät im ( ich glaube USDJPY ) ganz gute Gewinne gemacht. Aber dann gings am späten Nachmittag auf einmal weit in den Verlust. Weiß nicht warum. Vielleicht nen Bug oder nen Fehler im EA. Keine Ahnung. Auf einmal hat das Ding anscheinend nicht mehr gemacht, was es sollte. Kurz vorm Feierabend. Vielleicht hat auch der MT4 gesponnen. Kein Schimmer.

/*=============================================================================================================
// N O T I Z E N   U N D   I N F O S
//=============================================================================================================

In dieser Vers.2e werden Orders geöffnet,
wenn die entgegen Gesetzten im Verlust sind.

//-------------------------------------------------------------------------------------------------------------

In dieser Vers.2e...

...gibts 2 OS.

...werden NextOrders mit for-Loops geöffnet.




//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
//#property strict
//#ps sorgt anscheinend dafür, dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.
#property copyright"LoShDTi_v2e.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string esTOY="true  = on / yes";
extern string esFON="false = off / no";
//-----------------------------------------------------------------------------------------------------------*/
extern string esB01="Open 1.Sell & 1.Buy.";
extern string esB02="if 1.Sel >=";
extern string esB03="( OrderOpenPrice()";
extern string esB04="+ Dist_ONO )";
extern string esB05="EA open more Buy.";
extern string esB06="if 1.Sel <=";
extern string esB07="( OrderOpenPrice()";
extern string esB08="- D_CAO )";
extern string esB09="EA close all Orders.";
extern string esB10="if 1.Buy <=";
extern string esB11="( OrderOpenPrice()";
extern string esB12="- Dist_ONO )";
extern string esB13="EA open more Sel.";
extern string esB14="if 1.Buy >=";
extern string esB15="( OrderOpenPrice()";
extern string esB16="+ D_CAO )";
extern string esB17="EA close all Orders.";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================
extern string esMN="Magic Numbers";
extern int MN_FiSel=12;
extern int MN_FiBuy=34;
extern int MN_NeSel=56;
extern int MN_NeBuy=78;
//-----------------------------------------------------------------------------------------------------------*/
extern string esOOFT1="Open Orders";
extern string esOOFT2="from/till Hour";
extern string esOOFT3="(Server Time)";
extern int FromH=5;//  Vor 5 Uhr starten scheint sich nicht zu lohnen.
extern int TillH=15;// Zum Testen bis einschließlich 15 Uhr FirstSel / FirstBuy öffnen.
//-----------------------------------------------------------------------------------------------------------*/
extern string esTF="TimeFrame";
input ENUM_TIMEFRAMES TF=5;// Zum Testen M5
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=400;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=200;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep MS";
extern int slMS=40;// Zum Testen 40ms
//-----------------------------------------------------------------------------------------------------------*/
extern string esDOONO1="Dist to OrderOpenPrice()";
extern string esDOONO2="open next Order";
extern int D_ONO=25;// Zum Testen 25
//-----------------------------------------------------------------------------------------------------------*/
extern string esDCAO1="Dist to OrderOpenPrice()";
extern string esDCAO2="close all Orders";
extern int D_CAO=72;// Zum Testen 72
//-----------------------------------------------------------------------------------------------------------*/
extern int OrdersNeed_Multi=3;// Zum Testen 3. ONM muss anscheinend min. 3 sein?
//-----------------------------------------------------------------------------------------------------------*/
extern double Lots=0.01;
//-----------------------------------------------------------------------------------------------------------*/
extern string esMS="Max Spread";
extern int MS=13;// Sollte nicht höher als 13 sein?
//=============================================================================================================
// G L O B A L E   D E K L A R A T I O N E N
//=============================================================================================================

bool

fiSH,fiLO,neSH,neLO,
OC_Sel,OC_Buy

;

//-----------------------------------------------------------------------------------------------------------*/

double

SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,
SPR,
FiBuy_DON_Sel,FiSel_DON_Buy,NeBuy_DON_Sel,NeSel_DON_Buy,
DCAO_FiSel,DCAO_FiBuy

;

//-----------------------------------------------------------------------------------------------------------*/

int

i,j,k,l,m,n,o,p,q,r,s,t,
TI_FiSel,TI_FiBuy,TI_NeSel,TI_NeBuy,
Opened_Sel,Opened_Buy,Need_Sel,Need_Buy

;

//=============================================================================================================
// I N I T
//=============================================================================================================
void OnInit(){
  ChartSetSymbolPeriod(0,NULL,TF);}
//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================
void OnTick(){
//=============================================================================================================
// S T O P   L O S S
//=============================================================================================================
//SL auf 0 stellen, wenn oben <1, um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  SL_Sel=0.0;
  SL_Buy=0.0;}
if(SL>=1){
  SL_Sel=NormalizeDouble(Bid+SL*Point,Digits);
  SL_Buy=NormalizeDouble(Ask-SL*Point,Digits);}
//SL genauso groß wie Minstoplevel machen, wenn er kleiner ist.
MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(SL_Sel<MSL)SL_Sel=MSL;
if(SL_Buy<MSL)SL_Buy=MSL;
//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================
//TP auf 0 stellen, wenn oben <1, um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  TP_Sel=0.0;
  TP_Buy=0.0;}
if(TP>=1){
  TP_Sel=NormalizeDouble(Bid-TP*Point,Digits);
  TP_Buy=NormalizeDouble(Ask+TP*Point,Digits);}
//=============================================================================================================
// S P R E A D 
//=============================================================================================================
SPR=Ask-Bid;
//=============================================================================================================
// O R D E R   S E A R C H   1
//=============================================================================================================
fiSH=false;
fiLO=false;
neSH=false;
neLO=false;
for(i=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_FiBuy)fiLO=true; 
      if(OrderMagicNumber()==MN_FiSel)fiSH=true;
      if(OrderMagicNumber()==MN_NeBuy)neLO=true; 
      if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// O R D E R   C H E C K   1
//=============================================================================================================
//Wenn nach OS1 gar keine Orders offen sind...
if( fiSH==false && fiLO==false && neSH==false && neLO==false ){
//...wenn nach OS1 der Spread <= MaxSpread ist...
  if(NormalizeDouble(SPR<=MS*Point,Digits)){
//  ...wenn zur Zeit FirstSel/FirstBuy geöffnet werden dürfen...
    if(Hour()>=FromH&&Hour()<=TillH){
//  ...FirstSel und FirstBuy öffnen.   
      if(IsTradeAllowed()==true)TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,Blue);
      if(IsTradeContextBusy()==true)Sleep(slMS);
      if(IsTradeAllowed()==true)TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,Blue);
      if(IsTradeContextBusy()==true)Sleep(slMS);}}}// Nach OS1 gar keine Orders offen.
//=============================================================================================================
// O R D E R   S E A R C H   2
//=============================================================================================================
for(i=OrdersTotal()-1;i>=0;i--){
  if(OrderSelect(i,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_FiBuy)fiLO=true; 
      if(OrderMagicNumber()==MN_FiSel)fiSH=true;
      if(OrderMagicNumber()==MN_NeBuy)neLO=true; 
      if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// O R D E R   C H E C K   2
//=============================================================================================================
// Wenn nach OC2 FirstSel und FirstBuy offen sind...
if( fiSH==true && fiLO==true ){
//=============================================================================================================
// ( O C 2 )   D C A O   B E R E C H N U N G E N
//=============================================================================================================
  if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    DCAO_FiSel=NormalizeDouble(OrderOpenPrice()-D_CAO*Point,Digits);}}
  if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    DCAO_FiBuy=NormalizeDouble(OrderOpenPrice()+D_CAO*Point,Digits);}}
//=============================================================================================================
// ( O C 2 )   O P E N   N E X T S E L   B Y   N E X T B U Y
//=============================================================================================================

//Wenn nach OC2 schon NextBuy offen ist...
  if( neLO==true ){
  
//  ...prüfen, ob letzter NextBuy unter DON_Sel ist:
    if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    NeBuy_DON_Sel=NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);}}

//  Wenn letzter NextBuy unter DON_Sel ist... 
    if( Bid <= NeBuy_DON_Sel ){

//    ...wenn FirstSel über DCAO ist...
      if( Ask > DCAO_FiSel ){

//      ...NextBuy-Orders zählen:
        Opened_Buy=0;
        for(j=OrdersTotal()-1;j>=0;j--){
        if(OrderSelect(j,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeBuy)Opened_Buy++;}}}

//      Berechnen, wie viele NextSel geöffnet werden sollen:
        Need_Sel = Opened_Buy * OrdersNeed_Multi;

//      Zählen, wie viele NextSel bereits im Markt sind:
        Opened_Sel=0;
        for(k=OrdersTotal()-1;k>=0;k--){
        if(OrderSelect(k,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeSel)Opened_Sel++;}}}

//      Wenn Need-Sel größer als Next-Sel ist, Weitere öffnen.
        if( Need_Sel > Opened_Sel ){

          for( l=Need_Sel ; l>0 ; l-- ){
            if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,Blue);
            if(IsTradeContextBusy()==true)Sleep(slMS);}// ?

  } } } }// Nach OC2 NextBuy offen.
  
//=============================================================================================================
// ( O C 2 )   O P E N   N E X T S E L   B Y   F I R S T B U Y
//=============================================================================================================

//Wenn nach OC2 noch kein NextBuy offen ist...
  if( neLO==false ){

//  ...prüfen, ob FirstBuy unter DON_Sel ist:
    if(OrderSelect(TI_FiBuy,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    FiBuy_DON_Sel=NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);}}

//  Wenn FirstBuy unter DON_Sel ist...
    if( Bid <= FiBuy_DON_Sel ){
    
//    ...wenn FirstSel über DCAO ist...
      if( Ask > DCAO_FiSel ){

//      ...zählen, wie viele NextSel bereits offen sind:
        Opened_Sel=0;
        for(m=OrdersTotal()-1;m>=0;m--){
        if(OrderSelect(m,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeSel)Opened_Sel++;}}}

//      Wenn weniger NextSel als ONM offen sind, Weitere öffnen:
        if( OrdersNeed_Multi > Opened_Sel ){
          
          for( n=OrdersNeed_Multi ; n>0; n-- ){
            if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,Blue);
            if(IsTradeContextBusy()==true)Sleep(slMS);}// ?

  } } } }// Nach OC2 noch kein NextBuy offen.
  
//=============================================================================================================
// ( O C 2 )   O P E N   N E X T B U Y   B Y   N E X T S E L
//=============================================================================================================

//Wenn nach OC2 schon NextSel offen ist...
  if( neSH==true ){

//  ...prüfen, ob NextSel über DON_Buy ist:
    if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    NeSel_DON_Buy=NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);}}

//  Wenn NextSel über DON_Buy ist...      
    if( Ask >= NeSel_DON_Buy ){

//    Wenn FirstBuy unter D_CAO ist...
      if( Bid < DCAO_FiBuy ){

//      ...zählen, wie viele NextSel im Markt sind...
        Opened_Sel=0;
        for(o=OrdersTotal()-1;o>=0;o--){
        if(OrderSelect(o,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeSel)Opened_Sel++;}}}

//      ...Need_Buy berechnen...
        Need_Buy = Opened_Sel * OrdersNeed_Multi;

//      ...zählen, wie viele NextBuy bereits offen sind:
        Opened_Buy=0;
        for(p=OrdersTotal()-1;p>=0;p--){
        if(OrderSelect(p,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeBuy)Opened_Buy++;}}}

//      Wenn NeedBuy größer als OpenedBuy ist, Weitere öffnen:
        if( Need_Buy > Opened_Buy ){
        
          for( q=Need_Buy ; q>0 ; q-- ){
            if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,Blue);
            if(IsTradeContextBusy()==true)Sleep(slMS);}// ?

  } } } }// Nach OC2 NextSel offen.

//=============================================================================================================
// ( O C 2 )   O P E N   N E X T B U Y   B Y   F I R S T S E L
//=============================================================================================================

//Wenn nach OC2 noch kein NextSel offen ist...
  if( neSH==false ){

//  ...prüfen, ob FiSel über DON_Buy ist:
    if(OrderSelect(TI_FiSel,SELECT_BY_TICKET)){if(OrderSymbol()==Symbol()){
    FiSel_DON_Buy=NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);}}

//  Wenn FirstSel über DON_Buy ist... 
    if( Ask >= FiSel_DON_Buy ){
      
//    Wenn FirstBuy unter D_CAO ist...
      if( Bid < DCAO_FiBuy ){

//      ...zählen, wie viele NextBuy bereits offen sind:
        Opened_Buy=0;
        for(r=OrdersTotal()-1;r>=0;r--){
        if(OrderSelect(r,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeBuy)Opened_Buy++;}}}

//      Wenn ONM größer als Opened_Buy ist, Weitere öffnen:
        if( OrdersNeed_Multi > Opened_Buy ){
          
          for( t=OrdersNeed_Multi ; t>0 ; t-- ){
            if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,Blue);
            if(IsTradeContextBusy()==true)Sleep(slMS);}// ?

  } } } }// Nach OS2 noch kein(e) NextBuy offen.

//=============================================================================================================
// ( O C 2 )   C L O S E   A L L   O R D E R S   B Y   F I R S T   S E L / F I R S T   B U Y
//=============================================================================================================

//Wenn FirstSel/FirstBuy unter/über DCAO ist, alle Orders schließen.
if( Ask <= DCAO_FiSel || Bid >= DCAO_FiBuy ){

  for(j=OrdersTotal()-1;j>=0;j--){
  if(OrderSelect(j,SELECT_BY_POS)){
  if(OrderSymbol()==Symbol()){

    if(OrderMagicNumber()==MN_FiSel||OrderMagicNumber()==MN_NeSel){
      if(IsTradeAllowed()==true)OC_Sel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
      if(IsTradeContextBusy()==true)Sleep(slMS);}// ?

    if(OrderMagicNumber()==MN_FiBuy||OrderMagicNumber()==MN_NeBuy){
      if(IsTradeAllowed()==true)OC_Buy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
      if(IsTradeContextBusy()==true)Sleep(slMS);} } } }// ?

}// FirstSel oder FirstBuy hat DCAO erreicht.


}// Nach OC2 FirstSel und FirstBuy offen.
//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}// void OnTick()
Dateien:
LoShDTi_v2e.mq4  36 kb
 
ScalpXpert:

Lese oft, dass MartinGale nicht funktioniert. Aber man kann sich das Ganze ja mal genauer anschaun und rum experimentieren.


Im Anhang mein Metatrader4-EA dazu, den ich nach vielen Monaten endlich so hin bekommen habe, dass er nicht zu Viele und nicht zu Wenig weitere Orders in die jeweilige Trend-Richtung öffnet.


Ein großes Problem scheint zu sein, dass bei zu kleinen Distanz-Werten sich Ask und Bid und irgendwelche Öffnen- und Schließen-Werte und -Distanzen sich gegenseitig in die Quere kommen.


Neulich hat das Gerät im ( ich glaube USDJPY ) ganz gute Gewinne gemacht. Aber dann gings am späten Nachmittag auf einmal weit in den Verlust. Weiß nicht warum. Vielleicht nen Bug oder nen Fehler im EA. Keine Ahnung. Auf einmal hat das Ding anscheinend nicht mehr gemacht, was es sollte. Kurz vorm Feierabend. Vielleicht hat auch der MT4 gesponnen. Kein Schimmer.

Es gibt ein MQL4/5 Tutorial von Orchard Forex zu Zone Recovery, das scheint auch eine Martingale-artige Strategie zu sein. Kann sein dass man das auch Reverse Martingale nennt? Die Richtung dreht sich dabei im Gegensatz zum normalen Martingale während der Verdopplungsserie um.

Bist Du sicher dass der plötzliche Gewinneinbruch nicht daher kommt weil bei dem normalen Martingale Verfahren so lange in die gleiche Richtung gehandelt UND VERDOPPELT wird, bis er Gewinn macht? Das ist ja gerade das Riskante bei Martingale.

Hast Du mal geschaut ob es bei dem Datum eine Verlustserie gab die Deine Einlage übertrifft? Das geht schnell wenn man dauernd verdoppelt. Wenn zum Beispiel so ein Einbruch kommt wie im März 2020 dann geht er halt immer weiter in den Verlust und verdoppelt bis das Geld alle ist.
Grund der Beschwerde: