int start() // Спец. функция start
{
//--------------------------------------------------------------- 2 --int Handle, // Файловый описатель
shift,Text; // Стиль вертикальной линииstring File_Name="News.csv", // Имя файла
Obj_Name, // Bмя объекта
Instr, // Название валюты
One,Two, // 1я и 2я чать названия инстр.
Str_DtTm; // Дата и время события(строка)datetime Dat_DtTm; // Дата и время события(дата)//--------------------------------------------------------------- 3 --
Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файлаif(Handle<0) // Неудача при открытии файла
{
if(GetLastError()==4103) // Если файла не существует,..Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера else// При любой другой ошибке..Alert("Ошибка при открытии файла ",File_Name);//..такое сообщPlaySound("Bzrrr.wav"); // Звуковое сопровождениеreturn(0); // Выход из start()
}
//--------------------------------------------------------------- 4 --while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
{ // ..указатель не в конце файла//--------------------------------------------------------- 5 --
Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
Text =FileReadString(Handle);// Текст описания события//--------------------------------------------------------- 6 --
Dat_DtTm =StrToTime(Str_DtTm); // Преобразование типа данных//--------------------------------------------------------- 7 --
shift=iBarShift(NULL,0,Dat_DtTm);
Alert("Время=",TimeToString(Time[shift]),"Text=",Text);
if(FileIsEnding(Handle)==true) // Файловый указатель в концеbreak; // Выход из чтения и рисования
}
//--------------------------------------------------------------- 8 --FileClose( Handle ); // Закрываем файлreturn(0); // Выход из start()
}
//--------------------------------------------------------------- 9 --
你可以阅读帮助,这一切都在那里,有例子。
我有一个想法,从文件数据中画一个指标。
我从课本上取了一个例子。根据我的需要重写了脚本。
可以删除"警报"一行。
其逻辑是在指标中获取日期,并与文件进行比较,如果相同,则将该值分配给缓冲区。
但我认为,如果我们从文件的开头开始搜索每个条形图,其中的数据已经被考虑进去了,这将是相当昂贵的。
问题是如何在指标中固定已处理的文件行并在它们之后开始搜索?
有一个大文件,其中的日期是以这种形式 "20141231"。要将字符串转换为日期时间 格式,你需要在年、月和数字之间加上 "YYYY.MM.DD "点。
如何才能做到这一点呢?
谢谢你,我已经把它整理好了。转换了原来用逗号分隔的文件。将逗号改为点号,然后增加了第二列,都是 "uniCSVed"。
现在我知道如何以编程方式进行了。
现在我面临着另一项艰巨的任务:如何用这些数据完成指标?我已经做了一个脚本,它可以正常工作。
但在指标中,为了不出现刹车,我需要以某种方式记住在最后一次迭代中获得数据的那条线。
谢谢你,我已经把它整理好了。转换了原来用逗号分隔的文件。将逗号改为点号,然后增加了第二列,都是 "uniCSVed"。
现在我知道如何以编程方式进行了。
现在我面临着另一项艰巨的任务:如何用这些数据完成指标?我已经做了一个脚本,它可以正常工作。
但在指标中,为了不出现刹车,我需要以某种方式记住在最后一次迭代中获得数据的那条线。
用 FileTell(返回相应打开文件的文件指针的当前位置)和 FileSeek(将文件指针的位置相对于指定的位置移动指定的字节数)可能会实现 。
谢谢你!我也注意到了这些功能。 还有FileIsLineEnding。我将进一步考虑如何去做。
我们如何定义Ticket_first_order?
将OrderTicket()的值分配 给一个变量。例如:int Ticket= OrderTicket()。然后在OrderSelect中使用这个值。
OrderSelect(Ticket,SELECT_BY_TICKET); .
我们可以用另一种方式来做。我们不会定义票据,我们只是通过尝试(SELECT_BY_POS)找到订单。
我们将得到它。
string Symb=Symbol();
for(i=0;i<=OrdersTotal() ;i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symb)continue;
if(OrderType()==OP_BUY)
{
break;
}
}
}
if(OrderOpenPrice()+10*Point<=Ask)
OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green);
将OrderTicket()的值分配给一个变量。例如:int Ticket= OrderTicket()。然后在OrderSelect中使用这个值。
OrderSelect(Ticket,SELECT_BY_TICKET); .
我们可以用另一种方式来做。我们不定义票据,只是通过尝试(SELECT_BY_POS)找到订单。
会有结果的。
既然这是一个关于初学者问题的话题,我就问一下我的问题......
1.是否有一个下载报价的软件API?最好是一个获取/发布请求。
2.如果没有这种广泛的访问,有哪些最容易解析的平台,可以提供每秒一次的实时访问报价。
3.当然,你可以在任何东西上写自动化。但我还是想知道哪些语言和工具是最方便和最受欢迎的?