포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 122

 
skyjet :

안녕하세요! 이 기능에서 오류를 찾고 있습니다.

이론상, 아직 열지 않은 보류 중인 주문은 접수된 지 이틀 후에 삭제되어야 합니다.

최소=1440;

 if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {   if (OrderSymbol()!= Symbol ()) continue ;
         if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
         {   if ( TimeCurrent ()-OrderOpenTime()>=min)
            {  OrderDelete(OrderTicket());
               return ;
         }  }
}  }  }
 
skyjet :

안녕하세요! 이 기능에서 오류를 찾고 있습니다.

이론상, 아직 열지 않은 보류 중인 주문은 접수된 지 이틀 후에 삭제되어야 합니다.

최소 = 1440;


보류 중인 주문을 추적하고 삭제하는 이유는 무엇입니까? 날짜/시간 만료=TimeCurrent()+min*60+sec; 설정 후 min*60+sec 후에 자체적으로 제거됩니다.
 
Sepulca :

보류 중인 주문을 추적하고 삭제하는 이유는 무엇입니까? 날짜/시간 만료=TimeCurrent()+min*60+sec; 설정 후 min*60+sec 후에 자체적으로 제거됩니다.
예를 들어 어떤 알고리즘 에 따라 보류 중인 주문 을 마감하고 한 조건에서 하루 만에 마감할 수 있습니다. 2일.
 
Sepulca paladin80 감사합니다! datetime 만료는 당신이 필요로하는 것입니다 :)
 

paladin80 :

OrderOpenTime()은 주문 시작 시간을 반환합니다.

보류 중인 주문 의 경우 이 함수는 0을 반환합니다.

 
PapaYozh :

OrderOpenTime()은 주문 시작 시간을 반환합니다.

보류 중인 주문의 경우 이 함수는 0을 반환합니다.

흠, 기능 자체를 확인하지 않고 빠르게 코드를 수정했습니다. 정확히는 OrderOpenTime()은 브로커가 보류 중인 주문 을 수락한 시간이 아니라 브로커가 포지션을 오픈한 시간을 보여줍니다. 저것들. 주문의 마감 시간을 바로 표시하거나 주문을 보내는 시간을 매직 넘버로 기록하고(어쨌든 사용하지 않는 경우) TimeCurrent()와 OrderMagicNumber()를 비교하는 것이 좋습니다.
 

안녕하세요. 사용자 지정 표시기를 도와주세요.

추세선까지의 거리를 결정하는 문제를 해결합니다. 추세선까지의 거리를 구체적 으로 플롯한 시간에 구해야 합니다(터미널에서 열려 있는 시간에 관계없이). ObjectGetValueByShift 함수를 사용하여 추세선의 현재 값을 얻습니다. 오픈 시간에만 계산이 가능하기 때문에 작은 지표를 작성했습니다. iCustom 함수에 timeframe 매개변수가 있다는 사실에 매료되었지만 표시기를 호출 할 때 이 매개변수를 어떻게 고려하는지가 문제입니다.

지표는 다음과 같습니다.


 #property indicator_chart_window
#property indicator_buffers 1
//--------------------------------------------------------------------   
extern string TL_name = "TL_1" ;
//--------------------------------------------------------------------   
double valueBuf[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
   //---- indicators
   SetIndexBuffer ( 0 ,valueBuf);
   SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 1 , White);
   //----
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   //----
   //----
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int i;
   int     counted_bars = IndicatorCounted();
   //----
   i = Bars - counted_bars - 1 ;           // Индекс первого непосчитанного
   
   // Цикл по непосчитанным барам
   while (i>= 0 ) {
      valueBuf[i] = NormalizeDouble (ObjectGetValueByShift(TL_name,i), Digits );
      i--;
   }     
   //----
   return ( 0 );
}

표시기는 현재 값을 추세 값으로 간주합니다.
나는 지표를 다음과 같이 부른다.

TL_price_now = iCustom ( NULL , PERIOD_D1 , "TL_value" ,TL_name, 0 , 0 );

여기에서 예를 들어 PERIOD_D1 시간은 추세선이 그려지고 거리가 계산되어야 하는 매개변수로 표시기에 전달됩니다.

추세선까지의 거리를 간단히 계산합니다.

dist = NormalizeDouble (TL_price_now - Bid, Digits );
모든 것이 그런 것 같지만 그렇지 않습니다. 다른 절반(D1 제외)으로 전환할 때 표시기는 다른 값을 반환합니다(전환하는 절반에 해당).
여기서 질문이 생깁니다. iCustom 함수를 호출할 때 기간이 어느 정도 고려됩니까?
아니면 내가 지표에 너무 영리한 걸까요?
 
pako :


t = 주문 총계 ();

왜 계산???? 계획된???


그래서 참조 값을 전달하기 위해 이렇게 했습니다. 논리는 간단합니다!
 
artmedia70 :

내 버전에서는 기능이 더 짧을 것입니다 ... :)



네, 그런데 이 정렬이 구현에 더 적합합니다. 수반되는 기능이 시작될 때 전류가 더 많은 공간을 차지하기 시작했습니다. 다음과 같이 밝혀졌습니다.

 void FindOrders( int & massive[])
{
   int oType;
   ArrayInitialize (massiveOfOrders, 0 );
   for ( int i= OrdersTotal () - 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
      
      oType = OrderType();
      massiveOfOrders[oType] = massiveOfOrders[oType] + 1 ;
   }
}

 int start()
{
   int i, oTotal = 0 , oPending = 0 ;
   
   FindOrders(massiveOfOrders);
   
   for (i= 0 ; i<= 7 ; i++)
   {
       if (i > 1 && i < 6 )
       {
           oPending += massiveOfOrders[i];
       }
       if (i < 6 )
       {
          oTotal += massiveOfOrders[i];
       }
   }
   pr ( "FindOrders(): " + "oTotal = " + oTotal);
   pr ( "FindOrders(): " + "oPending = " + oPending);

최적화할 부분이 없는 것 같죠?

처음에는 전혀 없을 때 훨씬 더 편리하다는 뜻입니다. 그리고 모든 것은 순전히 함수에 의해 호출됩니다. 그리고 마지막으로 처음에는 주요 기능에 많은 종류의 파생물이 있었고 추가 기능을 검색한다는 것이 밝혀졌습니다 ...

[Deleted]  

안녕하세요!

고문이 일을 하지 않는 이유를 설명하고 도와주십시오.