초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 52

 
ilnur17021992 :
가격 대신 가격 레이블( OBJ_ARROW_LEFT_PRICE )에 자신의 텍스트를 표시할 수 있습니까? 그렇다면 어떻게 합니까?
ObjectCreate (Name, OBJ_TEXT ,Window,aTime,aPrice);
 
안녕하세요! 누군가 H4 및 M15 차트의 가격이 일치하지 않는 이유를 설명할 수 있습니까? M15의 스크린샷에서 가격은 빨간색 선( 수직선 왼쪽)을 넘었습니다. 1분 후, H4의 스크린샷이 찍혔는데, 가격은 여전히 그것과 거리가 멀었습니다(줄 오른쪽).
그러나 그 프로그램에서 다른 DC만이 양초의 그림자를 가지고 있습니다(촛불은 맨 오른쪽에 있음)
 
Equal :
안녕하세요! 누군가 H4 및 M15 차트의 가격이 일치하지 않는 이유를 설명할 수 있습니까? M15의 스크린샷에서 가격은 빨간색 선( 수직선 왼쪽)을 넘었습니다. 1분 후, H4의 스크린샷이 찍혔는데, 가격은 여전히 그것과 거리가 멀었습니다(줄 오른쪽).
그러나 그 프로그램에서 다른 DC만이 양초의 그림자를 가지고 있습니다(촛불은 맨 오른쪽에 있음)
다른 DC의 따옴표가 다르다는 것이 당신에게 새로운 것입니까? 예, 같은 DC에서 데모와 실제가 다릅니다! 놀랐는 걸 (:
 

다음과 같이 작성하려고 합니다. IceFX DrawProfit

코드:

void start()
{
   for ( int i= 0 ;i< OrdersHistoryTotal ();i++)
   {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
      History();
   }
}
  
void History()
{
   string Ticket= IntegerToString ( OrderTicket ());
   color col=Red;
   if ( OrderType ()== 0 )col=Blue;
   datetime a= OrderOpenTime ();
   double b= OrderOpenPrice ();
   datetime c= OrderCloseTime ();
   double d= OrderClosePrice ();
   double profit= OrderProfit ();
  
   ObjectCreate (Ticket+" Open ", OBJ_ARROW , 0 ,a,b);
   ObjectSet (Ticket+" Open ", OBJPROP_COLOR ,col);
   ObjectSet (Ticket+" Open ", OBJPROP_ARROWCODE , 1 );
      
   ObjectCreate (Ticket+"Line", OBJ_TREND , 0 ,a,b,c,d);
   ObjectSet (Ticket+"Line", OBJPROP_COLOR ,col);
   ObjectSet (Ticket+"Line", OBJPROP_WIDTH , 1 );
   ObjectSet (Ticket+"Line", OBJPROP_STYLE , STYLE_DOT );
   ObjectSet (Ticket+"Line", OBJPROP_RAY , 0 );
      
   ObjectCreate (Ticket+" Close ", OBJ_ARROW , 0 ,c,d);
   ObjectSet (Ticket+" Close ", OBJPROP_COLOR ,Green);
   ObjectSet (Ticket+" Close ", OBJPROP_ARROWCODE , 3 );
      
   ObjectCreate (Ticket+"Profit", OBJ_TEXT , 0 ,c,d);
   ObjectSet (Ticket+"Profit", OBJPROP_WIDTH , 2 );
   ObjectSetText (Ticket+"Profit", DoubleToString (profit, 2 ), 10 ,"Arial",White);
   ObjectSet (Ticket+"Profit", OBJPROP_PRICE1 ,d+ Point * 5 );
   ObjectSet (Ticket+"Profit", OBJPROP_TIME1 ,c+ 10000 );      
}

모든 것이 작동하지만 현재 한 팩의 주문을 처리하는 그리드 Expert Advisor를 사용하고 결과적으로 이익이 서로 겹칩니다. 이 닫힌 팩의 이익을 합산하고 표시된 금액만 표시하고 싶습니다. 이것은 IceFX DrawProfit 표시기 에서 구현되며 지금처럼 각 주문에 대해 별도로 구현되지 않습니다. 알아낼 수 있도록 도와주세요 :)


