Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



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

Нuжен скрипт или индикатор для исследования в экселе.
Описание.
За 30 дней с 8.00 до 12.00 каждый день отпечатать в файл csv цены открытия и закрытия свеч в этом промежутке времени.Период (ТаймФрейм) — на каком поставлен скрипт или индикатор но не больше часа.Если индикатор, то отображение и сохранение в буферах не обязательно

//+------------------------------------------------------------------+
//|                                   gi_tyrimas Zvakiu judejimo.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//#property strict

extern int   DayMax     =3;     //количество дней для печати
extern int   DayStart   =1;      //начинаем с первого бара
extern int   HourStart  =10;     //время старта внутри дня
extern int   HourEnd    =12;     //время конца внутри дня
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int per=Period();  
   if(per>60)return;  //если период больше часа , прекращаем работу скрипта
   double c_o=0,ABS_o_c=0;

   datetime time_DayStart = iTime(NULL,PERIOD_D1,DayStart);
   datetime time_DayMax = iTime(NULL,PERIOD_D1,DayMax);
   
   Print("time_DayStart=",time_DayStart,"   time_DayMax=",time_DayMax);  
      
   int iBarDayStart = iBarShift(NULL,PERIOD_D1,time_DayStart,False);
   int iBarDayMax = iBarShift(NULL,PERIOD_D1,time_DayMax,False);
   
   Print("iBarDayStart=",iBarDayStart,"   iBarDayMax=",iBarDayMax);
   
   for(int d=iBarDayStart;d<=iBarDayMax;d++)//перебираем дни от DayStart до DayMax, которые перещитаны на бары
      {
          Print("d=",d);//хорошо
          
          datetime time_HourStart=iTime(NULL,PERIOD_D1,d)+HourStart*3600;  //берем начало суток и добавляем 3600 с за каждый час. Так получаем начало 10 часа в том дне 
          datetime time_HourEnd  =iTime(NULL,PERIOD_D1,d)+HourEnd*3600; //берем начало суток и добавляем 3600 с за каждый час. Так получаем начало 12 часа в том дне 
          
          Print("time_HourStart=",time_HourStart,"   time_HourEnd=",time_HourEnd);
          
          // переводим время в бары учитывая ТФ на котором поставлено, что бы узнатть первый и последний бары следующего цикла
          // но цикл перебирает вце бары за сутки
          // вчем я ошибаюсь
          int iBarHourStart = iBarShift(NULL,per,time_HourStart,False); 
          int iBarHourEnd   = iBarShift(NULL,per,time_DayMax,False);
          
          Print("iBarHourStart=",iBarHourStart,"   iBarHourEnd=",iBarHourEnd);
          
          for(int h=iBarHourStart;h<iBarHourEnd;h++) //перебираем бары с нолевого до последнего в сутках учитывая ТФ
          {
            //if(Time[h]>HourStart && Time[h]<HourEnd)//проверка промежутка времени
            {
               //данные для печати и печать
               //c_o=(Close[h]-Open[h]);
               //ABS_o_c=MathAbs(c_o);
               datetime time= iTime(NULL,per,h);
               
               //f_PrintToFile(DayOfWeek(),TimeToString(time), DoubleToString(Open[h],5),DoubleToString(Close[h],5),DoubleToString(c_o,0),DoubleToString(ABS_o_c,0));
               Print(TimeToString(time),Open[h],Close[h]/*,c_o,ABS_o_c*/);
            }
          }
      }      
  }
  
