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

 

itum:

Wie lässt sich dieses Problem lösen? Ga

Führen Sie das Konditionshandling nur einmal zu Beginn des Taktes durch.

Alternativ können Sie ein Flag setzen, das gesetzt wird, wenn ein Auftrag erteilt wird, und zurückgesetzt wird, wenn sich die Bedingungen wesentlich geändert haben.

 

Уважаемые програмисты.

Bitte sagen Sie mir, was ich in den Code einfügen soll (und wo ich es einfügen soll, wenn möglich), damit der EA eine Position mit dem vorherigen Lot multipliziert mit 2 öffnet, wenn der vorherige Handel verloren war.

Ich danke Ihnen vielmals.

Ich möchte Ihnen nur eine Frage stellen: Was sollte ich tun, wenn ich eine Stelle eröffnen möchte?

 
Suchen Sie nach EAs mit dem Codenamen Martingale.
 

Roger:
Ищите советники с кодовым названием Мартингейл.

Ich habe nach einem gesucht, aber es funktioniert bei mir nicht.

Ich habe eine gefunden, die eine Menge verdoppeln sollte, wenn ein vorheriger Handel verloren wurde, aber sie will nicht funktionieren.


 
Das bedeutet wahrscheinlich, dass Sie, wenn Ihnen hier Code angeboten wird, diesen nicht selbst in Ihren EA einbauen können, oder?
 
Roger:
Das bedeutet wahrscheinlich, dass Sie, wenn Ihnen hier Code angeboten wird, diesen nicht selbst in Ihren EA einfügen können, oder?

Nein, es bedeutet, dass der EA nicht funktioniert, und ich kann keinen funktionierenden EA mit dem benötigten Code finden.
 

Sehen Sie sich das an, https://www.mql5.com/ru/forum/104481

 
cyclik33:

Nein, es bedeutet, dass der EA nicht funktioniert, und ich kann keinen funktionierenden EA mit dem benötigten Code finden.

Legen Sie in den globalen Variablen den Anfangswert für die Partie fest:

extern double Lot = 0.1

Dort weisen wir diesen Wert der Variablen zu, die den Wert des Loses an die Positionseröffnungsfunktion weitergibt:

double Lots_New = Lot;
Nachdem wir die Position geschlossen haben, überprüfen wir sie auf Gewinn/Verlust:
if (isLossLastPos(NULL, -1, Magic))
   Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, Magic))
   Lots_New = Lot;

Und die Funktion selbst, dank Igor Kim...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}
 

cyclik33:

Liebe Programmierer.
Bitte raten Sie mir, was ich in den Code einfügen soll (und wo ich es einfügen soll, wenn möglich), damit der EA eine Position mit dem vorherigen Lot multipliziert mit 2 öffnet, wenn der vorherige Handel verloren war.
Ich danke Ihnen im Voraus.
Boris.

Boris, das ist gar nicht so schwer. Hier ist eine einfache Funktion, die das Martingal-Prinzip umsetzt:

//+------------------------------------------------------------------+
double getMartinLot(double lot, double x){         //ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
   }else{
      save_Lot *= x;                               //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ НА Х РАЗ
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+

Übergeben Sie das Ausgangsvolumen(double lot) und den Schritt(double x) als Parameter.
Fügen Sie die Methode direkt in OrderSend anstelle des Volumenparameters ein.

Beispiel für einen Funktionsaufruf:

if(OrdersTotal() == 0){
   OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, 2), Ask, 10, Bid-25*Point, Bid+25*Point);
}
 
Kennt jemand einen Indikator, der mehrere aktuelle ZigZag-Extrema liefert?