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: 43248
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: 249
Gesamt: 249
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 19.11.21
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)
  #2 (permalink)  
Alt 25.11.21
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Ist jetzt nicht gerade nen Rekord-Gewinn unten rechts, aber grundsätzlich kann man wohl Profit damit machen. Wenn der EA immer gut läuft, kann man immer wieder kleine Gewinne machen bei im Grunde Null Risiko.

Allerdings gibts da noch einige Unklarheiten.

Die Lotsize soll mit jeder Order sozusagen exponentiert werden oder wie man das nennt. Also OrderLots() einer Order * OrderLots() der nächsten Order * einen einstellbaren Multiplikator (Oder wie man das nennt ) Sorry, bin in Mathe ne echte Pfeife.

Ausserdem ist nicht ganz klar, wie man dem EA klar machen soll, wie er erkennt, wann er wie viele weitere Orders in eine Richtung öffnen soll, bzw. wie er berechnen soll, obs eine weitere Order braucht oder gar keine. Sonst öffnet er mal 2 Neue, mal 5, mal gar keine. Da steh ich auf dem Schlauch.

Der komplette Code ist im Anhang.

Angehängte Dateien
Dateityp: mq4 LoShAL_v2_PRINT.mq4 (43,1 KB, 2x aufgerufen)
  #3 (permalink)  
Alt 25.11.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Hallo.
... kann man immer wieder kleine Gewinne machen bei im Grunde Null Risiko.
Allerdings gibts da noch einige Unklarheiten.

Ausserdem ist nicht ganz klar, wie man dem EA klar machen soll, wie er erkennt, wann er wie viele weitere Orders in eine Richtung öffnen soll, bzw. wie er berechnen soll, obs eine weitere Order braucht oder gar keine. Sonst öffnet er mal 2 Neue, mal 5, mal gar keine. Da steh ich auf dem Schlauch.
Ne, aber ansonsten ist alles klar.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #4 (permalink)  
Alt 27.11.21
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)
  #5 (permalink)  
Alt 27.11.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Wie jetzt "Alles klar" ?

Irgendwie ist Einiges gar nicht klar.

[/CODE]
Na ja, das sage ich doch.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 27.11.21
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

https://www.mathelounge.de/4250/waru...und-nicht-0-04

Vermutlich ist das das Problem. Wenn man Lot-Werte, die beide kleiner als 1 sind, miteinander multiplizieren will. Z.B. 0.02 Lot * 0.02 Lot. Da kommen ganz andere Werte raus als eigentlich sollen. Mein Handy rechnet solche Werte anscheinend so, wie es soll. Der PC aber nicht. Gibts da ne einigermaßen einfache Lösung für?
  #7 (permalink)  
Alt 27.11.21
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
https://www.mathelounge.de/4250/waru...und-nicht-0-04

Vermutlich ist das das Problem. Wenn man Lot-Werte, die beide kleiner als 1 sind, miteinander multiplizieren will. Z.B. 0.02 Lot * 0.02 Lot. Da kommen ganz andere Werte raus als eigentlich sollen. Mein Handy rechnet solche Werte anscheinend so, wie es soll. Der PC aber nicht. Gibts da ne einigermaßen einfache Lösung für?
Ja einfach 0.02 * 0.02 rechnen lassen.
Hoffentlich kommt da so etwa 0 raus.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 28.11.21
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Da kommt 0,0004 raus. Das wären für den MT4 dann 0.00 Lot.

Die Lösung ist anscheinend, das Ergebnis noch mal mit 100 zu multiplizieren. Aber was, wenn MinLot() 0.1 ist? Derzeit rechnet der EA einfach 1.0 / MinLot(). Das Ergebnis dann mal die andere Lot-Berechnerei. Jedenfalls wenn beide Werte, die miteinander multipliziert werden sollen, < 1.0 sind. Das scheint soweit auch zu funktionieren.
Angehängte Dateien
Dateityp: mq4 LoShAL_v5_PRINT.mq4 (41,3 KB, 2x aufgerufen)
  #9 (permalink)  
Alt 28.11.21
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Hallo.

Im Anhang die neueste Version. Keine Ahnung ob das Teil so funktioniert. Müsste eigentlich. Das hab ich aber schon oft gedacht.

Wär cool, wenn Jemand Tipps zur Optimierung hätte. Oder allgemein Tipps und Hinweise usw. zu MartinGale-EAs und Strategien.

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_Ti_v1_PRINT.mq4 gibt es 4 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_Ti_v1_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=255;// ?
//-----------------------------------------------------------------------------------------------------------*/
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=68;// Zum Testen 68
//-----------------------------------------------------------------------------------------------------------*/

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

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

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

OdML,

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);
  
  
  OdML = 1.0 / mL;
  


//=============================================================================================================
// 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 noch kein NextSel mit Lots_NextSel-Ergebnis offen ist, 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:",

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


  }}} }// 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 ){// ?


//      
        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:",
                     
                 "-Lots_Multi=",Lots_Multi,
                 "-Lots_Buy=",Lots_Buy,
                 
                 "-OL=",OL

                   
               );


    }}} }// Nach OS3 noch kein NextSel offen.
    
//=============================================================================================================
// O R D E R   S E A R C H   4  ( l )
//=============================================================================================================
for(l=OrdersTotal()-1;l>=0;l--){
if(OrderSelect(l,SELECT_BY_POS)){
if(OrderSymbol()==Symbol()){
if(OrderMagicNumber()==MN_NeBuy)neLO=true;
if(OrderMagicNumber()==MN_NeSel)neSH=true;}}}
//=============================================================================================================
// ( O S 4 ) 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:
    if(OrderSelect(TI_NeBuy,SELECT_BY_TICKET)){
    if(OrderSymbol()==Symbol()){
      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 ){


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


          L_LO = Lots_Sel;
          
          
          Print("Lots NextSel:",
          
                "-L_LO=",L_LO,
                "-OdML=",OdML,
                "-Lots_Sel=",Lots_Sel
                
               );
        }}}}


//      ...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 noch kein NextSel mit neuestem Lots_Sel-Wert offen ist, 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=",OL

               );
                
          
          }}} }// Nach OS4 Next-NextBuy offen

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

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

//    ...prüfen, ob NeSel über DON_Buy ist:
      if(OrderSelect(TI_NeSel,SELECT_BY_TICKET)){
      if(OrderSymbol()==Symbol()){
        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 ){

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

            L_SH = Lots_Buy;
            
            
            Print( "Lots NextBuy:",
                   
                   "-L_SH=",L_SH,
                   "-OdML=",OdML,
                   "-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 noch kein nextBuy mit letztem Lots_Buy-Wert offen ist, 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=",OL
                  
                
                 );
          
          
          }}} }// 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_Ti_v1_PRINT.mq4 (41,3 KB, 2x aufgerufen)
  #10 (permalink)  
Alt 29.11.21
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MA-EA Beitrag anzeigen
Da kommt 0,0004 raus. Das wären für den MT4 dann 0.00 Lot.

Die Lösung ist anscheinend, das Ergebnis noch mal mit 100 zu multiplizieren.
Ich glaube es wäre besser wenn du das Ergebnis mit 100.000 multiplizieren würdest...
Thema geschlossen

Lesezeichen

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:36 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.
-----------------------------------------------------------------------------------------------------------------------------