오류, 버그, 질문 - 페이지 31

 
Urain :
3개를 설정하면 3개의 값이 짧은 이름으로 그려지고 메인 버퍼는 하나만 필요하지만 가끔 작동합니다.

그러면 아마도 다음과 같이 될 것입니다.

 #property indicator_buffers 3
#property indicator_plots   1 
   SetIndexBuffer ( 0 ,LRma, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,L, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 2 ,S, INDICATOR_CALCULATIONS );

그래프에는 하나의 값만 표시됩니다.

 
DC2008 :

그러면 아마도 다음과 같이 될 것입니다.

그래프에는 하나의 값만 표시됩니다.

이것이 바로 표시기의 짧은 이름에 3개의 숫자가 표시되는 방식이며 그리기용 버퍼는 1개이며 알아야 할 모든 것을 저장합니다.

문제는 4에서 원하는 막대의 눈금 값을 간단히 요청할 수 있다는 것입니다. 그런 다음 전체 버퍼를 로드해야 하므로 어딘가에 저장해야 합니다.

이 저장은 표시기의 필요에 필요하지 않습니다. 하지만 다른 방법으로 마우스의 가치를 얻는 방법을 모르겠습니다.

 
DC2008 :

그러면 아마도 다음과 같이 될 것입니다.

그래프에는 하나의 값만 표시됩니다.

그것도 끔찍하게 버벅....
 
Interesting :

초기화에 관한 것이 아닙니다. 그리고 그 두 줄에서도 마셰크라고 불리는 것은 아닙니다.

거기에 SYMBOL 매개변수가 실제로 필요하다고 가정하더라도(개인적으로 의심스럽습니다) 버퍼 작업은 절름발이이며 일반적으로 계산기 블록에 대해 침묵합니다.

예, 지표가 발사된 잘못된 기기의 선형 회귀 각도 값을 표시한다는 것을 알아냈습니다.

그리고 인풋에 등록되어 있다는 사실, 그래서 체커를 숨기기를 바랍니다.

이제 추위 속에서 계산기에서 무슨 일이 일어나는지 부조리하다고 보는 것을 현명하게 말해주세요 ???

나는 거기에서 모든 것이 옳다고 말하는 것이 아닙니다(저는 단지 5개를 배우고 있기 때문에 자연스럽게 많은 사람들처럼 걱정합니다).

내 마음에 오는 첫 번째 것은 다른 쌍에 대한 이야기의 길이가 다르기 때문에 버그가 있다는 것입니다.

개발자는 터미널 자체가 필요한 모든 것을 로드할 것이라고 확신했지만.

 
Urain :

이것이 바로 표시기의 짧은 이름에 3개의 숫자가 표시되는 방식이며 그리기용 버퍼는 1개이며 알아야 할 모든 것을 저장합니다.

문제는 4에서 원하는 막대의 눈금 값을 간단히 요청할 수 있다는 것입니다. 그런 다음 전체 버퍼를 로드해야 하므로 어딘가에 저장해야 합니다.

이 저장은 표시기의 필요에 필요하지 않습니다. 하지만 다른 방법으로 마우스의 가치를 얻는 방법을 모르겠습니다.

Mashki 자체는 옳거나, 잘, 또는 거의 옳습니다. 나머지 버퍼도 처리할 수 있습니다(이 시리즈는 실제로 사용되지 않아 이상합니다). 그러나 계산기에서 무슨 일이 일어나고 있는지는 큰 질문입니다 ...
 
Urain :

예, 지표가 발사된 잘못된 기기의 선형 회귀 각도 값을 표시한다는 것을 알아냈습니다.

그리고 인풋에 등록되어 있다는 사실, 그래서 체커를 숨기기를 바랍니다.

이제 추위 속에서 계산기에서 무슨 일이 일어나는지 부조리하다고 보는 것을 현명하게 말해주세요 ???

나는 거기에서 모든 것이 옳다고 말하는 것이 아닙니다(저는 단지 5개를 배우고 있기 때문에 자연스럽게 많은 사람들처럼 걱정합니다).

