[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 665

 
Roger:
Zählen Sie die Höchst- und Tiefstwerte nicht ab dem Null-Balken, sondern ab dem ersten Balken; beim Null-Balken kann der Bid-Wert nicht unter dem Min-Wert liegen.
D.h. i=1; ? Und Bid und Ask unangetastet lassen?
 
eugggy:
doppelt
Min=Bid, Erklärung der Variablen

Max=Gebot,

____________________________________________________________________________________________

for (i=0;i<=20-1;i++) Öffnungskriterien

{
if (Low[i]<Min) Min=Low[i]:
if (High[i]>Max) Max=High[i];

}

if (................. &&Ask>Max)

{

Opn_B=true; //öffnen Kaufen

}

wenn (................ &&Bid<Min)

{

Opn_S=true; //Verkauf öffnen

}

___________________________________________________________________________________________

Es tut mir leid, dass es so hässlich ist - ich musste es aus dem Gedächtnis schreiben, da der Code nicht funktionierte und ich ihn gelöscht habe. Aber Sie, als Fachmann, sollten das verstehen (hoffe ich).

____________________________________________________________________________________________

Du schmeichelst mir :)) Ich bin ein Anfänger, genau wie du...

extremumprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int  Quant_Bars  =30;                    // Количество баров
bool        OpnBuy      =false,
            OpnSell     =false;
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int i;                                       // Номер бара 
   double Minimum=Bid,                          // Минимальная цена
          Maximum=Bid;                          // Максимальная цена
 
   for(i=0;i<=Quant_Bars-1;i++)                 // От нуля (!) до..
     {                                          // ..Quant_Bars-1 (!)
      if (Low[i]< Minimum)                      // Если < известного
         Minimum=Low[i];                        // то оно и будет мин
      if (High[i]> Maximum)                     // Если > известного
         Maximum=High[i];                       // то оно и будет макс
     }
//--------------------------------------------------------------------

   if (iOpen(NULL,0,1)>Maximum)
      {
         OpnBuy =true:
         OpnSell=false;
      }
   if (iOpen(NULL,0,1)<Minimum)
      {
         OpnSell=true;
         OpnBuy =false:
      }   
//-------------------------------------------------------------------
//  А тут код открытия позиций.  if (OpnBuy)  {открываем Бай};
//                               if (OpnSell) {открываем Селл};
// Но обязательно нужно сделать проверку на существование уже открытой позиции,
// иначе они будут открываться на каждом тике пока присутствует сигнал...
   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
Es geht ungefähr so. Ich habe es nicht überprüft, ich habe es einfach geschrieben...
 
artmedia70:

Hier ist also die Logik:

1. Setzen Sie den schwebenden Auftrag mit einer magischen Zahl, z.B. 101, und setzen Sie das Flag zur Umwandlung des Auftrags in eine Position zurück, z.B. ConvOrd=false;

2. Prüfen Sie, ob die Position mit der magischen 101 erschienen ist; wenn ja, setzen Sie das Konvertierungsflag ConvOrd=true;

3. prüft ConvOrd auf Wahrheit und wenn ConvOrd==true,
wir prüfen, ob die Position mit der magischen Zahl 101 existiert - und wenn sie fehlt
bedeutet dies, dass sie bereits geschlossen ist.

{deselect ConvOrd=false; setze einen neuen anstehenden;}.

Ich denke, wir können auf Flaggen verzichten...


Ich verstehe die Logik, aber ich weiß nicht, wie ich sie in Code umsetzen kann. Ich habe viele Varianten ausprobiert, aber ich habe kein Ergebnis erzielt. Ich glaube, ich bin ein Dummkopf. Deshalb habe ich hier geschrieben. Auf S. 663 habe ich Ihnen meinen Code gezeigt. Wenn Sie daran interessiert sind, teilen Sie mir bitte mit, wie man es verbessern kann, oder sagen Sie mir zumindest, wie man es verbessern kann. Ich danke Ihnen.
 
