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

 
YarTrade : VolC - 제가 파일 이름을 지었습니다. 파일명은 필요없나요?

다음과 같이:

   string file_name= "VolC_" + Symbol ()+( string ) Period ();
   int file_handle= FileOpen (file_name, FILE_WRITE | FILE_TXT );
   FileWrite (file_handle,( double )V5);       // V5 - это что?
   FileClose (file_handle);
 
STARIJ :

다음과 같이:


V5 - 일부 계산 결과. V5를 제거하고 그 자리에 배열을 넣고 파일에 기록하고 싶습니다. 파일이 생성되었지만 표시기 데이터 배열이 아닌 하나의 값만 파일에 기록됩니다. 없어진 물건 있어요? 차트에 올바르게 표시된 지표가 있습니다. 나중에 읽기 위해 그 값을 파일에 쓰고 싶습니다. 그러나 하나의 숫자만 기록됩니다. 무엇이 잘못되었는지 이해하도록 도와주시겠습니까?

 
STARIJ :

다음과 같이:


나는 FileWriteArray 로 그것을 하였으므로 이제 파일이 비어 있습니다. 배열이 거기에 기록되어 있지 않습니다 :(. 어떻게 도와야 하는지 알고 있습니까? 확실히 알고 있습니다. 무엇이 잘못되었는지 말해 주세요.

 
YarTrade : FileWriteArray를 사용하여 수행했으므로 이제 파일이 비어 있습니다. 배열이 거기에 기록되어 있지 않습니다 :(. 어떻게 도와야 하는지 알고 있습니까? 확실히 알고 있습니다. 무엇이 잘못되었는지 말해 주세요.

그는 이렇게 쓴다.

   int V5= 555 ;
   string file_name= "VolC_" + Symbol ()+( string ) Period ();
   int file_handle= FileOpen (file_name, FILE_WRITE | FILE_TXT );
   FileWrite (file_handle,V5);
   FileClose (file_handle);

어떤 유형의 배열입니까? 코드를 붙여넣고 욕심 부리지 마세요! 그리고 이제 배열은 분명히 문자로만 작성됩니다 .

   string V5[ 5 ]={ "Жили" , "были" , "дед" , "и" , "баба" };
   string file_name= "VolC_" + Symbol ()+( string ) Period ();
   int file_handle= FileOpen (file_name, FILE_WRITE | FILE_TXT );
   FileWriteArray (file_handle,V5);
   FileClose (file_handle);

그리고 여기에 루프의 이중 배열이 씁니다.

   double V5[ 5 ]={ 3.333 , 7.7777777 , 1.1 , 2.22 , 9.999999999 };
   string file_name= "VolC_" + Symbol ()+( string ) Period ();
   int file_handle= FileOpen (file_name, FILE_WRITE | FILE_TXT );
   for ( int n= 0 ; n< 5 ; n++) FileWrite (file_handle,V5[n]);
   FileClose (file_handle);
 
STARIJ :

그는 이렇게 쓴다.

어떤 유형의 배열입니까? 코드를 붙여넣고 욕심 부리지 마세요! 그리고 이제 배열은 분명히 문자로만 작성됩니다.

그리고 여기에 루프의 이중 배열이 씁니다.


탐욕이 무엇입니까? :)

 #property copyright "ZyZy"
#property link        "https://www.mql5.com/ru/users/alexeyvik/news"
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
// #property indicator_plots   1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrYellow
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
#property indicator_separate_window
//--- input parameters
input int       Aver= 15 ;
datetime Время= 0 ;   // Время прошлого бара
double Bid1;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // накопленный объем для всех тиков вниз для текущего бара
long V4; // объем текущего тика вниз
long V5;

//--- indicator buffers
double          Buf_1[];   // буфер для значений идикатора
double          Counter[];     // буфер для расчетов   
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   IndicatorBuffers ( 2 );
   SetIndexBuffer ( 0 ,Buf_1, INDICATOR_DATA ); // создаю буфер для значений индикатора
   SetIndexBuffer ( 1 ,Counter, INDICATOR_CALCULATIONS );
   SetIndexEmptyValue ( 0 , 0.0 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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 limit = prev_calculated > 0 ? rates_total-prev_calculated : rates_total-1;
//for(int i =  limit; i >= 0; i--)
// {
//  Counter[i] = close[i];
//  Indicator[i] = iMAOnArray(Counter, 0, 5, 0, 0, i);
// }
   if (prev_calculated== 0 )
     {
       ArrayInitialize (Counter, 0.0 );
       ArrayInitialize (Buf_1, 0.0 );
     }
   datetime Вр= Time [ 0 ];   // Время текущего бара
   if (Вр>Время)           // Если новый бар
     {
      Время=Вр;           // Запомнить
      Counter[ 0 ]= 0 ;         // и обнулить последний элемент буфера
      V2 = 0 ;
      V4 = 0 ;
     }

   if ( Bid >=Bid1)
     {
       if ( Bid >Bid1)
        {
         V1 = iVolume ( NULL , 0 , 0 );
         V2 = V1 + V2;
        }
       else
        {
         V1 = 0 ;
         V2 = V1 + V2;
        }
     }
   else
     {
      V3 = iVolume ( NULL , 0 , 0 );
      V4 = V3 + V4;
     }

   V5=V2-V4;
   Bid1= Bid ;
   Counter[ 0 ]=( double )V5;
   Buf_1[ 0 ]= iMAOnArray (Counter, 0 ,Aver, 0 , MODE_SMA , 0 );
   Comment ( "Counter " ,Counter[ 0 ], "\n"
           , "Buf_1 " ,Buf_1[ 0 ]);
   
   string file_name= "VolC_" + Symbol ()+( string ) Period ();
   int file_handle= FileOpen (file_name, FILE_WRITE | FILE_TXT );
   FileWriteArray (file_handle,Counter, 0 , WHOLE_ARRAY );     
   FileClose (file_handle);

   return (rates_total);
  }
//+------------------------------------------------------------------+
 
YarTrade : 여기서 탐욕이란? :)

그리고 왜 표시기에서 무언가를 인쇄합니까? 모든 것이 화면에 표시됩니다. 이것이 표시기인 이유입니다. 테이블이 필요할 때 iCustom()으로 스크립트를 실행합니다.

 

안녕하세요! 터미널에서 주문 가격을 확인해야 하는 코드로 여전히 고심 중입니다. 티켓을 확인하기로 결정했습니다. 배열의 득점 티켓을 확인하기 시작했습니다.

모든 것이 정상이며 TRUE를 반환합니다. 나는 하나를 삭제할 것이라고 생각합니다. 그것은 FALSE일 것입니다. 하지만 아니요(((나는 모든 것을 삭제했지만 스크립트는 여전히 0이 아닌 1을 반환합니다. 내가 뭘 잘못하고 있는 건가요?)


 int start()
{
   while (! IsStopped ())
   {
       int ordsel = 0 ;
       double ticord[ 3 ] = { 8895969 , 8901032 , 8901033 };
         for (ordsel= 0 ; ordsel<= 2 ;ordsel++) 
         {
             Sleep ( 5000 ); 
             Alert ( OrderSelect (ticord[ordsel], SELECT_BY_TICKET , MODE_TRADES )); 
         }
       if (! IsExpertEnabled ()) break ;
   }
   return ;
}
 

안녕하세요 전문가 여러분! 초보자를 도와주세요. 어드바이저에 인디케이터 를 꿰매려고 해요(내 뇌가 부러졌어...)! 오류 발생: 'limit' - 유형이 없는 선언입니다.

이 줄에서: limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));


 
Dimitry-1983 :

안녕하세요! 터미널에서 주문 가격을 확인해야 하는 코드로 여전히 고심 중입니다. 티켓을 확인하기로 결정했습니다. 배열의 득점 티켓을 확인하기 시작했습니다.

모든 것이 정상이며 TRUE를 반환합니다. 나는 하나를 삭제할 것이라고 생각합니다. 그것은 FALSE일 것입니다. 하지만 아니요(((나는 모든 것을 삭제했지만 스크립트는 여전히 0이 아닌 1을 반환합니다. 내가 뭘 잘못하고 있는 건가요?)



모든 것이 정확합니다. 사실 티켓으로 ( OrderSelect(...) )를 선택하면 MODE_TRADES에서 세 번째 매개변수가 무시 됩니다.

어떤 목록(닫힘, 열림) 에서 주문을 선택 했는지 확인하려면 마감 시간까지 확인해야 합니다.

0- 열려 있고 보류 중, >0 닫힘

 
Ptichka12 :

안녕하세요 전문가 여러분! 초보자를 도와주세요. 인디케이터를 어드바이저에 꿰매려고 해요(내 뇌가 부러졌어...)! 오류 발생: 'limit' - 유형이 없는 선언입니다.

이 줄에서: limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));



얼마나 흥미롭게 꿰매는지

실수로 이것을 시도하십시오

 int limit = MathMax (limit, MathMin ( Bars , iCustom ( NULL ,timeFrame,indicatorFileName, "returnBars" , 0 , 0 )*timeFrame/ Period ()));