파일:
 
Vitalie Postolache :
다른 DC의 따옴표가 다르다는 것이 당신에게 새로운 것입니까? 예, 같은 DC에서 데모와 실제가 다릅니다! 놀랐는 걸 (:
또 다른 놀라움. 결국 이것은 하나의 동일한 실제 계정 이며 다른 기간으로 전환하면 가격이 변경됩니다(일치하지 않음).
다른 DC에서도 실제 계정으로 일정을 변경할 때 모든 것이 OK입니다! 다른 가격이 다르다는 사실은 이해할 수 있지만, 한 번에 두 개의 가격이 있고 분 동안 시계에 있는 하나가 다르다(훨씬 다릅니다). 이런 식으로 해서는 안 된다는 것을 이해하지만 문제는 어디에 있을 수 있습니다. 그건 그렇고, 촛불은 다음 촛불이 열린 지 약 1 시간 후에 "수정"되었습니다.
 
ilnur17021992 :

다음과 같이 작성하려고 합니다. IceFX DrawProfit

코드:

void start()
{
   for ( int i= 0 ;i< OrdersHistoryTotal ();i++)
   {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol ()== Symbol () && OrderType ()<= 1 )
      History();
   }
}
  
void History()
{
   string Ticket= IntegerToString ( OrderTicket ());
   color col=Red;
   if ( OrderType ()== 0 )col=Blue;
   datetime a= OrderOpenTime ();
   double b= OrderOpenPrice ();
   datetime c= OrderCloseTime ();
   double d= OrderClosePrice ();
   double profit= OrderProfit ();
  
   ObjectCreate (Ticket+" Open ", OBJ_ARROW , 0 ,a,b);
   ObjectSet (Ticket+" Open ", OBJPROP_COLOR ,col);
   ObjectSet (Ticket+" Open ", OBJPROP_ARROWCODE , 1 );
      
   ObjectCreate (Ticket+"Line", OBJ_TREND , 0 ,a,b,c,d);
   ObjectSet (Ticket+"Line", OBJPROP_COLOR ,col);
   ObjectSet (Ticket+"Line", OBJPROP_WIDTH , 1 );
   ObjectSet (Ticket+"Line", OBJPROP_STYLE , STYLE_DOT );
   ObjectSet (Ticket+"Line", OBJPROP_RAY , 0 );
      
   ObjectCreate (Ticket+" Close ", OBJ_ARROW , 0 ,c,d);
   ObjectSet (Ticket+" Close ", OBJPROP_COLOR ,Green);
   ObjectSet (Ticket+" Close ", OBJPROP_ARROWCODE , 3 );
      
   ObjectCreate (Ticket+"Profit", OBJ_TEXT , 0 ,c,d);
   ObjectSet (Ticket+"Profit", OBJPROP_WIDTH , 2 );
   ObjectSetText (Ticket+"Profit", DoubleToString (profit, 2 ), 10 ,"Arial",White);
   ObjectSet (Ticket+"Profit", OBJPROP_PRICE1 ,d+ Point * 5 );
   ObjectSet (Ticket+"Profit", OBJPROP_TIME1 ,c+ 10000 );      
}

모든 것이 작동하지만 현재 한 팩의 주문을 처리하는 그리드 Expert Advisor를 사용하고 결과적으로 이익이 서로 겹칩니다. 이 닫힌 팩의 이익을 합산하고 표시된 금액만 표시하고 싶습니다. 이것은 IceFX DrawProfit 표시기 에서 구현되며 지금처럼 각 주문에 대해 별도로 구현되지 않습니다. 알아낼 수 있도록 도와주세요 :)


이익은 별도의 주기로 계산됩니다.
 