artmedia70, Roger, danke für deine Hilfe. Ich denke, ich habe es herausgefunden, in der Tat der Preis bei bar 0 kann nicht niedriger oder höher als Minimum und Maximum, ich habe nicht darüber nachgedacht und fügte Ask als einen Wert von Min-Variable, jetzt scheint es zu funktionieren. artmedia70, im Vergleich zu mir, die meisten sind Profis))). Nochmals vielen Dank.
 
dimon74:
Ich verstehe die Logik, aber ich weiß nicht, wie ich sie in Code umsetzen kann. Ich habe viele Varianten ausprobiert, aber ich habe kein Ergebnis erzielt. Ich glaube, ich bin ein Dummkopf. Deshalb habe ich hier geschrieben. Auf S. 663 habe ich Ihnen meinen Code gezeigt. Wenn Sie daran interessiert sind, sagen Sie mir bitte, wie man es verbessern kann, oder sagen Sie mir zumindest, wie man es verbessern kann. Ich danke Ihnen.

Versuchen Sie einen einfacheren Weg: Wenn Sie einen SellStop-Auftrag erteilen, merken Sie sich den TakeProfit-Wert, und wenn der Bid unter diesen Preis fällt, setzen Sie ihn auf Buy.
 
Roger:

Versuchen Sie einen einfacheren Weg: Wenn Sie einen SellStop-Auftrag erteilen, merken Sie sich den TakeProfit-Wert, und wenn der Bid unter diesen Preis fällt, setzen Sie ihn auf Buy.
Danke für den Tipp, ich habe diese Variante bereits ausprobiert, aber sie passt nicht zu meiner Strategie.
 
dimon74:
Ich habe diese Option bereits ausprobiert, aber sie ist für meine Strategie nicht geeignet.
Mögen die Profis mir verzeihen, aber ich werde Ihnen trotzdem eine Liste nützlicher Funktionen von Igor Kim geben, vielleicht bauen Sie sie ja selbst... :)
Dateien:
 

Ich verstehe nicht, warum es zwei Sperrpositionen auf einmal gibt. Die Logik geht folgendermaßen:

Wenn das Eigenkapital einen bestimmten Prozentsatz des vorherigen Gewinns erreicht, schließen wir alle Positionen... Das funktioniert einwandfrei... Nächste...

Wenn die Aktie um einen bestimmten Prozentsatz gegenüber dem vorherigen Wert fällt, suchen Sie die Position mit dem größten Verlust und ermitteln Sie, um wen es sich dabei handelt... Kaufen oder Verkaufen...

und öffnen Sie eine Sperrposition in der Gegenrichtung mit Doppellos. Dann schauen wir uns den Gesamtgewinn (der Verlust- und der Schließposition) an, und sobald dieser größer wird, können wir ihn berechnen,

Sagen wir 10 Pips, schließen Sie sie...

Logischerweise sollte das Eigenkapital beim nächsten Ticken überprüft werden, und wenn alles in Ordnung ist, können wir weiterarbeiten... Wenn alles wieder in Ordnung ist, müssen wir uns nach dem nächsten Trottel umsehen...

Aber aus irgendeinem Grund öffnet es zwei Verriegelungspositionen auf einmal... und Kaufen und Verkaufen, und wenn das Los 0,1 war, dann öffnet die erste Sperre das Doppelte des Loses = 0,2,

