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

 

포럼 회원 여러분께 인사드립니다.

어떤 차트로 설정되어 있든 표시기가 특정 기호와 함께 작동하도록 도와주세요.

외부 매개변수를 사용하여 캐릭터를 변경하는 것으로 알고 있습니다.

 input string    Symb   = "GBPJPY" ;
하지만 나는 다음에 무엇을해야할지 모르겠다

인디케이터를 부착하고 있습니다

파일:
Fisher.mq4  3 kb
 

새로운 막대 모양으로 버퍼를 재설정하되 이전 데이터가 지워지지 않고 차트에 표시되도록 하는 방법을 알려주세요. 어떤 이유로 버퍼를 재설정 할 수 없으며 새로운 막대 의 출현으로 이전에 축적 된 데이터가 새로운 것으로 겹쳐집니다. 코드에서 내가 무엇을 잘못하고 있습니까? 설명 감사합니다.

 void OnInit ()
{
   IndicatorDigits ( 0 );
   SetIndexBuffer ( 0 ,Buf_1);
   SetIndexBuffer ( 1 ,Buf_2);
   Bid1= Bid ;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[ 0 ]= 0 ;         // и обнулить последний элемент буфера
      Buf_2[ 0 ]= 0 ;
   }
   
      
   if ( Bid > Bid1) 
   {
   V1 = iVolume ( NULL , 0 , 0 );
   V2 = V1 + V2;
   Buf_1[ 0 ]= V2;
   }                             
   else 
   {
   V3 = iVolume ( NULL , 0 , 0 );
   V4 = V3 + V4;
   Buf_2[ 0 ]= (V4*- 1 );
   }
   Bid1= Bid ;
   
   
   return (rates_total);
}
 
Alekseu Fedotov :

이 같은


코드에 질문이 있었는데 현재 닫히지 않은 시간당 양초에는 마감 시간이 있으며 양초가 닫힐 때까지 표시기는 표시기가 위치한 기간의 가격 마감을 그립니다. ​\u200b\u200b시간별 촛불이 닫히지 않았기 때문에 화면에 빨간색으로 그려서는 안 되는 것, 이것은 컴파일의 순간이고 컴파일 후 닫힌 각 촛불이 그려지면 물론 다른 방법으로 해결할 수 있습니다. 시간별 세그먼트를 찾아서 더 간단하게 만들고 싶었습니다.
 for (i=limit; i> 0 ; i--)
{
yesterday_weekday = TimeHour ( iTime ( Symbol (), 0 ,i+ 1 ))- TimeHour ( iTime ( Symbol (), 0 ,i));
if (yesterday_weekday!= 0 )

문제에 대한 다른 해결책이 있습니까? 고맙습니다.

 
MakarFX : 어떤 차트로 설정되어 있든 특정 기호와 함께 표시기가 작동하도록 도와주세요.

이 매개변수를 Higest, Lowest 호출에 작성해야 합니다. 구식이며 iHigest, iLowest 가 더 좋으며 자랑스러운 악명 높은 Fisher는 즉시 무승부에 동의했습니다(V. Vysotsky).

 
PokrovMT5 :
코드에 질문이 있었는데 현재 닫히지 않은 시간당 양초에는 마감 시간이 있으며 양초가 닫힐 때까지 표시기는 표시기가 위치한 기간의 가격 마감을 그립니다. ​\u200b\u200b시간별 촛불이 닫히지 않았기 때문에 화면에 빨간색으로 그려서는 안 되는 것, 이것은 컴파일의 순간이고 컴파일 후 닫힌 각 촛불이 그려지면 물론 다른 방법으로 해결할 수 있습니다. 시간별 세그먼트를 찾아서 더 간단하게 만들고 싶었습니다.

문제에 대한 다른 해결책이 있습니까? 고맙습니다.

내가 당신을 올바르게 이해했다면 차트에 시간별 닫기를 표시하고 싶습니까?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

 
STARIJ :

이 매개변수를 Higest, Lowest 호출에 작성해야 합니다. 구식이며 iHigest, iLowest가 더 좋으며 자랑스러운 악명 높은 Fisher는 즉시 무승부에 동의했습니다(V. Vysotsky).

#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"

#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
 
input string   Symb     ="GBPJPY";
extern int     period   =10;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];


int init()
  {
   
   
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName("Fisher");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }


int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;  
   

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++)
    {  MaxH = High[iHighest(Symb,0,MODE_HIGH,period,i)];
       MinL = Low[iLowest(Symb,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      
    }


   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
           
      if (((current<0)&&(prev>0))||(current<0))   up= false;    
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
        
       else
         {
          ExtBuffer1[i]=current;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }
했으나 문제가 해결되지 않음
price = ( High [i]+ Low [i])/ 2 ;
높음 및 낮음은 현재 문자를 사용합니다.
 
Maxim Kuznetsov :

내가 당신을 올바르게 이해했다면 차트에 시간별 닫기를 표시하고 싶습니까?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

맥심, 좋은 오후입니다! 옵션에 감사드립니다. 제 것이 거의 동일하고 작동 중이지만 Alekseu Fedotov 가 다른 옵션을 제공했습니다. 나는 그것에 대해 썼고 그것을 수정하는 방법에 대한 아이디어가 있다고 썼습니까?



 for (i=limit; i>= 0 ; i--)
     {
      T = iTime ( NULL , 0 ,i); 
      shift= iBarShift ( NULL , 60 ,T); 
      C= iClose ( NULL , 60 ,shift);
      CC[i]=C;
     }
 

새로운 막대 모양으로 버퍼를 재설정하되 이전 데이터가 지워지지 않고 차트에 표시되도록 하는 방법을 알려주세요. 어떤 이유로 버퍼를 재설정 할 수 없으며 새로운 막대 의 출현으로 이전에 축적 된 데이터가 새로운 것으로 겹쳐집니다. 코드에서 내가 무엇을 잘못하고 있습니까? 설명 감사합니다.

 datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[ 0 ]= 0 ;         // и обнулить последний элемент буфера
      Buf_2[ 0 ]= 0 ;
   }
   
      
   if ( Bid > Bid1) 
   {
   V1 = iVolume ( NULL , 0 , 0 );
   V2 = V1 + V2;
   Buf_1[ 0 ]= V2;
   }                             
   else 
   {
   V3 = iVolume ( NULL , 0 , 0 );
   V4 = V3 + V4;
   Buf_2[ 0 ]= (V4*- 1 );
   }
   Bid1= Bid ;
   
   
   return (rates_total);
 

아무도 나를 도울 수 없습니까?

 

모두 제일 좋다! 원하는 차트 창으로 전환하는 방법은 무엇입니까?

다른 쌍의 많은 창이 열려 있고 각 창에는 고문이 있고 거래 신호가 나타나지만 통화는 표시까지이므로 신호가 온 차트를 신속하게 활성화해야 합니다.

Symbol() 명령을 알고 있지만 주어진 통화 쌍이 있는 창을 활성화하는 방법을 모르겠습니다. 누가 그 과제에 직면할 수 있습니까?