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

Рейтинг 2156



РЕКОМЕНДУЮ



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

Н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
  • Просмотров: 3952
  • 3 сентября 2015, 19:49
  • gince
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

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

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

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

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

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

  • 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 Сообщений: 16537 - Андрей

  • 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 Сообщений: 16537 - Андрей

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

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