//+------------------------------------------------------------------+
// 1.  В файл                           
//+------------------------------------------------------------------+
 void f_PrintToFile(int   f_DayOfWeek=0,
                          string f_TimeCurrent="", 
                          double f_Open=0,
                          double f_Close=0,
                          double f_c_o=0,
                          double f_ABS_o_c=0)
{
   string fileName=StringConcatenate(Symbol()," M",Period()," Tyrimas");
   string FileType=".csv";
   int handle;
   handle=FileOpen(fileName+FileType,FILE_WRITE|FILE_READ,";");
   if(handle!=INVALID_HANDLE)
   {
      FileSeek(handle,0,SEEK_END);
      FileWrite(handle,f_DayOfWeek,f_TimeCurrent,f_Open,f_Close,f_c_o,f_ABS_o_c);
      FileClose(handle);
   }
}
  • 0
  • Просмотров: 3898
  • 3 сентября 2015, 19:49
  • gince
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник на индикаторе HMA Modified для МТ-4.
Следующая запись в группе  
Простенький МА (индикатор\советник)
02 сентября 2015
04 сентября 2015

Брокер для ваших роботов, 15 лет на рынке

Комментарии (4)

+
0
Посмотрю завтра, может у меня получится.
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 3 сентября 2015, 23:11
+
0
За 30 дней с 8.00 до 12.00 каждый день отпечатать в файл csv цены открытия и закрытия свеч в этом промежутке времени.

Почему не решить эту задачу просто экспортом котировок из МТ?
avatar

  45  Bishop Сообщений: 5802 - АЛЬФАХАМЕЦ-Машковод

  • 4 сентября 2015, 08:30
+
0
А что именно не получается? Только что набросал скрипт. Копирует цены открытия и закрытия в файл.


//+------------------------------------------------------------------+
//|                                                  PriceScript.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int bars    = 20;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SaveToFile(double OpenPrice,double ClosePrice)
  {
   int h=FileOpen("price.csv",FILE_WRITE|FILE_READ,";");
   if(h!=-1)
     {
      FileSeek(h,0,SEEK_END);
      FileWrite(h,OpenPrice,ClosePrice);
      FileClose(h);
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=bars;i>0;i--)
     {
      SaveToFile(Open[i],Close[i]);
     }
  }
//+------------------------------------------------------------------+



Скопировал 20 значений:

1.11281;1.10951
1.10946;1.11016
1.11016;1.11163
1.11161;1.11314
1.11314;1.1115
1.11151;1.1124
1.1124;1.11223
1.11207;1.11188
1.11188;1.11197
1.11194;1.11233
1.11233;1.11273
1.11273;1.11252
1.11251;1.11246
1.11246;1.11231
1.11232;1.11301
1.11302;1.11356
1.11355;1.11304
1.11306;1.11439
1.11438;1.11398
1.11399;1.11403

avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 4 сентября 2015, 13:16
+
0
А вот этот код скопирует все значения за указанное количество баров, в определенном временном промежутке:


//+------------------------------------------------------------------+
//|                                                  PriceScript.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input int bars    = 200;
input int hstart  = 10;
input int hend    = 12;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SaveToFile(double OpenPrice,double ClosePrice)
  {
   int h=FileOpen("price.csv",FILE_WRITE|FILE_READ,";");
   if(h!=-1)
     {
      FileSeek(h,0,SEEK_END);
      FileWrite(h,OpenPrice,ClosePrice);
      FileClose(h);
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=bars;i>0;i--)
     {
      if(TimeHour(Time[i])>=hstart && TimeHour(Time[i])<=hend) SaveToFile(Open[i],Close[i]);
     }
  }
//+------------------------------------------------------------------+



И вот результат:

1.15674;1.15278
1.15273;1.15549
1.15554;1.15373
1.14964;1.15124
1.15129;1.14729
1.14728;1.14554
1.13291;1.1308
1.13082;1.12822
1.12824;1.12897
1.12634;1.12963
1.12964;1.12879
1.12878;1.12843
1.12233;1.12159
1.12158;1.12
1.12004;1.12035
1.12828;1.13194
1.13194;1.12746
1.12746;1.12575
1.12801;1.12578
1.12578;1.12798
1.12799;1.12634
1.12197;1.12342
1.12343;1.12398
1.12399;1.12301
1.11306;1.11439
1.11438;1.11398
1.11399;1.11403

avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 4 сентября 2015, 13:25

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий