Einzelnen Beitrag anzeigen
  #4 (permalink)  
Alt 27.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

Wie jetzt "Alles klar" ?

Irgendwie ist Einiges gar nicht klar.

Im Anhang die neueste Version. Hoffe mal, die macht einigermaßen was sie soll. Oder zumindest besser als die Vers. davor.

Hab nichts gegen Tipps zur Verbesserung / Optimierung.

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_v5_PRINT.mq4 gibt es 3 OS.

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


//=============================================================================================================
// 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_v5_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=16;// Zum Testen bis einschließlich 16 Uhr öffnen.
//-----------------------------------------------------------------------------------------------------------*/
extern string esTF="TimeFrame";
input ENUM_TIMEFRAMES TF=1;// Zum Testen M1
//-----------------------------------------------------------------------------------------------------------*/
extern int Slippage=12345;
//-----------------------------------------------------------------------------------------------------------*/
extern int SL=225;// ?
//-----------------------------------------------------------------------------------------------------------*/
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=34;// Zum Testen 34
//-----------------------------------------------------------------------------------------------------------*/
extern string esDCAO1="Dist to OrderOpenPrice()";
extern string esDCAO2="close all Orders";
extern int D_CAO=67;// Zum Testen 67
//-----------------------------------------------------------------------------------------------------------*/

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

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

//=============================================================================================================
// 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,

OL,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>0){
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   1  ( 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())TI_FiSel=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_FiSel,clrBlue);
    if(IsTradeContextBusy())Sleep(slMS);
    if(IsTradeAllowed())TI_FiBuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_FiBuy,clrBlue);
    if(IsTradeContextBusy())Sleep(slMS);}}// Nach OC1 gar keine Orders offen.
//=============================================================================================================
// O R D E R   S E A R C H   2  ( j )
//=============================================================================================================
for(j=OrdersTotal()-1;j>=0;j--){
if(OrderSelect(j,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 OS2/OC2 FirstBuy und FirstSel offen sind...
if( fiLO==true && fiSH==true ){// ?
//=============================================================================================================
// ( O S 2 )   D C A O - B E R E C H N U N G E N
//=============================================================================================================
  for(k=OrdersTotal()-1;k>=0;k--){
  if(OrderSelect(k,SELECT_BY_POS)){
  if(OrderSymbol()==Symbol()){
    if(OrderMagicNumber()==MN_FiBuy)DCAO_FiBuy=NormalizeDouble( OrderOpenPrice() + D_CAO *Point,Digits);
    if(OrderMagicNumber()==MN_FiSel)DCAO_FiSel=NormalizeDouble( OrderOpenPrice() - D_CAO *Point,Digits);}}}
//=============================================================================================================
// O R D E R   S E A R C H   3  ( k )
//=============================================================================================================
for(k=OrdersTotal()-1;k>=0;k--){
if(OrderSelect(k,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_NeBuy)neLO=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// ( O S 3 )   O P E N   N E X T S E L   B Y   F I R S T B U Y
//=============================================================================================================

//...wenn nach OS3 (k) noch kein NextBuy offen ist...
  if( neLO==false ){

//  ...FirstBuy raus suchen:
    for(l=OrdersTotal()-1;l>=0;l--){
    if(OrderSelect(l,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){

      if( OrderMagicNumber()==MN_FiBuy ){

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

//      Lots für NextSel-By-FirstBuy berechnen:
        Lots_Sel = OrderLots() * Lots_Multi;}}}}

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

//  Wenn FirstSel über DCAO ist...
    if( Ask > DCAO_FiSel ){// ?
      
//    
      OL=0.0;
      for(l=OrdersTotal()-1;l>=0;l--){
      if(OrderSelect(l,SELECT_BY_POS)){
      if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()==MN_NeSel){
      
        if( OrderLots() > OL )OL = OrderLots();
      
      }}}}

//    Wenn weniger NextSel als 1 offen sind, NextSel-by-firstBuy öffnen:
      if( Lots_Sel > OL ){
        if(IsTradeAllowed())TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots_Sel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
        if(IsTradeContextBusy())Sleep(slMS);


        Print( "NextSel-by-FirstBuy:",

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


  }}} }// Nach OC2 noch kein NextBuy offen.

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

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

//  ...FirstSel raus suchen:
    for(l=OrdersTotal()-1;l>=0;l--){
    if(OrderSelect(l,SELECT_BY_POS)){
    if(OrderSymbol()==Symbol()){

      if( OrderMagicNumber()==MN_FiSel ){

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

        Lots_Buy = OrderLots() * Lots_Multi;}}}}


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

//      Zählen, wie viele NextBuy-by-FirstSel bereits offen sind:
        OL=0.0;
        for(m=OrdersTotal()-1;m>=0;m--){
        if(OrderSelect(m,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==MN_NeBuy){
        
          if( OrderLots() > OL )OL = OrderLots();
        
        }}}}


        if( Lots_Buy > OL ){
          if(IsTradeAllowed())TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots_Buy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
          if(IsTradeContextBusy())Sleep(slMS);


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


    }}} }// Nach OS3 noch kein NextSel offen.

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