내 마음에 오는 첫 번째 것은 다른 쌍에 대한 이야기의 길이가 다르기 때문에 버그가 있다는 것입니다.

개발자는 터미널 자체가 필요한 모든 것을 로드할 것이라고 확신했지만.


그리고 논쟁할 것이 있습니다. 우리는 계산기의 헤더와 거기에서 보는 것을 취합니다. 거기서 보는 것은 다음과 같습니다.

 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 count=rates_total-prev_calculated;
   if (count== 0 )count= 1 ;
우리는 하나의 도구를 계산하고 막대를 다르게 계산합니다. 그럼 논리가 어디에 있는지 말해줘?
 

여기에서 다음과 같이 계산기를 다시 작성했습니다.

  {
//---
   int count=rates_total-prev_calculated;
   if (count>_Bars())count=_Bars()- 1 ;
   if (count== 0 )count= 1 ;
   if ( CopyBuffer (Lwma, 0 , 0 ,count,L)!=- 1 )
     {
       if ( CopyBuffer (Sma, 0 , 0 ,count,S)!=- 1 )
        {
         for ( int i= 0 ;i<count;i++)
            LRma[i]=(L[i]-S[i])* 6 *iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
int _Bars(){ return ( Bars (symbol, _Period ));}
오류 기록이 사라졌지만 여전히 제대로 작동하지 않습니다.
 

여기에서 우리는 비슷한 칠면조에 대해 의아해했습니다. 뭐가 나왔는지 봐봐

 
Urain :

여기에서 다음과 같이 계산기를 다시 작성했습니다.

오류 기록이 사라졌지만 여전히 제대로 작동하지 않습니다.

유일한 올바른 방법은 매우 간단합니다.

100% 작동 표시기가 작성되고 "Symbol" 매개변수 없이 고전적으로 수행됩니다. 현재 기호 및 기간으로 계산됩니다.

그 후, 그러한 BASIC 계산기는 Expert Advisor(기계 작업이 제공되는 경우) 또는 계산기(NON-CALCULATED INSTRUMENT의 차트에 정보를 표시해야 하는 경우)에서 호출됩니다.

추신

그렇지 않고 모든 것을 현명하게 하다 보면 계산기나 별도의 함수에서 추가 계산을 하고 그 결과를 현재 차트의 데이터와 연결해야 하는...

 
Urain :

여기에서 다음과 같이 계산기를 다시 작성했습니다.

오류 기록이 사라졌지만 여전히 제대로 작동하지 않습니다.

아마도 다음과 같이 더 나을 것입니다.

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1   "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1   1
input string              symbol      = "EURJPY" ;
input int                 MA_Period   = 25 ;           // период MA
input int                 MA_shift    = 0 ;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       = PRICE_OPEN ;   // тип цены 
//--- indicator buffers
double   LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma; // Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,LRma, INDICATOR_DATA );
   ArraySetAsSeries (L,true);
   ArraySetAsSeries (S,true);
   ArraySetAsSeries (LRma,true);
   Lwma= iMA (symbol, 0 ,MA_Period+ 1 ,MA_shift, MODE_LWMA ,price);
   Sma= iMA (symbol, 0 ,MA_Period+ 1 ,MA_shift, MODE_SMA ,price);
   iPoint= 1.0 / SymbolInfoDouble (symbol, SYMBOL_POINT );
   iiMA= 1.0 /MA_Period;
   IndicatorSetString ( INDICATOR_SHORTNAME , "LRma_symbol_" +symbol);
//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 count=rates_total-prev_calculated;
   if (count> 1 )count=( int ) SeriesInfoInteger (symbol, 0 , SERIES_BARS_COUNT );
   if (count== 0 )count= 1 ;
   if ( CopyBuffer (Lwma, 0 , 0 ,count,L)!=- 1 )
     {
       if ( CopyBuffer (Sma, 0 , 0 ,count,S)!=- 1 )
        {
         for ( int i= 0 ;i< MathMin ( ArraySize (LRma), ArraySize (L));i++)
            LRma[i]=(L[i]-S[i])* 6 *iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

제대로 작동하는 것 같습니다.