[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 572

 
rigonich:

Hier ist der Code, er funktioniert wie gewünscht. Bei jedem Abschluss werden zwei entgegengesetzte Positionen geöffnet.



Ich danke Ihnen.

Aber Sie haben einen anderen EA, er funktioniert anders.

Ich möchte, dass mein EA Positionen in beide Richtungen öffnet, wenn einige von ihnen geschlossen sind,

Ich weiß nicht, wie man das macht, aber ich habe gesehen, dass es einige Positionen öffnet.

Dateien:
sellbuy_1.ex4  5 kb
 

Ich habe versucht, es hinzuzufügen, und es hat fast funktioniert, aber es öffnet die Positionen so, wie ich es brauche, wenn sich der Preis in eine Richtung bewegt.

Zum Beispiel schloss er einen Kauf, dann öffnete er einen neuen Kauf und Verkauf, dann schloss er wieder einen Kauf, dann öffnete er wieder auch Kauf und Verkauf, aber wenn er KEINEN Kauf und Verkauf schloss, öffnete er keine neue (((((

Bitte schauen Sie es sich an und sehen Sie, ob es hilft...

was für einen Blödsinn ich geschrieben habe )) . Aber so funktioniert es, ich habe diese Eröffnungsbedingungen...

Ich benötige eine weitere Bedingung, unter der eine Position eröffnet wird, wenn sich der Preis ändert ...

Dateien:
 
habe ich es richtig verstanden? NumberOfPositions(Symbol(),OP_BUY,Magic); ist dies die Anzahl der offenen Kaufpositionen?
 
Frostr:
Habe ich es richtig verstanden? NumberOfPositions(Symbol(),OP_BUY,Magic); wie viele offene Kaufpositionen sind das?


Ihr Expert Advisor definiert keine Eröffnungsbedingungen, sondern öffnet nur in der von Ihnen angegebenen Richtung (Variablen BUY und SELL). Sie können eine Bedingung hinzufügen, um zu prüfen, ob das letzte Geschäft in diesem EA oder in Ihrem EA mit Gewinn oder Verlust abgeschlossen wurde. Meiner Meinung nach hat sie ihre Aufgabe aber bereits erfüllt - sie zeigt am deutlichsten die Unrentabilität dieser Strategie. Eigentlich brauchen wir dafür nicht einmal einen Expert Advisor, das lässt sich in einer halben Stunde in der Historie auch ohne Taschenrechner berechnen. Wenn der Stop Loss gleich dem Take Profit ist, entspricht der Verlust dem Spread multipliziert mit der Anzahl der Trades, in allen anderen Fällen dem Spread plus der Hälfte der Differenz zwischen Stop Loss und Take Profit.

P.S. Im Allgemeinen, obwohl der Code von owl ist anders, es tut genau das, was Ihr EA tun wird, wenn Sie es die Bedingung, die Sie wollen hinzufügen. Das heißt, wenn sich der Kurs verändert hat und in die andere Richtung gegangen ist, werden bei jedem Abschluss zwei entgegengesetzte Geschäfte eröffnet. Es war einfach einfacher für mich, alle "unnötigen" Dinge aus dem Code zu entfernen, die nichts mit der eigentlichen Aufgabe zu tun haben.

P.P.S.Sie haben es richtig gemacht mitNumberOfPositions(Symbol(),OP_BUY,Magic).

 
gheka:
Welches Postamt kann eine SMS über eingehende Post und deren Inhalt versenden?

z.B. mail.ru
 
rigonich:

Ihr Expert Advisor hat keine Bedingungen für die Eröffnung, er eröffnet einfach in der von Ihnen festgelegten Richtung (die Variablen BUY und SELL). Sie können eine Bedingung hinzufügen, um zu prüfen, ob das letzte Geschäft in diesem EA oder in Ihrem EA mit Gewinn oder Verlust abgeschlossen wurde. Meiner Meinung nach hat sie ihre Aufgabe aber bereits erfüllt - sie zeigt am deutlichsten die Unrentabilität dieser Strategie. Eigentlich brauchen wir dafür nicht einmal einen Expert Advisor, das lässt sich in einer halben Stunde in der Historie auch ohne Taschenrechner berechnen. Sobald Sie Ihre Bedingung zu einem Expert Advisor hinzufügen (zwei gegensätzliche Trades öffnen und nur durch Stop Loss oder Take Profit schließen), wird die Höhe des Verlustes festgelegt und hängt nur von der Anzahl der Trades ab.



Ich weiß nicht, warum die Anzahl der offenen Positionen davon abhängt, ich kann sie nicht einstellen(!

Die einzige Möglichkeit, die Anzahl der offenen Positionen zu reduzieren, besteht darin, das Lot zu erhöhen. Wenn Sie das Lot auf das Maximum setzen, werden 1-3 Positionen auf einmal geöffnet.

Wenn Sie das Lot auf ein Minimum setzen, werden 500-1500 Positionen auf einmal eröffnet.

 
Frostr:



Ich weiß nicht, warum die Anzahl der offenen Positionen davon abhängt. Ich kann es nicht kontrollieren((...) Ich habe es mit einem EA zu tun, den Sie mir zum Testen gegeben haben.

Die einzige Möglichkeit, die Anzahl der offenen Positionen zu reduzieren, besteht darin, das Lot zu erhöhen. Wenn Sie das Lot auf das Maximum setzen, werden 1-3 Positionen auf einmal geöffnet.

Wenn Sie das Lot auf ein Minimum setzen, werden 500-1500 Positionen auf einmal eröffnet.

1. Es kann jeweils nur eine begrenzte Anzahl von Aufträgen eröffnet werden.

2. Wird das Los erheblich vergrößert, können wegen fehlender Mittel keine zusätzlichen Stellen eröffnet werden.

 
Frostr:



Mein Expert Advisor, dass Sie mir während des Testens, aus irgendeinem Grund habe ich 500-800 Positionen auf einmal zu öffnen, ich verstehe nicht, was bestimmt die Anzahl der offenen Positionen und ich kann nicht anpassen(

Die einzige Möglichkeit, die Anzahl der offenen Positionen zu reduzieren, besteht darin, das Lot zu erhöhen. Wenn Sie das Lot auf den vollen Wert einstellen, werden 1-3 Positionen auf einmal geöffnet.

Wenn Sie das Lot auf ein Minimum setzen, werden 500-1500 Positionen auf einmal eröffnet.

Dateien:
 
rigonich:


 

Ich schrieb etwas wie Trailing für meine EA, aber es funktioniert nicht, je nachdem, was ich versuche, zu ändern, damit es funktioniert, es erzeugt Fehler 1 beim Ändern, oder einfach nicht weiter gehen als der erste Druck (Print("Leading Buy Position"); )... was könnte der Grund sein, würde ich froh sein, alle Vorschläge zu hören, danke im Voraus!

bool TrailingStop()
   {
   int MD0=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if ((OrderMagicNumber()==11111)==true)
      {
      Print("Ведём позицию Buy");
      while(OrderCloseTime()==0)
         {
         if ((NormalizeDouble(Bid-OrderStopLoss()+StepStop*Point,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
               {
               RefreshRates();
               Print("текущий бид-",Bid,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(Bid-OrderStopLoss(),Digits),", новый стоп-",NormalizeDouble(Bid-StopLevel*Point,Digits));
               if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
         Sleep(1000);
         }
      if (OrderCloseTime()>0)
         {
         Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
         return(true);
         }
      }
   else
      {
      if ((OrderMagicNumber()==22222)==true)
         {
         Print("Ведём позицию Sell");
         while(OrderCloseTime()==0)
            {
            if ((NormalizeDouble(OrderStopLoss()+StepStop*Point-Ask,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
               {
               RefreshRates();
               Print("текущий бид-",Ask,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(OrderStopLoss()-Ask,Digits),", новый стоп-",NormalizeDouble(Ask+StopLevel*Point,Digits));
               if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
            Sleep(1000);
            }
         if (OrderCloseTime()>0)
            {
            Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
            return(true);
            }
         }
      else return(false);
      }
   }