Н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);
}
}
Комментарии (4)
35 AM2 Сообщений: 16256 - Андрей
Почему не решить эту задачу просто экспортом котировок из МТ?
45 Bishop Сообщений: 5802 - АЛЬФАХАМЕЦ-Машковод
Скопировал 20 значений:
35 AM2 Сообщений: 16256 - Андрей
И вот результат:
35 AM2 Сообщений: 16256 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий