Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 19.11.21
MA-EA MA-EA ist offline
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard MartinGale-EA spinnt rum

Hallo.

Seit Monaten, wenn nicht seit Jahren, schlag ich mich mit nem eigentlich einfachen MartinGale-EA rum.

Je nach dem wie der Kurs sich entwickelt, soll er in die jeweilige Richtung eine weitere Order mit mehr Einsatz öffnen. Aber das Einzige was er macht, ist die 1. beiden Orders öffnen, was er auch soll. Allerdings schließt er Beide gleich wieder, öffnet sie wieder, schließt sie gleich wieder und immer so weiter.

MartinGale hin oder her, Strategie hin oder her, ob man davon was hält oder nicht, bitte helft mir, das Ding endlich zum Laufen zu bringen. Und wenns am Ende doch keinen Profit macht, dann lasst das einfach mein Problem sein.

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

Anscheinend muss DONO mehr als doppelt so groß wie Spread sein,
weil sonst nicht alle Spread-Kosten wieder rein kommen?


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

In dieser Vers. LoShAL_v7_PRINT.mq4 gibt es 1 OS.

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

  if( Mr <= -1.0 || Mr >= 1.0 ){
    if( oLmL <= -1.0 || oLmL >= 1.0 )MmL = Mr / oLmL;
    if( oLmL >  -1.0 && oLmL <  1.0 )MmL = Mr * oLmL;}
  if( Mr >  -1.0 && Mr <  1.0 ){
    if( oLmL <= -1.0 || oLmL >= 1.0 )MmL = Mr / oLmL;
    if( oLmL >  -1.0 && oLmL <  1.0 )MmL = Mr * oLmL;}

//=============================================================================================================
// 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"LoShAL_v7_PRINT.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.Sel & 1.Buy.";
extern string esB02="if last Sel >";
extern string esB03="( OrderOpenPrice()";
extern string esB04="+ Dist_ONO )";
extern string esB05="EA multi LotsBuy.";
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 last Buy <";
extern string esB11="( OrderOpenPrice()";
extern string esB12="- Dist_ONO )";
extern string esB13="EA multi LotsSel.";
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=19;// Zum Testen bis einschließlich 19 Uhr öffnen.
//-----------------------------------------------------------------------------------------------------------*/
extern string esTF="TimeFrame";
input ENUM_TIMEFRAMES TF=15;// Zum Testen M15
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=525;// ?
//-----------------------------------------------------------------------------------------------------------*/
extern int TP=375;// ?
//-----------------------------------------------------------------------------------------------------------*/
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=29;// Zum Testen 29
//-----------------------------------------------------------------------------------------------------------*/
extern string esDCAO1="Dist to OrderOpenPrice()";
extern string esDCAO2="close all Orders";
extern int D_CAO=58;// Zum Testen 58
//-----------------------------------------------------------------------------------------------------------*/

extern string esL="Lots";
extern double Lots=0.01;
extern double Lots_Multi=2.8;// Zum Testen 2.8

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

//=============================================================================================================
// G L O B A L E   D E K L A R A T I O N E N
//=============================================================================================================
bool

fiLO,fiSH,neLO,neSH,OC_Sel,OC_Buy

;
//-----------------------------------------------------------------------------------------------------------*/
double

SL_Sel,SL_Buy,TP_Sel,TP_Buy,MSL,
DON_Sel,DON_Buy,DCAO_FiSel,DCAO_FiBuy,
Lots_Sel,Lots_Buy,

L_LO,L_SH

;
//-----------------------------------------------------------------------------------------------------------*/
int

i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,// ?
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);}
//=============================================================================================================
// 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>0){
TP_Sel=NormalizeDouble(Bid-TP*Point,Digits);
TP_Buy=NormalizeDouble(Ask+TP*Point,Digits);}
//=============================================================================================================
// L O T S
//=============================================================================================================


  double mL,oLmL,Mr,MmL;

  mL = MarketInfo(Symbol(),MODE_MINLOT);
  Mr = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
  


//=============================================================================================================
// O R D E R   S E A R C H   ( i )
//=============================================================================================================
fiLO=false;
fiSH=false;
neLO=false;
neSH=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){
//=============================================================================================================
// ( O C 1 )   O P E N   F I R S T   S E L / O P E N   F I R S T   B U Y
//=============================================================================================================
//...und wenn zur Zeit Orders geöffnet werden dürfen, FirstSel und FirstBuy öffnen.
  if(Hour()>=FromH&&Hour()<=TillH){
    if(IsTradeAllowed()==true)TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);
    if(IsTradeAllowed()==true)TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,clrBlue);
    if(IsTradeContextBusy()==true)Sleep(slMS);
    
    Print( "FiSelFiBuy-Spr=",DoubleToStr(Ask-Bid) );}}// Nach OC1 gar keine Orders offen.
