Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Werte auf Anfangs-Werte zurück setzen (http://www.expert-advisor.com/forum/showthread.php?t=6694)

MA-EA 18.06.20 11:01

Werte auf Anfangs-Werte zurück setzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Der EA im Anhang erhöht beim Schließen einer erfolgreichen Order die Lots. Allerdings soll er das (vorläufig) nur ein mal machen. Welche Wege gibts, den globalen Anfangswert nach 1 oder 2 Erhöhungen sozusagen auf seinen Anfangswert zurück zu setzen?

Anfangswerte sind ganz oben. Wenn die jeweilige Buy / Sell - Order mit Gewinn geschlossen wird, wird ihr jeweiliger Lot-Einsatz mit LotsPlus addiert. Das soll aber (vorläufig) nur ein mal gemacht werden. Bei der nächsten Order sollen wieder die jeweiligen Anfangswerte (0.01) benutzt werden.
Code:

extern double LotsBuy=0.01;
extern double LotsSel=0.01;

extern string esLPOCP1="Lots Buy/Lots Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01; //

Code:

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

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

   
    if(OrderMagicNumber()==MN_Sel){


//        Ask - Dist                          Ask + Dist
      if( (CLsel_Lo_D >= OrderOpenPrice()) || (CLsel_Pr_D < OrderOpenPrice()) ){


//          Ask + Dist
        if( CLsel_Pr_D < OrderOpenPrice() )LotsSel = OrderLots() + LotsPlus;


        if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
        if(IsTradeContextBusy()==true)Sleep(Sl_MS);}}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////

   
    if(OrderMagicNumber()==MN_Buy){


//        Bid + Dist                          Bid - Dist
      if( (CLbuy_Lo_D <= OrderOpenPrice()) || (CLbuy_Pr_D > OrderOpenPrice()) ){


//          Bid - Dist
        if( CLbuy_Pr_D > OrderOpenPrice() )LotsBuy = OrderLots() + LotsPlus;


        if(IsTradeAllowed()==true)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
        if(IsTradeContextBusy()==true)Sleep(Sl_MS);}}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


} } }


Indikator-Trading 18.06.20 11:20

Code:

// ( Ask - Dist_Loss ) >= OrderOpenPrice()
  double CLsel_Lo_D = NormalizeDouble(Ask - Dist_Lo *_Point,_Digits);


// ( Ask + Dist_Profit ) < OrderOpenPrice()
  double CLsel_Pr_D = NormalizeDouble(Ask + Dist_Pr *_Point,_Digits);



// ( Bid - Dist_Profit ) > OrderOpenPrice()
  double CLbuy_Pr_D = NormalizeDouble(Bid - Dist_Pr *_Point,_Digits);


// ( Bid + Dist_Loss ) <= OrderOpenPrice()
  double CLbuy_Lo_D = NormalizeDouble(Bid + Dist_Lo *_Point,_Digits);

Dein SL und TP ist für Buy leider verkehrt, so wäre es richtig:
TP: NormalizeDouble((Bid + Dist_Pr *_Point,_Digits);
SL: NormalizeDouble(Bid - Dist_Lo *_Point,_Digits);

Indikator-Trading 18.06.20 11:31

Zitat:

Welche Wege gibts, den globalen Anfangswert nach 1 oder 2 Erhöhungen sozusagen auf seinen Anfangswert zurück zu setzen?
Nun aber zu deiner Frage. Das Einfachste wäre es eine Variable zu nehmen, welches die Initial-Lotgröße beinhaltet. Du könntest anstatt diene Lotgröße immer um den Minimale Lot-Anzahl ja auch über eine Beliebige Lotgröße Erhöhen und die Anzahl der Erhöhungen einfach in einer Integer-Variable speichern.

So zum Beispiel:
Lot = InitalLot + (AnzahlErhöhungen*LotStep);

Auf diese Weise würdest du dann z. B. die Variable AnzahlErhöhungen=0 setzen, wenn du einen Verlust eingefahren hast. Alternativ könntest du auch die Anzahl der Erhöhungen jeweils um 1 reduzieren oder um 1 erhöhen, wenn du einen Verlust, bzw. einen Gewinn hattest.
Ich kann dir davon aber eigentlich nur abraten. Trade lieber jeden Trade mit einem kontant gleichbleibenden Risiko, welcher du auf deine Accoutgröße beziehst (z.B. 1% Risiko pro Trade)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum