expert advisor - verschiedene Fragen - Seite 32

 

(Bevor ich versuche, diesen Kommentar zu schreiben, denke ich, dass ich wild recherchiert habe, um eine Lösung zu finden, ja ich habe ähnliche Threads gefunden, aber ich habe keine Lösung für dieses Problem gefunden. )

Ich verwende den untenstehenden Code für Sell Order, der mir Stop Loss in Pips anzeigt, er zeigt mir den korrekten Wert an, bis der Stop Loss positiv wird.
Also, ich habe keine Ahnung, wie ich etwas versuchen kann, um dieses Problem zu lösen.

Jeder gute Kommentar, wäre besser, bitte.
(Anmerkung: Ich verwende im Moment keinen Trailing Stop. Auch unten Code nur für Info Updates, nicht für OrderSend() oder ähnliche Dinge. )

if(OrderType()==OP_SELL || (OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP))
  {
   riskinpips=change_to_pips(OrderStopLoss()-OrderOpenPrice());
  }
Print("stop loss in pips",DoubleToString(riskinpips,2));

Vielen Dank im Voraus.

Wenn Stop-Loss in positivem Gewinn

(Hinweis: Screenshot-Etiketten, die mit dem Photo-Edition-Programm erstellt wurden, um mein Problem zu beschreiben)
 

Der höchste Wert abzüglich des niedrigsten Wertes ergibt das Ergebnis, so dass Sie überprüfen können, welcher Wert der höchste ist.

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}
 
Marco vd Heijden:

Nun, es ist der höchste Wert minus dem niedrigsten Wert, der das Ergebnis ergibt, so dass Sie überprüfen können, welcher Wert der höchste ist.

if(OrderStopLoss()>OrderOpenPrice())
{
  // orderstoploss - orderopenprice
}

else if(OrderOpenPrice()>OrderStopLoss())
{
  // orderopenprice - orderstoploss
}

Ich lache mich einfach kaputt, dass es mir nichts ausmacht. Ich glaube, das könnte mir helfen. Bald werde ich es ausprobieren.

Vielen Dank , Mr. Marco

 

#Profit Currency Calculate - Geschlossen

Bis jetzt funktioniert es perfekt.
Vielen Dank @Marco vd Heijden und @whroeder1

 

#Time - Offen

Seit ich begonnen habe, Forschung über Zeit / Uhr für meine EA. Ich sehe Autoren verwenden start() JUST in Indikator für sie.
Ich verwende OnTimer() und OnTick() in meinem EA, möchte ich nicht zu verwenden start().
So muss ich nur sicher sein / lernen, welche spezielle Funktion wäre besser für Time and Clock Funktion?

Ich werde weiter über dieses Thema 10 Stunden später zu forschen.
( Anmerkung: Ich habe bereits einige Time and Clock Indikatoren von der Mql5.com Codebase Seite gefunden - aber ich mag es nicht, zu kopieren und einzufügen )

Alle guten Kommentare, Forum teilen, und Links und etwas anderes wäre besser für mich.

Vielen Dank im Voraus.

 

Die Startfunktion wird nur in Skripten durch OnStart ersetzt. In Expert Advisors und Indikatoren sollte sie in OnTick bzw. OnCalculate umbenannt werden. Der Code, der während einer mql5-Programmoperation ausgeführt werden soll, sollte sich in diesen drei Funktionen befinden:

Siehe: https://www.mql5.com/en/docs/migration

Documentation on MQL5: Moving from MQL4
Documentation on MQL5: Moving from MQL4
  • www.mql5.com
Moving from MQL4 - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

Die Startfunktion wird nur in Skripten durch OnStart ersetzt. In Expert Advisors und Indikatoren sollte sie in OnTick bzw. OnCalculate umbenannt werden. Der Code, der während einer mql5-Programmoperation ausgeführt werden soll, sollte sich in diesen drei Funktionen befinden:

Vielen Dank mehr @Marco das gemeinsame so informativ für mich. Ich habe bereits "Umzug von MQL4 zu MQL5" gelesen.
 
Max Enrik:

#Time - Offen

Seit ich angefangen habe, über Time / Clock für meinen EA zu recherchieren. Ich sehe Autoren verwenden start() JUST in Indikator für sie.
Ich verwende OnTimer() und OnTick() in meinem EA, möchte ich nicht zu verwenden start().
So muss ich nur sicher sein / lernen, welche spezielle Funktion wäre besser für Time and Clock Funktion?

Ich werde weiter über dieses Thema 10 Stunden später zu forschen.
( Anmerkung: Ich habe bereits einige Time and Clock Indikatoren von der Mql5.com Codebase Seite gefunden - aber ich mag es nicht, zu kopieren und einzufügen )

Alle guten Kommentare, Forum teilen, und Links und etwas anderes wäre besser für mich.

Vielen Dank im Voraus.

Verwenden Sie OnTimer().

Die Verwendung von TimeLocal() gibt ein besseres Erscheinungsbild, aber es wird nicht mit der Zeitzone des Brokers synchronisiert.

Die Verwendung von TimeCurrent() wird mit dem Broker synchronisiert, kann aber um Sekunden "springen", je nachdem, wann die Ticks eintreffen. Dieses Beispiel soll das Problem verdeutlichen:

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
 

#Zeit - Geschlossen

honest_knave:

Verwenden Sie OnTimer().
Die Verwendung von TimeLocal() gibt ein besseres Erscheinungsbild, aber es wird nicht mit der Zeitzone des Brokers synchronisiert.
Die Verwendung von TimeCurrent() wird mit Ihrem Broker synchronisiert, kann aber um Sekunden "springen", je nachdem, wann die Ticks ankommen. Dieses Beispiel soll das Problem verdeutlichen:

#property strict

int OnInit()
  {
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

void OnTimer()
  {
   Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
  }
Völlig nützlicher Kommentar. Vielen Dank, Mann.
 

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Expert Advisor - div. Fragen

ehrlich_knave, 2016.11.30 01:28

IMHO wäre es besser, wenn Sie alle Ihre Lot-Berechnungen zusammen halten, anstatt sie zwischen OnChartEvent() und _lotCalc() aufzuteilen. Eine Funktion, die min / max / step prüft und das Inkrement / Dekrement durchführt.

void OnChartEvent(const int      id     , // Event ID
                  const long   & lparam , // Parameter of type long event
                  const double & dparam , // Parameter of type double event
                  const string & sparam   // Parameter of type string events
                  )
{
    _lotCalc();
    //-------Process Button---------------------------------------------------------|
    if ( sparam == _btnLotMinus )
    {
        ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
        _lotSize = fmax(_lotMin, _lotSize-_lotStep);
        _calcUpdade( CALC_CHANGE_LOT );
        printf( " | Lot: %.2f  ", _lotSize );
        return;
    }   //---if Close
    //                          ...
}

void _lotCalc()
{
    //---
    _lotMin  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN  );
    _lotMax  = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX  );
    _lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );

    //---
}

#Lot Step - Neu öffnen

@honest_knave- vielen Dank für Ihre große Hilfe zu Lot Size und Lot Step.

Ich muss also nur diesen Teil des Codes verbessern, damit, wenn " Lot Size >= ( Lot Step * 100 ) ", der Lot Step um " Lot Step * 100 " erhöht wird.

// lot plus
if(sparam==lotbuttonplus)
  {
   if(lotsize>=(lotstep*100))
     {
      lotstep=lotstep*100;
      Print("lot step: ",lotstep);
     }

   lotmaxdivide=lotmax/lotmax *(lotvalue*10);
   lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep*10 : lotstep));

// global variable
   infoupdate();

   printf("Lot: %.2f ",lotsize);
   ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
   return;
  }

Vielen Dank im Voraus.