//=============================================================================================================
// O R D E R   C H E C K   2   ( j )
//=============================================================================================================
// Wenn nach OS2/OC2 FirstBuy und FirstSel offen sind...
if(fiLO==true&&fiSH==true){// ?
//=============================================================================================================
// ( O C 2 )   O P E N   N E X T S E L / O P E N   N E X T B U Y
//=============================================================================================================
  for(k=OrdersTotal()-1;k>=0;k--){
  if(OrderSelect(k,SELECT_BY_POS)){
  if(OrderSymbol()==Symbol()){
  //=============================================================================================================
// ( O C 2 )   O P E N   N E X T S E L   ( k )
//=============================================================================================================


//  Nach OC2 FirstBuy raus suchen:
    if( OrderMagicNumber()==MN_FiBuy ){

//    DCAO für FirstBuy berechnen...
      DCAO_FiBuy=NormalizeDouble( OrderOpenPrice() + D_CAO *Point,Digits);
    
//    ...wenn nach OC2 (j) noch kein NextBuy offen ist...
      if( neLO==false ){

//      ...DON_Sel berechnen :
        DON_Sel=NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);

//      Wenn FirstBuy unter DON-Sel ist...
        if( Bid < DON_Sel ){// ?

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

            Lots_Sel = Lots_Multi * OrderLots();

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

//          Wenn weniger NextSel als 1 offen ist, NextSel-by-FirstBuy öffnen.
            if( 1 > Opened_Sel ){
              if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots_Sel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
              if(IsTradeContextBusy()==true)Sleep(slMS);


              Print( "NextSel-by-FirstBuy:",

                     "-OL()=",OrderLots(),
                     "-Lots_Multi=",Lots_Multi,
                     "-Lots_Sel=",Lots_Sel
                   
                   );


              }}}} }// Nach OC2 FirstBuy über MN raus gesucht.


//=============================================================================================================
//( O C 2 )   O P E N    1 . N E X T B U Y   ( k )
//=============================================================================================================


//  Nach OS2/OC2 FirstSel raus suchen:
    if(OrderMagicNumber()==MN_FiSel){

//    DCAO für FirstSel ausrechnen...
      DCAO_FiSel=NormalizeDouble( OrderOpenPrice() - D_CAO *Point,Digits);

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

//      DON-Buy für FirstSel ausrechnen...
        DON_Buy=NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);

//      Wenn FirstSel über DON_Buy ist...
        if( Ask > DON_Buy ){// ?
        
//        ...wenn FirstBuy unter DCAO ist:
          if( Bid < DCAO_FiBuy ){// ?

            Lots_Buy = Lots_Multi * OrderLots();

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

//          Wenn weniger NextBuy als 1 offen sind, NextBuy-by-FirstSel öffnen.
            if( 1 > Opened_Buy ){
              if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots_Buy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
              if(IsTradeContextBusy()==true)Sleep(slMS);


              Print( "NextBuy-by-FirstSel:",
                     
                     "-OL()=",OrderLots(),
                     "-Lots_Multi=",Lots_Multi,
                     "-Lots_Buy=",Lots_Buy
                   
                   );


    }}}} }// Nach OS2/OC2 FirstSel über MN raus gesucht.

//-----------------------------------------------------------------------------------------------------------*/
}}}// Nach OC2 FirstSel und FirstBuy raus suchen. ( k )
//=============================================================================================================
// O P E N   M O R E   S E L   B Y   N E X T B U Y   ( k )
//=============================================================================================================


// Wenn nach OS3 (k) Next-NextBuy offen ist...
  if( neLO==true ){

//  ...berechnen, ob NextBuy unter DON_Sel ist:
    for(m=OrdersTotal()-1;m>=0;m--){
    if(OrderSelect(m,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){
    if( OrderMagicNumber()==MN_NeBuy )DON_Sel=NormalizeDouble( OrderOpenPrice() - D_ONO *Point,Digits);}}}

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

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


        L_LO=1.0;
        for(m=OrdersTotal()-1;m>=0;m--){
        if(OrderSelect(m,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if( OrderMagicNumber()==MN_NeBuy ){

          if( OrderLots() <  1.0 && L_LO < 1.0 )Lots_Sel = ( OrderLots() / L_LO ) * Lots_Multi;
          else Lots_Sel = OrderLots() * L_LO * Lots_Multi;

          L_LO = Lots_Sel;
          
          }}}}


        Opened_Buy=0;
        for(n=OrdersTotal()-1;n>=0;n--){
        if(OrderSelect(n,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if( OrderMagicNumber()==MN_NeBuy )Opened_Buy++;}}}

//      Ausrechnen, wie viele NextSel geöffnet werden müssen:
        Need_Sel = Opened_Buy + 1;

//      ...zählen, wie viele NextSel schon offen 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++;}}}

//      Wenn weniger NextSel als NeedSel offen sind, weitere NextSel öffnen:
        if( Need_Sel > Opened_Sel ){
          if(IsTradeAllowed()==true)TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots_Sel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
          if(IsTradeContextBusy()==true)Sleep(slMS);


          Print("Next Sel:"
                
                "-Opened_Buy=",Opened_Buy,
                "-Need_Sel=",Need_Sel,
                "-Opened_Sel=",Opened_Sel,
                
                
                "-OL()=",OrderLots(),
                "-Lot_LO=",L_LO,
                "-Lots_Sel=",Lots_Sel
                
               );
                
          
          }}} }// Nach OS3 Next-NextBuy offen


