expert advisor - verschiedene Fragen - Seite 8

 

Okay, wenn du also

int stoploss=50;
double stop;

stop=stoploss*Point();

Print(DoubleToString(stoploss));

Wenn Sie die Funktion Point() verwenden, sollten Sie den Wert des Stoploss erhalten, den Sie dann entweder zu Bid und Ask addieren oder subtrahieren müssen, um das Preisniveau Ihres Stops zu erhalten.

Das Gleiche gilt für den Take Profit, aber natürlich in umgekehrter Reihenfolge.

Sie können einige der EA's in der Code Base überprüfen, dort gibt es eine Menge Beispiele und Variationen, wie Programmierer diese Dinge in ihren EA's machen.

Hier ist zum Beispiel eines namens Trailing Master https://www.mql5.com/en/code/16136

//-------------------------------------------------------------------------
// 1. Main function
//-------------------------------------------------------------------------
void OnTick(void)
  {
   Comment("Copyright © 2016, Il Anokhin\n"+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));

//--- 1.1. Define pip -----------------------------------------------------
   if(Digits==4 || Digits<=2) pip=Point;
   if(Digits==5 || Digits==3) pip=Point*10;

//--- 1.2. Trailing -------------------------------------------------------
   for(i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && TS>0 && OrderProfit()>0)
           {
            if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
            if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
            if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
            if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
            if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
            if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
            if(UC==false && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
            if(UC==false && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
           }
        }
     }

//--- 1.3. End of main function -------------------------------------------

Wo Sie sehen können, der Coder Il Anokhin Faust definiert pip.

Aber hier ist ein anderes Beispiel namens E-smart trailing von Димаhttps://www.mql5.com/en/code/8674


//+------------------------------------------------------------------+

void ModifyStopLossInPoint(int stoploss)
{
bool   result;
double sl = 0;
double point = MarketInfo(OrderSymbol(),MODE_POINT);

if (OrderType() == OP_BUY) sl = OrderOpenPrice() + stoploss * point;
if (OrderType() == OP_SELL) sl = OrderOpenPrice() - stoploss * point;

result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
if (result && UseSound) PlaySound(var_132);
}

//+------------------------------------------------------------------+

Beachten Sie die feinen Unterschiede bei der Durchführung der Dinge.

Ich probiere immer verschiedene Dinge aus, bis ich etwas finde, das am besten funktioniert.

Trailing Master
Trailing Master
  • Stimmen: 11
  • 2016.10.27
  • Il Anokhin
  • www.mql5.com
The Expert Advisor that performs order trailing after reaching certain profit.
 
Marco vd Heijden:

Okay, also wenn du...

Omg, nur schnell checken erstaunlichen Dank für alles, bevor ich begann zu lesen und etwas zu versuchen. Ich werde das bald ausprobieren.

Nochmals vielen Dank @Marco vd Heijden

 
Marco vd Heijden:

Die Objekte sind übereinander gestapelt, so dass es wichtig ist, chartevent () wissen zu lassen, welche Klicks auf welche Schaltfläche oder Objekte die höchste Priorität gegenüber anderen Objekten haben , die sich überlappen könnten.

Vielen Dank Mann, ich mochte Ihre Kommentare, die eine, die mehr klar und nützlich sind.

Alles Gute für dich.

 
Marco vd Heijden:

Okay, also wenn Sie verwenden

int stoploss=50;

Ich probiere immer verschiedene Dinge aus, bis ich etwas finde, das am besten funktioniert.

Ich versuche gerade, Ihren guten Kommentar zu verstehen und dann einige gute Codes für meine Orders, Stop Loss und Take Profit Funktionen zu schreiben - danke dafür.

Also, ich habe bereits versucht, etwas wie unten Code, und ich muss sicher sein, sind beide EURUSD und FB Stop Loss Wert richtig, für 10 Pips? (wenn Sie wissen wollen, was ich denke - nur ich denke, ja unten Protokolle / Ergebnisse sind beide richtigen Wert für 10 Pips. )
z.B.: stoploss value = 10; Position - KAUFEN
log: EURUSD | Preis (ask): 1.05633 / Stop Loss: 1.05533
log: FB | Preis (ask): 119.69/ Stop Loss: 119.59

( Ich rufe die untenstehende Funktion mit void OnChartevent() auf )

// this part of code from OnChartEvent()
//---
if ( sparam == _buy_name_btn )
{
    ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
    _Buy_calc_SL_TP();
    
    Print( " | Click Verify /   ");
}
//---
return;
void _Buy_calc_SL_TP()
{
    //---
    if ( _StopLoss_ON == true )
    {
      //_Sl = OrderOpenPrice() - _StopLoss *  _Pip;
        _Sl = Ask - _StopLoss *  _Pip;
        Print( " | Buy Calc SL TP Function / StopLoss: ", _Sl );
    }
    //---
    return;
}
 

Es scheint zu funktionieren.

 

Ich werde versuchen, den Kommentar von Mr. William in den Code des EA einzubeziehen - vielen Dank noch einmal William.Great Pip's Calculation MQL4
(bitte tadeln Sie mich nicht, weil dieser Code Industrie sieht aus wie sehr weit für mich, und manchmal verliere ich meinen Verstand - wie auch immer ich hoffe, ich werde meine Trade Panel EA-Codes bald fertig )

