在测试器中进行清算 - 页 5

 
JRandomTrader #:

但是!在FORTS工作时,你不应该依赖位置数据。

我的机器人会记录他们的交易,并记住最初的开仓价格(不是最后一次清仓后的价格),并使用它来计算利润、SL,...

顺便说一下,不依赖仓位数据的另一个原因:FORTS是净值化的,几个机器人可以在同一个符号上交易,再加上手动交易。那么,从这个结合的立场来看,有什么实际作用呢?

因此,每个机器人都会记住并 "引导 "其位置。

 
JRandomTrader #:

我给你看了。 以这个最后的平均价格和头寸的数量,新交易的价格和其数量。一切都将被正确计算。

是的,是的,我现在明白了...在问过自己之后--得到了答案 :-)
 
JRandomTrader #:

顺便说一下,不依赖仓位数据的另一个原因:FORTS是净值化的,几个机器人加上人工交易可以在同一个符号上交易。那么,从这个结合的立场来看,有什么实际作用呢?

因此,每个机器人都会记住并 "引导 "其位置。

spc.那里自然有所有这些市场交易和头寸 - SONARELY?(在同一方向)?
 
Roman Shiredchenko #:
spc.自然,所有这些市场交易和头寸都是SONARELY?(在一个方向)?

机器人可以有不同的策略,趋势和反趋势,它们可以在不同的时间框架内工作,所以姿势可以是任何方向。而在MT,你只能看到 "总数"。

 
JRandomTrader #:

机器人可以有不同的策略,趋势和反趋势,它们可以在不同的时间框架内工作,所以姿势可以是任何方向。而在MT,你只能看到 "总数"。

也就是说,你基本上可以只为每个方向保留一个专门的交易记录,就这样......:-)

这当然是很难的...所有的虚拟 - 所有的优点和缺点。只有一个共同的立场...网状物。

这当然是一种嘲弄--如果你用一种乐器做完...

 
Roman Shiredchenko #:

也就是说,你基本上只需为每条业务线保留一份专门的贸易记录,就可以了......:-)

当然,这很难...一切都是虚拟的--所有的优点和缺点。只有一个共同的立场...网状物。

当然,这是一种嘲弄--如果你用一种乐器做完了......

但这里没有很多选择。要么是符号上的一个 "理想 "机器人,要么是多样化--几个真正的机器人。

 
JRandomTrader #:

而且这里没有很多选择。要么是符号上的一个 "完美 "机器人,要么是多样化--几个真正的机器人。

如果我们能提出一个普遍的观点:除了清算后总头寸的开盘价转移外,在交易时还有哪些 "隐藏 "的陷阱需要注意?

基本上有佣金、交换--我想你可以看到它们。而交易和立场的历史可以算作......(这样,根据交易算法,实际位置或其部分 - 只在加号中!)。

你认为我们在交易时还应该注意什么?

 
Roman Shiredchenko #:

我可以提出一个普遍的观点:除了清算后转移总头寸的开盘价之外,在交易时还有哪些 "隐蔽 "的陷阱需要注意?

基本上有佣金、交换--我想你可以看到它们。而交易和立场的历史可以算作......(这样,根据交易算法,实际位置或其部分 - 只在加号中!)。

你认为我们在交易时还应该注意什么?

这种在交易中可见的佣金--只是交易所的佣金。经纪人的佣金在交易中是不可见的。至少,对打开它的经纪人来说是如此。

我通过OnTrade(或OnTradeTransaction)查看交易,立即进行计算并将其写入状态和日志中。

我想补充一下,以备不时之需:你应该记住,一个订单可能会导致几个有部分成交量的交易。

 
JRandomTrader #:

交易中可见的佣金只是交易所的佣金。经纪人的佣金在交易中是不可见的。至少,在开场白中是如此。

我通过OnTrade(或OnTradeTransaction)寻找交易,立即进行计算并将其写入状态和日志中。

我想补充一下,以备不时之需:你应该记住,一个订单可能会导致几个有部分成交量的交易。

谢谢你!!!。
 

还有一个组织问题,如果有人知道如何以最好的方式解决这个问题--请用代码写出来--我将把它转给你。

在一般情况下,如何理解订单周期,一个新的位置 - PROFIT已经开始 - 考虑到位置的平均开盘价(清除改变其价值)。

要清楚的是,我既可以从终端通过钥匙自己,也可以通过机器人与Magik....。

一般来说,我需要一个报告点--计算头寸的平均进入价格。

我是否可以使用这里的数据+例如读取前一个仓位盈利的时间,并从那里获取与真实服务器时间的差异,就像我从终端开始一个周期一样--没有机器人。

我的意思是像这样的事情。

// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
如过去的头寸是正数--那么当前的周期核算就已经开始了。而订单--你必须已经计算了进场价格和成交量来计算总头寸的平均进场价格......

https://www.mql5.com/ru/articles/211


Получение информации по ордерам из истории

Работа с историческими ордерами почти ничем не отличается от работы с действующими ордерами за одним только исключением. Если количество действующих ордеров в кэше 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());
     }

--------------------------------------------------------------

当然,理想的情况是,无论前一个周期的结果如何--盈利或亏损,都应该关闭。

开始 - 新的被标记为在代码中的计算 - 新的当前周期的平均价格,例如,或股份 - 它并不重要...

Ордерa, позиции и сделки в MetaTrader 5
Ордерa, позиции и сделки в MetaTrader 5
  • www.mql5.com
Надежный торговый робот не может быть создан без понимания механизмов работы торговой системы MetaTrader 5. Клиентский терминал получает от торгового сервера информацию о позициях, ордерах и сделках. Чтобы правильно обработать эти данные средствами MQL5 необходимо хорошо представлять как происходит взаимодействие mql5-программы и среды исполнения терминала.