Alekseu Fedotov :
이익은 별도의 주기로 계산됩니다.
즉? 특정 주문이 그룹이고 그 이익을 합산해야 하는지 확인하는 방법은 무엇입니까?
 
ilnur17021992 :
즉? 특정 주문이 그룹이고 그 이익을 합산해야 하는지 확인하는 방법은 무엇입니까?
그리고 그들은 어떤 방식으로 기능을 통해 그룹에 의해 닫히거나 어떻게 든 다르게 닫힙니다.
 
Vitaly Muzichenko :
그리고 그들은 어떤 방식으로 기능을 통해 그룹에 의해 닫히거나 어떻게 든 다르게 닫힙니다.
그리드 로봇에 의해 주문이 열리며 전체 그룹에 대해 하나의 공통 TP를 계산하고 배치하며 이에 따라 주문이 마감됩니다.


첨부된 스크린샷:
 
ilnur17021992 :
그리드 로봇에 의해 주문이 열리며 전체 그룹에 대해 하나의 공통 TP를 계산하고 배치하며 이에 따라 주문이 마감됩니다.

첨부된 스크린샷:

다음과 같이 다소:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TotalPos=- 1 ;
void OnTick ()
{
 // остальной код

//--
   if ( OrdersTotal ()!=TotalPos) {  // не мучаем каждый тик
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
      History();

      ...
     }
  }}} TotalPos= OrdersTotal ();  // запомним количество

//--
}

//+------------------------------------------------------------------+
//| Create Object istory                                             |
//+------------------------------------------------------------------+
void History() {
   string Ticket=( string ) OrderTicket ();
   color col=Red;
   if ( OrderType ()== 0 )col=Blue;
   datetime a= OrderOpenTime ();
   double b= OrderOpenPrice ();
   datetime c= OrderCloseTime ();
   double d= OrderClosePrice ();
   double prSep= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
   double prAll= 0 ;
   int     cn= 0 ;
   string hTicket;
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
       datetime ct= OrderCloseTime ();
       // 60 секунд разницы между закрытием первой и последней в сетке
       if (c<=ct+ 60 && c>=ct- 60 ) {
        prAll+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
        hTicket=( string ) OrderTicket ();
        cn++;
      }
   }}}
   ObjectCreate (Ticket+ "Open" , OBJ_ARROW , 0 ,a,b);
   ObjectSet (Ticket+ "Open" , OBJPROP_COLOR ,col);
   ObjectSet (Ticket+ "Open" , OBJPROP_ARROWCODE , 1 );
      
   ObjectCreate (Ticket+ "Line" , OBJ_TREND , 0 ,a,b,c,d);
   ObjectSet (Ticket+ "Line" , OBJPROP_COLOR ,col);
   ObjectSet (Ticket+ "Line" , OBJPROP_WIDTH , 1 );
   ObjectSet (Ticket+ "Line" , OBJPROP_STYLE , STYLE_DOT );
   ObjectSet (Ticket+ "Line" , OBJPROP_RAY , 0 );
      
   ObjectCreate (Ticket+ "Close" , OBJ_ARROW , 0 ,c,d);
   ObjectSet (Ticket+ "Close" , OBJPROP_COLOR ,Green);
   ObjectSet (Ticket+ "Close" , OBJPROP_ARROWCODE , 3 );
  
   Ticket=cn> 1 ?hTicket:Ticket;
   ObjectCreate (Ticket+ "Profit" , OBJ_TEXT , 0 ,c,d);
   ObjectSet (Ticket+ "Profit" , OBJPROP_ANCHOR , 0 );
   ObjectSetText (Ticket+ "Profit" , DoubleToString (prAll, 2 ), 10 , "Arial" , /*White*/ clrBlack );
   ObjectSet (Ticket+ "Profit" , OBJPROP_PRICE1 ,d);
   ObjectSet (Ticket+ "Profit" , OBJPROP_TIME1 ,c+ Period ()* 60 * 2 );
}