Und ich werde meinen Test-EA-Code teilen, nachdem ich ihn fertiggestellt habe, um zu sehen, ob dieser Code gut/richtig ist oder nicht (weil ich kein professioneller Programmierer bin - ich arbeite daran).

 

Keith Watford:

Okay, na gut. Ich kann mir nicht die Mühe machen, einige Ihrer Beiträge zu lesen, weil mir die Augen wehtun.
Wenn es anderen genauso geht, dann verpassen Sie etwas, nicht ich.

Ich kannte deinen Namen nicht. Ich weiß nur, dass du ein @Gumrai bist, also entschuldige, dass ich ein wenig wütend über deinen Kommentar war. Du hast mir also mit diesem Kommentar geholfen, als meine Code-Kenntnisse unter Null lagen. Es ist kein Problem alle meine Kommentare zu ignorieren, braucht Hilfe oder etwas anderes. Aber ich muss mich einfach für meine wütende Antwort an dich entschuldigen.
 

Markt ist geschlossen, und ich bin nicht sicher, etwas anderes. Aber ich habe versucht, etwas wie unten Code, ich fühle mich ich etwas verpasst, aber ich kann es nicht finden.
(Ich möchte erwähnen, meine Trade Panel EA's haben Code's für Open Buy, und Open Sell Positionen, aber ich versuche, es mit meiner Hand zu schreiben, dass ich sicher bin, wie diese EA's funktioniert)

Vielen Dank im Voraus für Ihre Hilfe und Beratung.

#define CHANGE   double      ///< Difference of two prices.
#define POINT    int         ///< `CHANGE / _Point`.
#define PIP      double      ///< `POINT / PipsPerPOINT`.
        CHANGE   points_to_change(POINT  n){ return n * _Point                         ;}
        POINT    change_to_points(CHANGE c){ return POINT(c / _Point + 0.5)            ;}
        CHANGE   pips_to_change  (PIP    n){ return points_to_change(pips_to_points(n));}
        PIP      change_to_pips  (CHANGE c){ return points_to_pips(change_to_points(c));}
        POINT    pips_to_points  (PIP    n){ if( (_Digits&1) == 1)   n *= 10.0; return POINT(n);}
        PIP      points_to_pips  (POINT  n){ PIP p = n; if( (_Digits&1) == 1) p /= 10.0; return p;}

string prfx       = "test"        ;
string sellbutton = prfx + "sell" ;
string sounduse   = "tick.wav"    ;

int    stoploss   = 10    ;
int    takeprofit = 10    ;
int    magic      = 12345 ;
int    ticket     = 0     ;
int    slippage   = 3     ;

double lot = 0.01         ;
double sl                 ;

bool   stoploss_on        = true ;
bool   result                    ;
bool   sound_use          = true ;

//---
//---
int OnInit()
{
    ObjectCreate     ( 0, sellbutton, OBJ_BUTTON        , 0, 0, 0           );
    ObjectSetString  ( 0, sellbutton, OBJPROP_TEXT      , "Sell"            );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_XDISTANCE , 20                );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_YDISTANCE , 20                );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_XSIZE     , 80                );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_YSIZE     , 40                );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_CORNER    , CORNER_LEFT_UPPER );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_COLOR     , clrWhite          );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_BGCOLOR   , clrMaroon         );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_STATE     , false             );
    ObjectSetInteger ( 0, sellbutton, OBJPROP_ZORDER    , 1                 );

    Print( "ObjectsTotal: ", ObjectsTotal() );
    return(0);
}

//---
//---
void OnTick()
{
    //---

    //---
    return;
}

//---
//---
void OnDeinit(const int reason)
{
    //---
    ObjectsDeleteAll( 0, prfx );
    //---
    return;
}

//---
//---
void OnChartEvent(const int     id     ,
                  const long&   lparam ,
                  const double& dparam ,
                  const string& sparam
                  )
{
    // Sell
    if ( sparam == sellbutton )
    {
        ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
        ticket = Orderfuntions( sellbutton );
    }
    return;
}

//---
//---
void SellCalcSLTP()
{
    //---
    if ( stoploss_on == true )
    {
        if ( OrderType() == OP_SELL ) sl = OrderOpenPrice() - pips_to_change( stoploss );
        if ( OrderType() == OP_BUY  ) sl = OrderOpenPrice() + pips_to_change( stoploss );

        result = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, CLR_NONE );
        if ( result && sound_use ) PlaySound( sounduse );
    }
    //---
    return;
}

//---
//---
int Orderfuntions( string _Order_selector )
{
    // Sell Order
    SellCalcSLTP();
    if ( _Order_selector == sellbutton )
    {
        ticket = OrderSend( _Symbol, OP_SELL, lot, Bid, slippage, sl, takeprofit, "comment", magic, 0, clrMaroon );
    }
    return(ticket);
}
 
Es sieht gut aus, aber Sie können ordermodify nicht auf diese Weise verwenden, sondern müssen zuerst eine Bestellung mit der Funktion OrderSelect() auswählen.
 
Marco vd Heijden:
Sieht ganz gut aus, aber man kann ordermodify nicht einfach so benutzen, man muss zuerst eine Bestellung mit der OrderSelect() Funktion auswählen.
Gut, ich werde es bald ausprobieren. Danke!