und der zweite verdoppelt sie wieder und eröffnet mit 0,4 Lot ... Wozu auch, wenn sie sich gegenseitig einen Platz unter der Sonne streitig machen ... :(

Ich hänge den Code an, vielleicht kann mich jemand mit seinem... Finger.

//----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------
            
   if (Equ_NEW>=Equ_OLD+EquPerc)                       // Новое эквити больше старого на процент прибыли..
   {                                         
//      ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
      ClosePosFirstProfit(NULL, -1, -1);           // Закрываем все позиции, сначала прибыльные
      DeleteOrders(NULL, -1, -1);                  // Удаляем ордера
      Equ_NEW=AccountEquity();                     // Запоминаем новое значение эквити
      Equ_OLD=Equ_NEW;                             // и вписываем его в "старое"
      CountClsEQU++;                               // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
      LockBuy51 =true;                             // Разрешаем открытие локирующих
      LockSell51=true;                             // позиций Buy и Sell
      OpnBuy51  =true;                             // и вообще разрешаем открываться
      OpnSell51 =true;                             // в любую сторону... 
   }

//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
               
   if (Equ_NEW<=Equ_OLD-EquPerc/2)                 // Новое эквити меньше старого на столько-то процентов...
      {                                         
         Trade=false;                              // Запрещаем торговлю
//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- 
        
         if (OrderSelect(TicketLoss, SELECT_BY_POS, MODE_TRADES))    // Выбираем убыточную позицию (если её тикет
            {                                                        // ранее был сохранён в TicketLoss)
               double prloss=OrderProfit()+OrderSwap();              // Размер профита убыточной позиции
               int typeloss =OrderType();                            // Тип убыточной позиции
               int mnloss   =OrderMagicNumber();                     // Magic убыточной позиции
            }
         if (OrderSelect(TicketLock, SELECT_BY_POS, MODE_TRADES))    // Выбираем локирующую позицию (если её тикет
            {                                                        // ранее был сохранён в TicketLock)
               double prlock=OrderProfit()+OrderSwap();              // Размер профита локирующей позиции
               int typelock =OrderType();                            // Тип локирующей позиции
            }
         if (prloss+prlock>=10*Point)                                // Если их суммарный профит больше 10 пунктов
            {
                ClosePositions(NULL, typelock, 5100);           // Закрываем локирующую позицию
               ClosePositions(NULL, typeloss, mnloss);         // Закрываем убыточную позицию
            }
//--------------- Поиск убыточной позиции и установка локирующей -------------------------  
       
         double Loss=0;                                        // Последнее значение убытка
         int    i, k=OrdersTotal(), OrdTicket=-1;

         for (i=k-1; i>=0; i--) {                              // Цикл по всем ордерам терминала
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
               if ((OrderProfit()+OrderSwap()<0)) {            // Если профит позиции меньше 0
                  if (Loss>OrderProfit()+OrderSwap()) {        // Если последнее значение убытка больше убытка позиции  
                     Loss=OrderProfit()+OrderSwap();           // Значит тут убыток больше, запоминаем как последнее
                     OrdTicket=i;                              // Запоминаем номер убыточной позиции
                  }
               }
            }
         }
            if (OrdTicket>=0) {
               if (OrderSelect(OrdTicket, SELECT_BY_POS, MODE_TRADES)) {   // Выбираем позицию по тикету
                  TicketLoss=OrdTicket;                                    // Запоминаем как тикет убыточной позы
                  if (OrderType()==OP_BUY)                                 // Если её тип Бай
                     {
                        Magic=5100;                                              // Задаём магик... 
                        New_Comm="Sell_M5_Стратегия_1_Локирующая позиция";       // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()*2, False, NULL);       // Увеличим лот в два раза
                        if (!ExistPositions(NULL, OP_SELL, 5100, 0)){            // Если нет локирующего Sell
                        OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*100*po,Magic,New_Comm);} // Открываем локирующий...
                        if (ExistPositions(NULL, OP_SELL, 5100, 0))              // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                        // Сохраняем тикет локирующего Sell
                     }
                  if (OrderType()==OP_SELL)
                     {
                        Magic=5100;                                              // Задаём магик... 
                        New_Comm="Buy_M5_Стратегия_1_Локирующая позиция";        // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()*2, False, NULL);       // Увеличим лот в два раза
                        if (!ExistPositions(NULL, OP_BUY, 5100, 0)){             // Если нет локирующего Buy
                        OpenPosition(NULL,OP_BUY,Lots_New,0,pa+tp*100*po,Magic,New_Comm);} // Открываем локирующий...
                        if (ExistPositions(NULL, OP_BUY, 5100, 0))               // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                        // Сохраняем тикет локирующего Buy
                     }
               }
            }
         }

Ausgehend von

//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------

...gibt es irgendwo einen Joint...

 

SEITENZAHL "666" :-)

 
Beängstigend... Juhu!!!