Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 849

 
gince:

Warum wird das falsche Objekt angezeigt? Es sollteein Dreieck sein, das nach links zeigthttps://docs.mql4.com/ru/constants/objectconstants/arrows code 3, aber es erscheint ein Pfeil, der nach oben zeigt Wingdings code 241.

Programmcode (ich habeObjectSet(objName, OBJPROP_ARROWCODE, 3);)

Lesen Sie es genauer. Ich erinnere mich nicht mehr im Detail, aber Code 3 ist nicht Teil von Wingdings.


ps; Hier ist der Inhalt der Notiz.

Spezielle Pfeilcodes können in benutzerdefinierten Indikatorennicht verwendet werden, wenn der Pfeilwert für Linienmit dem Stil DRAW_ARROW festgelegt wird.

 
Es ist ein EA.
AlexeyVik:

Lesen Sie es sorgfältig. Ich erinnere mich nicht mehr im Detail, aber Code 3 ist nicht Teil von Wingdings.


ps; Hier ist der Inhalt der Notiz

Die speziellen Pfeilcodes können in der Pfeildarstellungnicht verwendet werden, wenn der Pfeilwert für Zeilen mitdem Stil DRAW_ARROW eingestellt wird.

Dies ist ein EA und er hat eine Funktion.

 
gince:
Das ist der Stadtrat.
Das spielt keine Rolle.
 
AlexeyVik:
Das spielt keine Rolle.

Wann kann ich es tun?

 
gince:
Dies ist der Expert Advisor.

Es gibt noch eine zweite Funktion in demselben Berater. Dort ist alles in Ordnung. (ObjectSet(objName, OBJPROP_ARROWCODE, 1);)

void f_ArrowOpen(
                  datetime openTime,
                  int action,
                  double lots,
                  string symb,
                  double openPrice
                  )
{
   color c;
   string op="";
      if(action==1)
      {
         c=Blue;
         op="BUY";
      }
      else if(action==-1)
      {
         c=Red;
         op="SELL";
      }
   // order open arrow name:    #76840865 buy 0.05 EURUSDc at 1.30416

      string objName = StringConcatenate("#", TimeToString(openTime,TIME_DATE|TIME_MINUTES), " ", op, " ", lots, " ", symb, " at ", openPrice);
      ObjectCreate(objName, OBJ_ARROW, 0, openTime, openPrice);
      ObjectSet(objName, OBJPROP_COLOR, c);
      ObjectSet(objName, OBJPROP_ARROWCODE, 1);
      ObjectSetText(objName, "LOT: " + DoubleToStr(lots, 2));
}
//+------------------------------------------------------------------+ 
void f_ArrowClose(
                  datetime closeTime,
                  int action,          //íàïðàâëåíèå
                  double lots,
                  string symb,
                  double openPrice,
                  double closePrice,
                  double profit)
{
      color c;
      string op="";
      if(action==1)
      {
         if(profit>0)c=Blue;else if(profit<0)c=Red;else c=Yellow;
         op="cl_BUY";
      }
      else if(action==-1)
      {
         if(profit>0)c=Blue;else if(profit<0)c=Red;else c=Yellow;
         op="cl_SELL";
      }
      
      string objName = StringConcatenate("#", closeTime, " ", op, " ", lots, " ", symb, " at ", openPrice, " close at ", closePrice);
      ObjectCreate(objName, OBJ_ARROW, 0, closeTime, closePrice);
      ObjectSet(objName, OBJPROP_COLOR, c);
      ObjectSet(objName, OBJPROP_ARROWCODE, 3);
      //ObjectSetText(objName, StringConcatenate("Profit: ", profit));
}
 
Bitte sagen Sie es mir. Der Expert Advisor handelt auf der Grundlage von Indikatorsignalen bei jedem Balken. Was sollte ich tun, um die Bedingungen für jede Zecke überprüfen zu lassen? Hier sind die Bedingungen im Indikator:
int limit, i;
int counted_bars=IndicatorCounted(); // Wie viele Balken wurden bereits gezählt
if (counted_bars<0) return(-1); // Möglichen Fehler prüfen
if (counted_bars>0) counted_bars--; // Zählen des letzten gezählten Balkens
limit=Bars-counted_bars; // Start vom letzten gezählten Balken
// - 1 - ============================ Ende des Blocks ===================================

// - 2 - ======================= Anzeige des Indikators im Verlauf ======================
for(i = limit; i >= 0; i--)
{
FastMA= iMA(NULL, 0, FastMAPeriod, FastMAShift, FastMAMethod, FastMAPrice, i);
SlowMA= iMA(NULL, 0, SlowMAPeriod, SlowMAShift, SlowMAMethod, SlowMAPrice, i);

}
// - 2 - ============================ Ende des Blocks ===================================

// - 3 - ======================= Signalausgang ========================================
//if (LastBar != Time[0]) // Einmal pro Takt
//{
ist das alles?
 
gince:

Es gibt eine zweite Funktion in demselben Berater. Dort ist alles in Ordnung. (ObjectSet(objName, OBJPROP_ARROWCODE, 1);)

Glauben Sie, dass ich Sie davon überzeugen kann, dass Sie etwas missverstehen? Sie sollten Ihre Zeit lieber mit Experimenten verbringen und versuchen zu verstehen, was Sie geschrieben haben.
 

Guten Tag zusammen.

Können Sie mir sagen, welche Bedingung ich vor OrderSend hinzufügen muss, damit der Auftrag nicht ausgeführt wird, wenn die vorherige offene Position im Minus ist? Damit es keine Mittelwertbildung gibt.

 
Craft:

Guten Tag zusammen.

Können Sie mir sagen, welche Bedingung ich vor OrderSend hinzufügen muss, damit der Auftrag nicht ausgeführt wird, wenn die vorherige offene Position im Minus ist? Ich möchte eine Mittelwertbildung vermeiden.

Im Allgemeinen läuft die Prüfung folgendermaßen ab

OrderSelect(ticket,SELECT_BY_TICKET);

if(OrderProfit()<0) { }


Und Sie können alles Mögliche in Klammern setzen. Ich verwende es zum Beispiel so, dass die "Martin"-Methode funktioniert)

 
Guten Abend, könnten Sie mir bitte erklären, wie der EA funktioniert. Wenn ich return direkt in die Hauptfunktion Start schreibe, bricht der EA dann ab? Vielen Dank im Voraus!