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

 

많은 오류를 제공합니다


 

죄송합니다, alex12 , 하지만 당신은 코더처럼 보입니다(모욕적이지 않습니다. 허용되는 용어입니다). 다른 부분으로 무언가를 구성하고 어떻게든 컴파일을 달성하지만 코드의 의미를 이해하지 못합니다.

고용 서비스에 문의하십시오.

 
alex12 :

많은 오류를 제공합니다


Igor Kim의 기능 중 일부를 사용하여 컴파일러가 알려주는 코드에 없는 기능을 사용할 수 있도록 하십시오. 그의 브랜치에서 찾아서 코드에 작성하십시오.
 
chief2000 :
...

OrderOpenTime()은 포지션 오픈 시간을 보여줍니다. 문제는 STOP 주문이 이루어진 시간을 찾는 방법입니다.
이번에는 MT4 리포트에서 확인이 가능한데 코드에서 알 수 있을까요?


다시.

모든 중지 주문 을 통해 "표준" 주기를 진행하고 동시에 해당 주문에 대한 OrderOpenTime() 값을 인쇄하십시오. 이것은 각각의 주문이 설정된 시간이어야 합니다. 나는 시장 주문에 대한 예를 제공합니다 - 당신은 그것을 약간 수정할 수 있습니다. 또는이 줄을 제거하십시오.

if ((orderType != OP_BUY) && (orderType != OP_SELL)) 계속;

또는 관심있는 정류장의 데이터로 바꾸십시오 ...

 int orderCount = 0 ; // сбрасываем счетчик ордеров 
       // ------------------------------------------------Считаем только наши ордера---------------------------
   int orderType;
   for (orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ; // если ордер не выбран, то идем на следующий открытый
       if ( OrderCloseTime ()!= 0 ) continue ;                           // если тикет принадлежит закрытому ордеру, то берем следующий открытый
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != magic))   continue ;
      orderType = OrderType ();
       if ((orderType != OP_BUY) && (orderType != OP_SELL))   continue ;
          ticket = OrderTicket ( );                         // Номер ордера
          orderLots = OrderLots ();                         // Lots   
          orderProfit = OrderProfit () + OrderSwap ();       // Profit
          Price = OrderOpenPrice ();                         // Цена открытия рыночного ордера
          SL =   OrderStopLoss ();                           // Значение StopLoss ордера
          TP = OrderTakeProfit ();                           // Значение TakeProfit ордера 
          Time = O rderOpenTime();
         
                     
         
      orderCount++;                     // считаем ордера (не больше i)           

    }   
 
Roman. :


다시.
모든 중지 주문을 통해 "표준" 주기를 진행하고 동시에 해당 주문에 대한 OrderOpenTime() 값을 인쇄합니다. 이것은 각각의 주문이 설정된 시간이어야 합니다. 나는 시장 주문에 대한 예를 제공합니다 - 당신은 그것을 약간 수정할 수 있습니다. 또는이 줄을 제거하십시오.

if ((orderType != OP_BUY) && (orderType != OP_SELL)) 계속;

또는 관심있는 정류장의 데이터로 바꾸십시오 ...

이 단계에서 저는 딜레마에 빠졌습니다. 일부 "통계"에 대해 STOP 주문을 열 시간이 필요하며 이 프로세스가 항상 시작되는 것이 아니라 특정 최종 단계에서만 시작되기를 바랍니다. 이러한 이유로 현재 열려 있지 않은 주문(OrdersTotal())을 정렬하고 이미 마감된 주문 => OrdersHistoryTotal() 중에서 검색해야 합니다.
그러나 이미 마감된 STOP 주문의 경우 OrderOpenTime()은 주문이 접수된 시간이 아니라 포지션 개시 시간 을 반환합니다.
결국, 모든 것이 요약됩니다. OrdersHistoryTotal() 목록에서 STOP 주문이 설정된 시간을 추출할 수 있습니까?
 
