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

 
EVGENII SHELIPOV # :

좋은 시간입니다.

나는 일일 프랙탈의 값을 그 값이나 수직선의 형태로 모니터에 표시합니다. 라인이 표시되지 않고 값은 0입니다.

다음은 코드의 일부입니다.


무슨 일이야

값이 0이기 때문입니다. 프랙탈은 n-촛불 뒤에 형성됩니다.

 
Vitaly Muzichenko # :

사용 가능한 전체 기록에 대한 배열, 필요하지 않습니다.

말 그대로 50-100 바 필요

이와 같이


지표의 요점은 무엇입니까? 물론 비밀이 아니라면) 시간을 표시하는 데는 확실히 문제가 있다. 저것들. 이것은 실시간 틱이 아니라 번호가 매겨져 있습니다. 자체 TF 막대의 각 숫자.

 
Valeriy Yastremskiy # :

지표의 요점은 무엇입니까? 물론 비밀이 아니라면) 시간을 표시하는 데는 확실히 문제가 있다. 저것들. 이것은 실시간 틱이 아니라 번호가 매겨져 있습니다. 자체 TF 막대의 각 숫자.

요점은 열린 차트에서 마지막 눈금을 보는 것입니다 :)

추신 * 요청 및 입찰가 변경

시장 조사에 따라


 
Tretyakov Rostyslav # :

값이 0이기 때문입니다. 프랙탈은 n-촛불 뒤에 형성됩니다.

새로운 극값이 없으면 프랙탈이 형성되고 막대 3개 이후에는 0, 1, 2가 됩니다.

 double FractalDayUpper = iFractals ( Symbol (), PERIOD_D1 , MODE_UPPER, 2 );
   ObjectCreate ( "signal00" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal00" , OBJPROP_XDISTANCE , 600 );
   ObjectSet( "signal00" , OBJPROP_YDISTANCE , 100 );

아무것도 바뀌지 않았다.

아니면 다른 것이 잘못되었습니다.

 
Vitaly Muzichenko # :

내가 해냈어, 효과가 있어

---

사이클 없이도 할 수 있다는 말이 있습니다.

그렇습니까?

내가 아는 한 MQL에는 어레이 시프트 기능이 없는 것 같다. 이것은 교대가 사이클의 도움으로만 수행될 수 있음을 의미합니다. 당신에게 어울리지 않는 것은 무엇입니까?

추신: 어레이를 추가하는 비용으로 어레이가 필요하지 않았습니다. 당신은 버퍼에 직접 입찰 값을 이동하고 기록했습니다!

 
EVGENII SHELIPOV # :

좋은 시간입니다.

나는 일일 프랙탈의 값을 그 값이나 수직선의 형태로 모니터에 표시합니다. 라인이 표시되지 않고 값은 0입니다.

다음은 코드의 일부입니다.


무슨 일이야

영점 막대의 프랙탈이 0이 아니어야 하는 이유는 무엇입니까? 때, 0이 아닌 경우에만 있을 수 있습니다!


Tretyakov Rostyslav # :

값이 0이기 때문입니다. 프랙탈은 n-촛불 뒤에 형성됩니다.

그리고 항상 그런 것도 아닙니다. n번째 막대가 프랙탈인 경우에만!

 
Vitaly Muzichenko # :

요점은 열린 차트에서 마지막 눈금을 보는 것입니다 :)

추신 * 요청 및 입찰가 변경

시장 조사에 따라


그리고 나는 속도를 측정하려고 생각했다)))

 
Vitaly Muzichenko # :

요점은 열린 차트에서 마지막 눈금을 보는 것입니다 :)

추신 * 요청 및 입찰가 변경

시장 조사에 따라


ArrayCopy() 는 무엇에 적합하지 않습니까?
Документация по MQL5: Операции с массивами / ArrayCopy
Документация по MQL5: Операции с массивами / ArrayCopy
  • www.mql5.com
ArrayCopy - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin # :
ArrayCopy() 는 무엇에 적합하지 않습니까?

ArrayCopy는 한 어레이에서 다른 어레이로 복사하기 위한 것입니다. 그리고 여기에서 각 틱을 추가하기 전에 값을 이동해야 합니다. 따라서 사이클의 도움으로 만 해결됩니다.

 
Artyom Trishkin # :
ArrayCopy() 는 무엇에 적합하지 않습니까?

그것을 사용하는 방법, 당신은 보여줄 수 있습니까?

과제는

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

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

비탈리 무지첸코 , 2022.02.13 15:42

사용 가능한 전체 기록에 대한 배열, 필요하지 않습니다.

말 그대로 50-100 바 필요

이와 같이


다음은 완성된 코드이지만 루프가 약간 무섭습니다.

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots    2
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrDodgerBlue
#property indicator_label1    "Bid"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrRed
#property indicator_label2    "Ask"

double Buffer1[];
double Buffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
{
   SetIndexBuffer ( 0 ,Buffer1);
   ArraySetAsSeries (Buffer1, true );
   SetIndexBuffer ( 1 ,Buffer2);
   ArraySetAsSeries (Buffer2, true );
   ArrayInitialize (Buffer1, EMPTY_VALUE );
   ArrayInitialize (Buffer2, EMPTY_VALUE );
   IndicatorSetInteger ( INDICATOR_DIGITS , Digits ());
   IndicatorSetString ( INDICATOR_SHORTNAME , "Tick:" );
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   int H= 100 ;
   if (prev_calculated== 0 ) {
     ArrayInitialize (Buffer1, EMPTY_VALUE );
     ArrayInitialize (Buffer2, EMPTY_VALUE );
  }
   if (rates_total-prev_calculated== 1 ) {
    Buffer1[H+ 1 ]= EMPTY_VALUE ;
    Buffer2[H+ 1 ]= EMPTY_VALUE ;
  }
   double b= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
   double a= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );
  Buffer1[ 0 ]=b;
  Buffer2[ 0 ]=a;
   for ( int j=H; j> 0 ; j--) {
    Buffer1[j]=Buffer1[j- 1 ];
    Buffer2[j]=Buffer2[j- 1 ];
  }
   return (rates_total);
}
//+------------------------------------------------------------------+

---

다시 말하지만, ArrayCopy() 내부에 루프가 있으며 아마도 둘 이상일 수 있습니다. 따라서 교체 코드가 더 쉽고 빨라지지 않을 것입니다.