[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 119

 
chief2000 :
Kapalı STOP emirleri için OrderOpenTime() pozisyon açılış saatini döndürür.
STOP emrinin ne zaman verildiğini koddan öğrenmek mümkün müdür?
Teşekkür ederim!


"Kapalı duraklar" yoktur, uzak duraklar vardır...

OrderOpenTime() - ayarlanmış ve tetiklenmemiş durdurma emirleri için ayarlandığı zamanı döndürmüyor mu?

 
Roman. :

"Kapalı duraklar" yoktur, uzak duraklar vardır...

OrderOpenTime() - ayarlanmış ve tetiklenmemiş durdurma emirleri için ayarlandığı zamanı döndürmüyor mu?

Haklısın, kendimi yanlış ifade ettim.
Demek istediğim, işe yarayan ve üzerinde bir pozisyon açılan bir STOP emri verildi.
Ancak pozisyon, STOP emrinin ayarlandığı aynı çubukta veya belki bir süre sonra açılabilir.

OrderOpenTime() pozisyonun açılış zamanını gösterir, soru STOP emrinin ne zaman verildiğini nasıl öğreneceğimizdir.
Bu sefer MT4 raporunda mevcut ama koddan bunu öğrenmek mümkün mü?

 
Brokeriniz bu tür bilgileri sağlıyorsa, tetikleme (piyasaya geçiş) sırasında kapalı olan belirli bir tür, fiyat ve büyü ile bir emir arayın.
 

derlerken aşağıdaki hatayı veriyor

'&&' - koşul bir dize olamaz \00.mq4 (225, 27)

'&&' - koşul bir dize olamaz

nasıl düzeltilir ?

 
Lians :

Sevgili profesyoneller, sanal çekimler ve duraklar yerleştirmenin yanı sıra takip (ekli) için yararlı bir Uzman Danışman buldum. Ancak sanal durdurma kaybı düzgün çalışmıyor. Düzeltmeye yardım edin. Ya da iyi olan var mı?

Sayesinde.

Burada benzer bir komut dosyası sunabilirim.

Koddaki açıklama.
Dosyalar:
 

danışman tarafından derlenmiştir

 //+------------------------------------------------------------------+
//|                                                           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);
}
 

2 hata veriyor

'clOpenBuy' - değişken tanımlanmadı .mq4 (40, 49)

clOpenBuy - DEĞİŞKEN tanımlamadı

kodu mümkün olan her şekilde yeniden yazdı - bu 2 hatayı düzeltmek imkansız.

 
alex12 :

2 hata veriyor

'clOpenBuy' - değişken tanımlanmadı .mq4 (40, 49)

clOpenBuy - DEĞİŞKEN tanımlamadı

kodu mümkün olan her şekilde yeniden yazdı - bu 2 hatayı düzeltmek imkansız.



 // Внешние переменные:
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 ;
bunu yapabilirsin mesela
 
alex12 :

2 hata veriyor

'clOpenBuy' - değişken tanımlanmadı .mq4 (40, 49)

clOpenBuy - DEĞİŞKEN tanımlamadı

kodu mümkün olan her şekilde yeniden yazdı - bu 2 hatayı düzeltmek imkansız.

alex12 , seni anlamıyorum. Kod tabanında birkaç çalışmanız var ve bu tür sorular soruyorsunuz. Zaten birkaç şube onlar tarafından spam edildi.

clOpenBuy değişkeni tanımlı değil. Yani tanımlanmalıdır. Koda bakılırsa, bu, bir satın alma siparişi açmayla ilişkili renge benzer bir şeydir.

Bir değişkenin nasıl tanımlandığı tam olarak bilmeniz gereken şeydir. Birkaç farklı işlevde kullanıldığından, muhtemelen küresel olmalıdır. Peki burada da küresel olarak tanımlayın. Özellikle beri

 color clCloseBuy;

tanımladınız.