//=============================================================================================================
// O P E N   M O R E   B U Y   B Y   N E X T S E L   ( k )
//=============================================================================================================


//  ...wenn nach OS3 NextSel offen ist...
    if(neSH==true){

//    ...prüfen, ob NeSel über DON_Buy ist:
      for(p=OrdersTotal()-1;p>=0;p--){
      if(OrderSelect(p,SELECT_BY_POS)){
      if(OrderSymbol()==Symbol()){
      if( OrderMagicNumber()==MN_NeSel )DON_Buy=NormalizeDouble( OrderOpenPrice() + D_ONO *Point,Digits);}}}

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

//      ...prüfen, ob FirstBuy DCAO erreicht hat:
        if( Bid < DCAO_FiBuy ){// ?


          L_SH=1.0;
          for(m=OrdersTotal()-1;m>=0;m--){
          if(OrderSelect(m,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){
          if( OrderMagicNumber()==MN_NeSel ){

            if( OrderLots() <  1.0 && L_SH < 1.0 )Lots_Buy = ( OrderLots() / L_SH ) * Lots_Multi;
            else Lots_Buy = OrderLots() * L_SH * Lots_Multi;

            L_SH = Lots_Buy;
            
            }}}}


//        Sel-Orders zählen:
          Opened_Sel=0;
          for(t=OrdersTotal()-1;t>=0;t--){
          if(OrderSelect(t,SELECT_BY_POS)){
          if(OrderSymbol()==Symbol()){
          if( OrderMagicNumber()==MN_NeSel )Opened_Sel++;}}}

//        Ausrechnen wie viele NextBuy geöffnet werden müssen...
          Need_Buy=Opened_Sel+1;

//        ...zählen, wie viele NextBuy schon 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 weniger NextBuy als NeedBuy offen sind, weitere NextBuy öffnen:
          if( Need_Buy > Opened_Buy ){
            if(IsTradeAllowed()==true)TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots_Buy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
            if(IsTradeContextBusy()==true)Sleep(slMS);


          Print("Next Buy:"
               
                "-OL()=",OrderLots(),
                "-L_SH=",L_SH,
                "-Lots_Buy=",Lots_Buy,
                
                "-Opened_Sel=",Opened_Sel,
                "-Need_Buy=",Need_Buy,
                "-Opened_Buy=",Opened_Buy
                
               );
          
          
          }}} }// nach OS3 Next-NextSel offen.


//=============================================================================================================
// N A C H   O C 2   F I R S T - S E L   U N D   F I R S T B U Y   O F F E N
//=============================================================================================================
}// Nach OC2 FirstSel und FirstBuy offen.
//=============================================================================================================
// C L O S E   A L L   B Y   F I R S T   O R D E R S
//=============================================================================================================
//Wenn FirstSel unter DCAO / FirstBuy über DCAO ist, alle Orders schließen.
if( Ask <= DCAO_FiSel || Bid >= DCAO_FiBuy ){// ?
  for(z=OrdersTotal()-1;z>=0;z--){
  if(OrderSelect(z,SELECT_BY_POS)){
  if(OrderSymbol()==Symbol()){
    if(OrderMagicNumber()==MN_NeSel||OrderMagicNumber()==MN_FiSel){
      if(IsTradeAllowed()==true)OC_Sel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed);
      if(IsTradeContextBusy()==true)Sleep(slMS);}
    if(OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiBuy){
      if(IsTradeAllowed()==true)OC_Buy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrRed);
      if(IsTradeContextBusy()==true)Sleep(slMS);}}}} }// FirstSel/FirstBuy hat DCAO-Dist erreicht.
//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
}// void OnTick()
Angehängte Dateien
Dateityp: mq4 LoShAL_v7_PRINT.mq4 (40,5 KB, 4x aufgerufen)