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

 

어떤 친절한 사람들은 나에게 다음을 쓰는 방법을 알려줍니다.

나는 각 틱에 대해 iVolume을 계산하는 훈련 표시기를 만들었습니다. iVolume은 트위칭된 항목에 대해 양수이고 twitched된 항목에 대해 iVolume이 음수입니다. 곡선을 얻으려면 막대에서 막대로의 누계에서 모든 iVolume(양수 및 음수)을 더합니다. 곡선이 나옵니다. 그러나 2가지 문제가 발생했습니다.

1) 선이 강하게 끊어진 것으로 판명되었습니다.

2) 결과 iVolume 차트는 실생활에서만 살기 때문에 어드바이저를 테스트하는 것은 불가능합니다.

문제:

1) 내가 버퍼에 쓴 평균 데이터를 기반으로 그래프를 작성할 수 있는 코드를 설명하는 방법은 무엇입니까?

2) 이 지표(실제 모드에서 획득)의 데이터를 특정 파일에 기록할 수 있으므로 나중에 이 파일을 참조하여 이미 수집된 틱을 적용하여 과거 데이터에 지표를 구축할 수 있습니다. 그들에게 볼륨? 그렇다면 프로그래밍 방식으로 어떻게 설명할 수 있습니까? 아니면 현재 iVolume 정보를 파일에 기록할 필요가 없는 다른 솔루션이 있습니까?

 #property version    "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1    "Вверх"
#property indicator_type1    DRAW_LINE
#property indicator_color1   Salmon
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2

#property indicator_label2    "Вниз"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrDarkTurquoise
#property indicator_style2    STYLE_SOLID
#property indicator_width2    2

datetime Время= 0 ;   // Время прошлого бара
double Bid1;
double    Buf_1[];
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;   // отрицательные и положительные iVolume нарастающим итогом

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

코드 끝에 다음을 추가할 수 있습니다.

이중 macurrent= iMAOnArray (Buf_1[0],0,5,0, MODE_LWMA ,0);

응 안돼! 컴파일러는 배열이 없다는 오류를 작성합니다.


 
여보세요, 전략 토스터기에서 이 느낌표가 무엇을 의미하는지 말해주세요?
 

누구든지...도와줄 수 있습니까? 나를 위한 막 다른 작업은 여기에 명시되어 있습니다. https://www.mql5.com/en/forum/160683/page378#comment_6053255

 
YarTrade : 이 지표(실제 모드에서 획득)에 대한 데이터를 특정 파일에 기록하여 나중에 이 파일을 참조하여 이미 수집된 데이터를 적용하여 과거 데이터를 기반으로 지표를 구축할 수 있습니까? 그들에게 틱 볼륨? 그렇다면 프로그래밍 방식으로 어떻게 설명할 수 있습니까? 아니면 현재 iVolume 정보를 파일에 기록할 필요가 없는 다른 솔루션이 있습니까?

파일의 데이터 기반 표시기 - 검색에 이 줄을 입력하고 찾았 습니다.

 

일종의 악몽, 나는 그것이 왜 다음과 같이 나오는지 이해하지 못합니다.
코드 섹션:


line[0]=MathFloor(낮음[1]*MathPow(10,D-1));
Print("변수",DoubleToStr(라인[0],D));
Print("코드",DoubleToStr( MathFloor (Low[1]*MathPow(10,D-1)),D));

출력:

EURUSD,M15: 변동 0.00000
EURUSD,M15: 코드 11754.00000


할당 후 값은 어떻게 됩니까?

 
LuckySith : 코드 조각 :

line[0]=MathFloor(낮음[1]*MathPow(10,D-1));
Print("변수",DoubleToStr(라인[0],D));
Print("코드",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

출력:

EURUSD,M15: 변동 0.00000
EURUSD,M15: 코드 11754.00000

할당 후 값은 어떻게 됩니까?

할당 후 변수의 값과 변수 D의 값을 출력 합니다. 계산기로 계산해 봅시다...

 

안녕하세요. 여러분, 조금만 도와주세요. 누군가 가 표시기 설정 에 표시되도록 사운드 파일의 이름을 지정할 수 있는 표시기에서 행을 설정할 수 있습니까?

파일:
Awesome-33.ex4  16 kb
 
STARIJ :

할당 후 변수의 값과 변수 D의 값을 출력합니다. 계산기로 계산해 봅시다...


그래서 모든 할당된 값 후에 나도 한 번에 추론합니다. 따라서 기본적으로 코드는 다음과 같습니다.


ㄱ=ㄴ;

인쇄 (a);

인쇄(b);

그러나 출력은 0이고 b는 올바르게 출력합니다.

 
LuckySith :

그래서 모든 할당된 값 후에 나도 한 번에 추론합니다. 따라서 기본적으로 코드는 다음과 같습니다.


ㄱ=ㄴ;

인쇄(a);

인쇄(b);

그러나 출력은 0이고 b는 올바르게 출력합니다.


I don't see zero 어디선가 실수했어

   int D= 5 ;
   double a= MathFloor ( Low [ 1 ]* MathPow ( 10 ,D- 1 )); 
   Print ( "Var " , DoubleToStr (a,D)); 
   Print ( "Code " , DoubleToStr ( MathFloor ( Low [ 1 ]* MathPow ( 10 ,D- 1 )),D));