[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 117

 
chief2000:
Bei geschlossenen Stop-Aufträgen gibt OrderOpenTime() die Zeit zurück, zu der die Position eröffnet wurde.
Ist es möglich, aus dem Code den Zeitpunkt herauszufinden, zu dem der STOP-Befehl gesetzt wurde?
Ich danke Ihnen!


Es gibt keine geschlossene Haltestelle, es gibt eine entfernte...

Gibt OrderOpenTime() - für gesetzte und nicht ausgelöste Stopps - nicht die Setzzeit zurück?

 
Roman.:

Es gibt keine geschlossene Haltestelle, es gibt eine entfernte...

Gibt OrderOpenTime() - für einen gesetzten und nicht ausgelösten Stopp - nicht den Zeitpunkt seiner Einstellung zurück?

Sie haben Recht, ich war nicht genau.
Ich meinte, dass wir eine STOP-Order gesetzt haben, die ausgelöst und eine Position darauf eröffnet wurde.
Die Position kann jedoch im selben Takt eröffnet werden, in dem die STOP-Order gesetzt wurde, oder sie kann einige Zeit später eröffnet werden.

Die OrderOpenTime() zeigt die Zeit an, zu der die Position eröffnet wurde. Meine Frage ist, woher wir wissen, wann die Stop-Order gesetzt wurde?
Der MT4-Bericht hat diese Zeit, aber ist es möglich, sie aus dem Code herauszufinden?

 
Wenn Ihr Broker diese Informationen zur Verfügung stellt, dann suchen Sie nach einem Auftrag mit einem bestimmten Typ, Preis und Magier, der zum Zeitpunkt der Auslösung geschlossen ist (zum Markt geht)
 

Beim Kompilieren erhalte ich folgenden Fehler

'&&' - Bedingung kann nicht eine Zeichenkette sein \00.mq4 (225, 27)

'&&' - Bedingung kann keine Zeichenkette sein

Wie kann man das beheben?

 
Lians:

Liebe Fachleute, ich habe einen nützlichen Expert Advisor zum Setzen von virtuellen Take- und Stop- und Trailing-Stops gefunden (im Anhang). Aber der virtuelle Stop Loss funktioniert nicht richtig. Bitte helfen Sie mir, dies zu korrigieren. Oder hat vielleicht jemand ein gutes Analogon?

Ich möchte meinen Dank aussprechen.

Hier ist ein ähnlicher SCRIPT.

Beschreibung im Code.
Dateien:
 

wurde von einem Berater zusammengestellt

//+------------------------------------------------------------------+
//|                                                           00.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//+------------------------------------------------------------------+

color clModifyBuy;
color clCloseBuy;

// Внешние переменные:
extern double ll =1;
extern int tp = 0;
extern int sl = 0;
extern int mn = 777;
extern int Slippage = 3; 
extern int    NumberOfTry = 5;  
//-------------------------------------------------------------------+
//|  Описание : Установка ордера. Версия функции для тестов на истории.
//|  Выставления отложенных ордеров на покупку    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color clOpen;
  int   err, ticket;
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy;
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//+----------------------------------------------------------------------------+
//|  Описание: Закрытие одной предварительно выбранной позиции     
//|  Закрывает отложенный ордера на покупку.         |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  double pp;

  if (OrderType()==2) {
    pp=MarketInfo(OrderSymbol(), MODE_BID);
    OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseBuy);
  }
  if (OrderType()==4) {
    pp=MarketInfo(OrderSymbol(), MODE_BID);
    OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseBuy);
     
  }
}


//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);
}
//|  Описание : Возвращает цену TakeProfit последней открытой позиций или -1.  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double TakeProfitLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=-1;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
//|  Описание : Возвращает цену TakeProfit последней закрытой позиций или -1.  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double TakeProfitLastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=-1;
  int      i, 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();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
//|  Описание : Открытие позиции. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color  clOpen;
  double pp;
  int    err, ticket;
 
  if (sy=="") sy=Symbol();
  if (op==OP_BUY) {
    pp=MarketInfo(sy, MODE_ASK); clOpen=clOpenBuy;
  } 
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, 0, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") open ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm;
  color  cl=IIFc(OrderType()==OP_BUY
              || OrderType()==OP_BUYLIMIT
              || OrderType()==OP_BUYSTOP, clModifyBuy);
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;

  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);

  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
      if (fm)  else {
        er=GetLastError();
        
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
//|  Описание : Рассчитывает количество ордеров по типам.                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mo - массив количества ордеров по типам                                 |
//|    mn - MagicNumber                          (-1 - любой магик)            |
//+----------------------------------------------------------------------------+
void CountOrders(int& mo[], int mn=-1) {
  int i, k=OrdersTotal();

  if (ArraySize(mo)!=6) ArrayResize(mo, 6);
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (mn<0 || OrderMagicNumber()==mn) mo[OrderType()]++;
    }
  }
}
//+----------------------------------------------------------------------------+
// Удаление ордеров. Версия функции для тестов на истории.  

//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP ) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket());
          }
        }
      }
    }
  }
}
//==============================================================================
// --------------------------- Графические функции ----------------------------+
//==============================================================================
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
 

Gibt 2 Fehler aus

clOpenBuy' - Variable nicht definiert .mq4 (40, 49)

clOpenBuy - Variable nicht definiert

Ich habe den Code immer wieder umgeschrieben - diese 2 Fehler lassen sich nicht beheben.

 
alex12:

Gibt 2 Fehler aus

clOpenBuy' - Variable nicht definiert .mq4 (40, 49)

clOpenBuy - Variable nicht definiert

Ich habe den Code immer wieder umgeschrieben - diese 2 Fehler lassen sich nicht beheben.



// Внешние переменные:
extern double ll =1;
extern int tp = 0;
extern int sl = 0;
extern int mn = 777;
extern int Slippage = 3; 
extern int    NumberOfTry = 5;  

color clOpenBuy=Red;
Sie könnten zum Beispiel so vorgehen
 
alex12:

Gibt 2 Fehler aus

clOpenBuy' - Variable nicht definiert .mq4 (40, 49)

clOpenBuy - Variable nicht definiert

Ich habe den Code erneut geschrieben, und es gelingt mir nicht, diese 2 Fehler zu korrigieren.

alex12, ich verstehe dich nicht. Sie haben ein paar Jobs in kodobase und stellen solche Fragen. Sie haben sich bereits mit mehreren Themen befasst.

Die Variable clOpenBuy ist nicht definiert. Sie muss also definiert werden. Dem Code nach zu urteilen, handelt es sich um eine ähnliche Farbe wie bei der Eröffnung eines Kaufauftrags.

Wie die Variable definiert ist, sollten Sie genau wissen. Da sie in verschiedenen Funktionen verwendet wird, sollte sie wahrscheinlich global sein. Definieren Sie sie also als global. Und das umso mehr, als

color clCloseBuy;

Sie haben es definiert.