//+------------------------------------------------------------------+ //| Ежеминутная информация об ордерах, открытых за последнее полчаса | //+------------------------------------------------------------------+ #property strictbool RUS=true;
datetime t_pre=0; // Время предыдущего выполнения//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick()
{
if(t_pre+60>=TimeCurrent()) return; // Дождаться 60 секунд после прошлой обработки
t_pre=TimeCurrent(); // Это нужно вынести за цикл - в этом было дело !!!!!!!!!!!!string text;
for(int i=0; i<OrdersTotal(); i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
string ИмяФайла=(string)OrderTicket()+Symbol()+".txt";
Alert(ИмяФайла);
if(OrderOpenTime()+60>=TimeCurrent()) continue; // Пропуск молодых которым меньше 1 минутыif(OrderOpenTime()+1800<=TimeCurrent()) continue; // Пропустк старых которым больше 30 минутif(OrderType()==OP_BUY){if(Bid>OrderOpenPrice())text="P"; else text="L";}
if(OrderType()==OP_SELL){if(Bid<OrderOpenPrice())text="P"; else text="L";}
// Открытие или создание файла и перемещение указателя в конецint Файл= FileOpen(ИмяФайла,FILE_CSV|FILE_READ|FILE_WRITE," ");
if(Файл == -1) { Alert("Ошибка при открытии файла ",ИмяФайла); return; }
FileSeek(Файл,0,SEEK_END);
// Если новый файл записать имя файла и строку заголовков колонокif(FileSize(Файл)==0)
{
FileWrite(Файл,ИмяФайла);
FileWrite(Файл," Время Полу BID Цена ");
}
// Сбор информации и запись в файлFileWrite(Файл, TimeToStr(TimeCurrent()), text,
dstr(Bid), " ", dstr(OrderOpenPrice()));
FileClose(Файл);
}
}
// Преобразование числа double в строку с запятой или точкой в соответствии с локализациейstring dstr(double Цена)
{
if(!RUS) returnDoubleToStr(Цена, Digits);
returnStringSetChar(DoubleToStr(Цена, Digits), StringFind(DoubleToStr(Цена, Digits), "."), ',');
}
有FileSeek(File,0,SEEK_END);并且所有的东西都从新的一行 写到文件中。
问题是有4个文件,我们需要在4个位置上写数据,每个文件都是独立的,每个文件的名称中都有一个位置票,但数据只写到一个,即最后一个文件,最后一个位置上的数据。
文件名的形成是否正确?我不写Ticket=OrderTicket(); File name=_Ticket+Symbol()+".txt",而是写File name=(string)OrderTicket()+Symbol()+".txt";并在开头添加#property strict指令--有助于消除错误。
谢谢你,根据你的建议重新做了名称形成,但还是只写了最后一个位置的数据。
而且,新文件的名称没有变化)我怀疑不是名称的问题,反正最后一个位置的文件被找到了。
为什么它忽略了以前的位置?
1501896125EURUSD.txt
时间 半数 投标价格
2018.02.22 22:53 P 1,23259 0,88322
2018.02.22 22:54 P 1,23259 0,88322
2018.02.22 22:55 P 1,23259 0,88322
2018.02.22 22:56 P 1,23249 0,88322
1501896094EURUSD.txt
时间 半数 投标价格
2018.02.22 22:43 L 1,23212 1,23203
2018.02.22 22:44 L 1,23220 1,23203
2018.02.22 22:44 L 1,23224 1,23203
2018.02.22 22:45 L 1,23244 1,23203
2018.02.22 22:45 L 1,23242 1,23203
2018.02.22 22:46 L 1,23251 1,23203
看......这个:字符串sy="";int op=-1, mn=-1;几乎不需要。我们可以放弃吗?在循环中,与其嵌套if(),不如继续。
1501896125EURUSD.txt
时间 半数出价
2018.02.22.02.22 22:53 P 1,23259 0,88322
2018.02.22 22:54 P 1,23259 0,88322
2018.02.22 22:55 P 1,23259 0,88322
2018.02.22 22:56 P 1,23249 0,88322
1501896094EURUSD.txt
Time Half BID Price
2018.02.22:43 l 1,23212 1,23203
2018.02.22 22:44 l 1,23220 1,23203
2018.02.22 22:44 l 1,23224 1,23203
2018.02.22 22:45 l 1,23244 1,23203
2018.02.02.22 22:45 L 1,23242 1,23203
2018.02.22 22:46 L 1,23251 1,23203
有什么变化吗?看...this: string sy=""; int op=-1, mn=-1; hardly needed ...我们可以放弃吗?在循环中,与其嵌套if(),不如继续。
它不想写在所有的位置上。
目前有7个职位空缺。我已经写了一个文件。
当我的EA在一个图表上开始写第一个和最后一个头寸的数据时,我已经编好了它。现在我只有一个数据,来自第一个位置。
我看不到六个,但我在Alert(NameFile)里有所有的刻度。
它需要什么...
如果(t_pre+60<TimeCurrent()&& _o_t+1800>TimeCurrent()) //从订单开始每半小时一次。这有必要吗?
{
t_pre=TimeCurrent();
该程序包含的后果。
之前把它写在楼梯上的目的是什么?在旧版本的MQL4中,它加快了执行速度。现在已经不重要了
变量_o_t只在2处使用。如果我们用OrderOpenTime()代替它,程序就会变得更清晰、更短,只有2行(声明和赋值)
datetime _o_t; 和
_o_t=OrderOpenTime()。
我知道了--60秒的倒计时必须从循环中取出来
下午好,亲爱的论坛用户。
你能告诉我为什么相同设置的优化和测试有时会产生不同的结果?
我从SQ Tick Downloader下载报价,并通过脚本运行它们
下午好,亲爱的朋友们。
你能告诉我为什么相同设置的优化和测试有时会产生不同的结果?
我再告诉你:当用同一经纪人的真实账户在2个不同的账户上交易时,可能会有不同的结果。
这可能更取决于经纪人。但你能就最初的问题给我一个提示吗?
这可能更取决于经纪人。但你能就最初的问题给出一些建议吗?