// --- определение границ требуемой торговой историиdatetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
Получение информации по ордерам из истории
Работа с историческими ордерами почти ничем не отличается от работы с действующими ордерами за одним только исключением. Если количество действующих ордеров в кэше mql5-программе не может быть больше одного, то результат HistoryOrdersTotal() и количество исторических ордеров в кэше зависит от того, какой объем торговой истории был загружен функцией HistorySelect(start, end), HistorySelectByPosition() или HistoryOrderSelect().
Важно: если торговая история не была загружена в кэш mql5-программы одной из функций HistorySelect(), HistorySelectByPosition() или HistoryOrderSelect(), то работать с историческими ордерами и сделками невозможно. Обязательно запрашивайте требуемую историю сделок и ордеров перед получением данных по торговой истории.
Для примера приведен скрипт, который ищет последний ордер за последний день и выводит по нему информацию.
// --- определение границ требуемой торговой историиdatetime end=TimeCurrent(); // текущее серверное времяdatetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад//--- запросим в кэш программы торговую историю за деньHistorySelect(start,end);
//--- получим количество ордеров в историиint history_orders=HistoryOrdersTotal();
//--- получим тикет ордера из истории, имеющего последний индекс в спискеulong order_ticket=HistoryOrderGetTicket(history_orders-1);
if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
{
//--- статус ордераENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
long order_magic =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
long pos_ID =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
PrintFormat("Ордер #%d: ORDER_MAGIC=#%d, ORDER_STATE=%d, ORDER_POSITION_ID=%d",
order_ticket,order_magic,EnumToString(state),pos_ID);
}
else// неудачная попытка получения ордера
{
PrintFormat("Всего в истории %d ордеров, не удалось выбрать ордер"+
" с индексом %d. Ошибка %d",history_orders,history_orders-1,GetLastError());
}
Надежный торговый робот не может быть создан без понимания механизмов работы торговой системы MetaTrader 5. Клиентский терминал получает от торгового сервера информацию о позициях, ордерах и сделках. Чтобы правильно обработать эти данные средствами MQL5 необходимо хорошо представлять как происходит взаимодействие mql5-программы и среды исполнения терминала.
但是!在FORTS工作时,你不应该依赖位置数据。
我的机器人会记录他们的交易,并记住最初的开仓价格(不是最后一次清仓后的价格),并使用它来计算利润、SL,...
顺便说一下,不依赖仓位数据的另一个原因:FORTS是净值化的,几个机器人可以在同一个符号上交易,再加上手动交易。那么,从这个结合的立场来看,有什么实际作用呢?
因此,每个机器人都会记住并 "引导 "其位置。
我给你看了。 以这个最后的平均价格和头寸的数量,新交易的价格和其数量。一切都将被正确计算。
顺便说一下,不依赖仓位数据的另一个原因:FORTS是净值化的,几个机器人加上人工交易可以在同一个符号上交易。那么,从这个结合的立场来看,有什么实际作用呢?
因此,每个机器人都会记住并 "引导 "其位置。
spc.自然,所有这些市场交易和头寸都是SONARELY?(在一个方向)?
机器人可以有不同的策略,趋势和反趋势,它们可以在不同的时间框架内工作,所以姿势可以是任何方向。而在MT,你只能看到 "总数"。
机器人可以有不同的策略,趋势和反趋势,它们可以在不同的时间框架内工作,所以姿势可以是任何方向。而在MT,你只能看到 "总数"。
也就是说,你基本上可以只为每个方向保留一个专门的交易记录,就这样......:-)
这当然是很难的...所有的虚拟 - 所有的优点和缺点。只有一个共同的立场...网状物。
这当然是一种嘲弄--如果你用一种乐器做完...
也就是说,你基本上只需为每条业务线保留一份专门的贸易记录,就可以了......:-)
当然,这很难...一切都是虚拟的--所有的优点和缺点。只有一个共同的立场...网状物。
当然,这是一种嘲弄--如果你用一种乐器做完了......
但这里没有很多选择。要么是符号上的一个 "理想 "机器人,要么是多样化--几个真正的机器人。
而且这里没有很多选择。要么是符号上的一个 "完美 "机器人,要么是多样化--几个真正的机器人。
如果我们能提出一个普遍的观点:除了清算后总头寸的开盘价转移外,在交易时还有哪些 "隐藏 "的陷阱需要注意?
基本上有佣金、交换--我想你可以看到它们。而交易和立场的历史可以算作......(这样,根据交易算法,实际位置或其部分 - 只在加号中!)。
你认为我们在交易时还应该注意什么?
我可以提出一个普遍的观点:除了清算后转移总头寸的开盘价之外,在交易时还有哪些 "隐蔽 "的陷阱需要注意?
基本上有佣金、交换--我想你可以看到它们。而交易和立场的历史可以算作......(这样,根据交易算法,实际位置或其部分 - 只在加号中!)。
你认为我们在交易时还应该注意什么?
这种在交易中可见的佣金--只是交易所的佣金。经纪人的佣金在交易中是不可见的。至少,对打开它的经纪人来说是如此。
我通过OnTrade(或OnTradeTransaction)查看交易,立即进行计算并将其写入状态和日志中。
我想补充一下,以备不时之需:你应该记住,一个订单可能会导致几个有部分成交量的交易。
交易中可见的佣金只是交易所的佣金。经纪人的佣金在交易中是不可见的。至少,在开场白中是如此。
我通过OnTrade(或OnTradeTransaction)寻找交易,立即进行计算并将其写入状态和日志中。
我想补充一下,以备不时之需:你应该记住,一个订单可能会导致几个有部分成交量的交易。
还有一个组织问题,如果有人知道如何以最好的方式解决这个问题--请用代码写出来--我将把它转给你。
在一般情况下,如何理解订单周期,一个新的位置 - PROFIT已经开始 - 考虑到位置的平均开盘价(清除改变其价值)。
要清楚的是,我既可以从终端通过钥匙自己,也可以通过机器人与Magik....。
一般来说,我需要一个报告点--计算头寸的平均进入价格。
我是否可以使用这里的数据+例如读取前一个仓位盈利的时间,并从那里获取与真实服务器时间的差异,就像我从终端开始一个周期一样--没有机器人。
我的意思是像这样的事情。
如过去的头寸是正数--那么当前的周期核算就已经开始了。而订单--你必须已经计算了进场价格和成交量来计算总头寸的平均进场价格......https://www.mql5.com/ru/articles/211
--------------------------------------------------------------
当然,理想的情况是,无论前一个周期的结果如何--盈利或亏损,都应该关闭。
开始 - 新的被标记为在代码中的计算 - 新的当前周期的平均价格,例如,或股份 - 它并不重要...