[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 119

 
chief2000 :
마감된 STOP 주문의 경우 OrderOpenTime()은 포지션 개시 시간을 반환합니다.
STOP 주문한 시간을 코드에서 알 수 있습니까?
고맙습니다!


"닫힌 정류장"과 같은 것은 없으며 원격 정류장이 있습니다 ...

OrderOpenTime() - 설정되고 트리거되지 않은 중지 주문의 경우 설정된 시간을 반환하지 않습니까?

 
Roman. :

"닫힌 정류장"과 같은 것은 없으며 원격 정류장이 있습니다 ...

OrderOpenTime() - 설정되고 트리거되지 않은 중지 주문의 경우 설정된 시간을 반환하지 않습니까?

맞아요 제가 표현을 잘못했네요.
나는 STOP 주문이 설정되어 작동하고 이에 대한 포지션이 열렸음을 의미했습니다.
그러나 포지션은 STOP 주문이 설정된 동일한 바에서 열릴 수 있습니다.

OrderOpenTime()은 포지션 개시 시간 을 보여주고, 질문은 STOP 주문이 접수된 시간을 찾는 방법입니다.
이번에는 MT4 리포트에서 확인이 가능한데 코드에서 알 수 있을까요?

 
중개인이 이러한 정보를 제공하는 경우 트리거(시장으로의 전환) 시점에 마감된 특정 유형, 가격 및 마법의 주문을 찾습니다.
 

컴파일 할 때 다음 오류가 발생합니다.

'&&' - 조건은 문자열 \00.mq4(225, 27)일 수 없습니다.

'&&' - 조건은 문자열일 수 없습니다.

어떻게 고치는 지 ?

 
Lians :

친애하는 전문가 여러분, 가상 테이크 및 스톱과 후행(첨부)을 배치하는 데 유용한 Expert Advisor를 찾았습니다. 그러나 가상 손절매는 제대로 작동하지 않습니다. 수정을 도와주세요. 아니면 좋은 사람이 있습니까?

덕분에.

여기에서 비슷한 스크립트를 제공할 수 있습니다.

코드의 설명.
파일:
 

고문에 의해 편집

 //+------------------------------------------------------------------+
//|                                                           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개의 오류를 제공합니다.

'clOpenBuy' - 정의되지 않은 변수 .mq4(40, 49)

clOpenBuy - VARIABLE이 정의하지 않았습니다.

가능한 모든 방법으로 코드를 다시 작성하십시오. 이 두 가지 오류를 수정하는 것은 불가능합니다.

 
alex12 :

2개의 오류를 제공합니다.

'clOpenBuy' - 정의되지 않은 변수 .mq4(40, 49)

clOpenBuy - VARIABLE이 정의하지 않았습니다.

가능한 모든 방법으로 코드를 다시 작성하십시오. 이 두 가지 오류를 수정하는 것은 불가능합니다.



 // Внешние переменные:
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 ;
예를 들어 이렇게 할 수 있습니다.
 
alex12 :

2개의 오류를 제공합니다.

'clOpenBuy' - 정의되지 않은 변수 .mq4(40, 49)

clOpenBuy - VARIABLE이 정의하지 않았습니다.

가능한 모든 방법으로 코드를 다시 작성하십시오. 이 두 가지 오류를 수정하는 것은 불가능합니다.

alex12 , 나는 당신을 이해하지 못합니다. 코드 베이스에 여러 작업이 있고 이러한 질문을 합니다. 이미 여러 지점이 스팸 메일을 받았습니다.

clOpenBuy 변수가 정의되지 않았습니다. 따라서 정의해야 합니다. 코드로 판단하면 이것은 구매 주문 을 여는 것과 관련된 색상과 비슷합니다.

변수가 어떻게 정의되는지 확실히 알아야 합니다. 여러 다른 기능에서 사용되기 때문에 아마도 전역이어야 합니다. 여기에서도 글로벌로 정의합니다. 특히 이후

 color clCloseBuy;

당신은 정의했습니다.

사유: