Любые вопросы новичков по 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 в цикле пишет

   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:

Вот так пишет

Какого типа массив? Вставьте код, хватит жадничать!  И вот массив пишет видимо только символьный

И вот массив double в цикле пишет


Какая тут жадность? :)

#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' - declaration without type. 

В этой строке: limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));


 
Dimitry-1983:

Здравствуйте! Всё мучаюсь с кодом, который должен проверять по цене ордера в терминале. Решил попробовать проверить по тикетам. Забил тикеты в массив, стал проверять.

Всё хорошо, возвращает TRUE. Думаю, удалю один, будет FALSE. Ан нет((( Удалил все, а скрипт всё равно возвращает не 0 а 1. Что я делаю не так?



Все правильно, дело в том что что если вы выбираете ( OrderSelect(...)) по тикету, 3 параметр игнорируется MODE_TRADES 

и чтобы определить из какого списка (закрытые,открытые) вы выбрали ордер нужно проверить по времени закрытия

0- открытые и отложенные, >0 закрытые

 
Ptichka12:

Здравствуйте,товарищи специалисты! Помогите пожалуйста начинающему. Пытаюсь вшить индикатор в советник(мозги сломал...)! Выдаёт ошибку:'limit' - declaration without type. 

В этой строке: 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()));
Причина обращения: