MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1598

 
Maxim Kuznetsov :

추가로, 터미널이 충분한 기록을 가지고 있고 렌더링할 것이라는 보장은 없습니다.

위의 예에는 역사에 대한 언급이 없습니다.

따라서 OrderSelect()의 결과가 true이면 보장됩니다.

UPD: OrderSelect 는 4-ke에서 매우 잘 작동합니다. 한 번 테스트했습니다. 시장 주문의 경우 주문 속성에 액세스하는 시간 .... 정말 초당 수백만 번, 검색하고 싶지 않습니다. 논쟁하고 있었던 것 같습니다. 중재자 Artem과 함께하지만 여기에서 "모든 펠트 펜의 맛이 다릅니다"라고 말했듯이 원하는 경우 유지하십시오.

 

안녕하세요, 각 거래에 대한 드로다운 데이터가 필요합니다.

누군가가 그러한 통계를 수집하고 보고서로 출력하는 스크립트를 만났을까요?

고맙습니다

 
законопослушный гражданин :

안녕하세요, 각 거래에 대한 드로다운 데이터가 필요합니다.

누군가 그러한 통계를 수집하고 보고서로 출력하는 스크립트를 만났을까요?

고맙습니다

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

"손으로" 작성, 확인되지 않음, 오류가 가득 :-) 필요에 맞게 조정하고 사용하십시오.

 
Maxim Kuznetsov :

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

"손으로" 작성, 확인되지 않음, 오류가 가득 :-) 필요에 맞게 조정하고 사용하십시오.

고마워, 나는 그것을 알아 내려고 노력할 것이다!

 
@Igor Makanu , 터미널에서의 주문 정렬에 대한 답변에 감사드립니다. 아마도 구조체의 배열로 저장하고 직접 정렬할 것입니다. 의심은 주로 모든 틱에서 수행되는 그러한 작업이 성능에 눈에 띄게 부정적인 영향을 미칠까 두려워했기 때문입니다.
 
Janis Ozols :
@Igor Makanu , 터미널에서의 주문 정렬에 대한 답변에 감사드립니다. 아마도 구조체의 배열로 저장하고 직접 정렬할 것입니다. 의심은 주로 모든 틱에서 수행되는 그러한 작업이 성능에 눈에 띄게 부정적인 영향을 미칠까 두려워했기 때문입니다.

그렇다면 왜 매 틱마다 정렬할까요? 레코드 수를 변경하거나 목록을 완전히 변경할 때만 충분합니다 ...

 
안녕하세요. 네비게이터에서 로드된 표시기가 차트로 드래그되지 않는 이유를 알아내도록 도와주세요. 카탈로그에 있습니다.
파일:
image002.jpg  38 kb
 
안녕하세요. 시장에서 거래 터미널 로 지표 도구가 자동으로 로드되지 않는 경우 문제가 무엇입니까?
 
Igor Makanu :

위의 예에는 역사에 대한 언급이 없습니다.

따라서 OrderSelect()의 결과가 true이면 보장됩니다.

UPD: OrderSelect 는 4-ke에서 매우 잘 작동합니다. 한 번 테스트했습니다. 시장 주문의 경우 주문 속성에 액세스하는 시간 .... 정말 초당 수백만 번, 검색하고 싶지 않습니다. 논쟁하고 있었던 것 같습니다. 중재자 Artem과 함께하지만 여기에서 "모든 펠트 펜의 맛이 다릅니다"라고 말했듯이 원하는 경우 유지하십시오.

중재자 Artem은 논쟁하지 않습니다. 진행자 Artem이 토론 중입니다 :)
 
void OnTick ()
  {
     if (isCrossing() == 1 )          
      
    ... 

     if (isCrossing() == 2 )
      
    ... 
  }

int isCrossing(){  
   double ma = iMA ( NULL , g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0 );
   double low = iLow ( Symbol (), g_timeFrame, 0 );
   double high = iHigh ( Symbol (), g_timeFrame, 0 );

   if (g_barTime < iTime ( NULL ,g_timeFrame, 0 ) && high > ma && Bid <= ma){
    g_barTime = iTime ( NULL ,g_timeFrame, 0 );
     return 1 ;
  } 
  
   if (g_barTime < iTime ( NULL ,g_timeFrame, 0 ) && low < ma && Bid >= ma){
    g_barTime = iTime ( NULL ,g_timeFrame, 0 );
     return 2 ;
  }
   
   return 0 ;
}
isCrossing()2 를 반환하지 않는 이유는 ??? IsCrossing() 자체에는 두 번째 if 에 대한 항목이 있지만 OnTick() 에는 isCrossing() == 2 일 때 if 항목이 없습니다. 도대체 무슨...