// Wenn nach OS4 doch 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 ){// ?


//      ...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_FiBuy || OrderMagicNumber()==MN_NeBuy ){

          Lots_Sel = L_LO * OrderLots() * Lots_Multi;

          L_LO = Lots_Sel;
          
          
          Print("Lots NextSel:",
          
                "-L_LO=",L_LO,
                "-OL()=",OrderLots(),
                "-Lots_Sel=",Lots_Sel,
                
                "-DCAO_FiBuy=",DCAO_FiBuy,
                "-DCAO_FiSel=",DCAO_FiSel
               
               );
        }}}}


//      ...Prüfen, ob schon NextSel mit letztem Lots_Sel-Ergebnis geöffnet wurde:
        OL=0.0;
        for(n=OrdersTotal()-1;n>=0;n--){
        if(OrderSelect(n,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if( OrderMagicNumber()==MN_NeSel ){
        
          if( OrderLots() > OL )OL = OrderLots();
        
        }}}}


//      Wenn ... , weitere NextSel öffnen:
        if( Lots_Sel > OL ){
          if(IsTradeAllowed())TI_NeSel=OrderSend(Symbol(),OP_SELL,Lots_Sel,Bid,Slippage,SL_Sel,TP_Sel,NULL,MN_NeSel,clrBlue);
          if(IsTradeContextBusy())Sleep(slMS);


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

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

//  ...wenn nach OS3 doch 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_FiSel || OrderMagicNumber()==MN_NeSel ){

            Lots_Buy = L_SH * OrderLots() * Lots_Multi;

            L_SH = Lots_Buy;
            
            
            Print( "Lots NextBuy:",
               
                   "-OL()=",OrderLots(),
                   "-L_SH=",L_SH,
                   "-Lots_Buy=",Lots_Buy
               
                 );
            
          }}}}


//      ...Prüfen, ob schon NextBuy mit letztem Lots_Buy-Ergebnis geöffnet wurde:
        OL=0.0;
        for(n=OrdersTotal()-1;n>=0;n--){
        if(OrderSelect(n,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()){
        if( OrderMagicNumber()==MN_NeBuy ){
        
          if( OrderLots() > OL )OL = OrderLots();
        
        }}}}


//        Wenn ... , weitere NextBuy öffnen:
          if( Lots_Buy > OL ){
            if(IsTradeAllowed())TI_NeBuy=OrderSend(Symbol(),OP_BUY,Lots_Buy,Ask,Slippage,SL_Buy,TP_Buy,NULL,MN_NeBuy,clrBlue);
            if(IsTradeContextBusy())Sleep(slMS);


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

//=============================================================================================================
// N A C H   O S 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 OS2 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())OC_Sel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrRed);
      if(IsTradeContextBusy())Sleep(slMS);}
    if(OrderMagicNumber()==MN_NeBuy||OrderMagicNumber()==MN_FiBuy){
      if(IsTradeAllowed())OC_Buy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrRed);
      if(IsTradeContextBusy())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_v5_PRINT.mq4 (41,4 KB, 2x aufgerufen)