chief2000 :
이 단계에서 저는 딜레마에 빠졌습니다. 일부 "통계"에 대해 STOP 주문을 열 시간이 필요하며 이 프로세스가 항상 시작되는 것이 아니라 특정 최종 단계에서만 시작되기를 바랍니다. 이러한 이유로 현재 열려 있지 않은 주문(OrdersTotal())을 정렬하고 이미 마감된 주문 => OrdersHistoryTotal() 중에서 검색해야 합니다.
그러나 이미 마감된 STOP 주문의 경우 OrderOpenTime()은 주문이 접수된 시간이 아니라 포지션이 열린 시간을 반환합니다.
결국, 모든 것이 요약됩니다. OrdersHistoryTotal() 목록에서 STOP 주문이 설정된 시간을 추출할 수 있습니까?

예... 문제... HZ. 특히 "최종 단계"에서 불가능한 것 같습니다 ...

이 프로세스를 지속적으로 모니터링하고 추적해야 합니다. 이전 페이지의 FAQ 게시물을 참조하세요. 페이지.

 
Roman. :

예... 문제... HZ. 특히 "최종 단계"에서 불가능한 것 같습니다 ...

이 프로세스를 지속적으로 모니터링하고 추적해야 합니다. 이전 페이지의 FAQ 게시물을 참조하세요. 페이지.

다른 솔루션이 없으면 OrdersTotal() 의 주문을 사용합니다.
어쨌든 감사합니다!
 
이 경우, 파일에 쓰기가 더 쉽고, 쓰레기가 적고, 통계가 터미널이 아닌 필요에 따라 구성될 수 있습니다.
 
FAQ :
이 경우, 파일에 쓰기가 더 쉽고, 쓰레기가 적고, 통계가 터미널이 아닌 필요에 따라 구성될 수 있습니다.
고맙습니다!
 

Tweezers 패턴에 대한 Expert Advisor를 작성하고 싶습니다.

개봉 조건으로 선정

Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )]    
High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )]     

if (Low[ 1 ]==Low2) bull_pincet=true;
if (High[ 1 ]==High2) bear_pincet=true;

   while (true)
      {
       
       if (Total== 0 && bull_pincet==true )
        {
         sl=Low[ 1 ];
         if (sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend (Symb,OP_BUY,Lts,Ask, 3 ,sl,tp);
         return ;
        }

         if (Total== 0 && bear_pincet==true )
         {
          sl=High[ 1 ];
           if (sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
           OrderSend (Symb,OP_SELL,Lts,Bid, 3 ,sl,tp);
           return ;
         }
       break ;
      }   

유감스럽게도 'sl'이 100.00000의 가격으로 설정되고 'tp'가 일반적으로 오류를 표시하기 때문에 조건이 올바르지 않은 것으로 판명되었습니다.

1틱을 고려하여 조건을 추가하기로 결정했습니다.

 static datetime TimeSaveH1  = 0 ;
int init()
{
     TimeSaveH1  = iTime ( Symbol (), Period (), 0 ); // берем открытия время текущего бара
}

int start()
{
         if (TimeSaveH1!= iTime ( Symbol (), Period (), 0 ))
            {
               TimeSaveH1= iTime ( Symbol (), Period (), 0 ); 
            }  

Low2=Low[ iLowest ( NULL , 0 ,MODE_LOW, 10 , 2 )]    
High2=High[ iHighest ( NULL , 0 ,MODE_HIGH, 10 , 2 )]     

if (Low[ 1 ]==Low2 && TimeSaveH1=== iTime ( Symbol (), Period (), 0 ) bull_pincet=true;
if (High[ 1 ]==High2 && TimeSaveH1=== iTime ( Symbol (), Period (), 0) bear_pincet=true;
   while (true)
      {
       
       if (Total== 0 && bull_pincet==true )
        {
         sl=Low[ 1 ];
         if (sl<Step)sl=Step;
         tp=Ask+((Ask-sl)*k);
                  
         OrderSend (Symb,OP_BUY,Lts,Ask, 3 ,sl,tp);
         return ;
        }

         if (Total== 0 && bear_pincet==true )
         {
          sl=High[ 1 ];
           if (sl<Step)sl=Step;
          tp=Bid-((sl-Bid)*k);
           OrderSend (Symb,OP_SELL,Lts,Bid, 3 ,sl,tp);
           return ;
         }
       break ;
      }   




}

결과는 동일합니다. 내 문제를 해결하는 방법?