在MQL5和MQL5云计算网络中,应该增加哪些内容来增加对通用数学计算的支持? - 页 6

 
Renat:

事情是这样的,雷纳特。

MT5清楚地了解什么时候激活了止损,什么时候激活了获利。// 这可以从订单评论中看出,而且从平台处理本身就可以看出。

这就是为什么我们有这样的要求(不断)。- 我们希望在激活SL或TP时,在OnTradeTransaction 中出现适当的标志。


但如果由于缺乏适当的绑定架构,这是不可能的(即使是理论上),我们最好只是说,平台架构不允许我们在被发送到这个动作的订单中放一个标志,以确认它是一个SL或TP。

尽管对你来说,没有 "没有什么是不可能的 "这种说法。你是元引号 :)

 

换句话说,看一下交易结构https://www.mql5.com/ru/docs/constants/structures/mqltradetransaction

我将添加一个TRADE_ACTION字段

struct MqlTradeTransaction
  {
   ulong                         deal;             // Тикет сделки
   ulong                         order;            // Тикет ордера
   string                        symbol;           // Имя торгового инструмента
   ENUM_TRADE_TRANSACTION_TYPE   type;             // Тип торговой транзакции
   ENUM_TRADE_ACTION               action,            // Тип события, по какой причине выставлен ордер
   ENUM_ORDER_TYPE               order_type;       // Тип ордера
   ENUM_ORDER_STATE              order_state;      // Состояние ордера
   ENUM_DEAL_TYPE                deal_type;        // Тип сделки
   ENUM_ORDER_TYPE_TIME          type_time;        // Тип ордера по времени действия
   datetime                      time_expiration;  // Срок истечения ордера
   double                        price;            // Цена 
   double                        price_trigger;    // Цена срабатывания стоп-лимитного ордера
   double                        price_sl;         // Уровень Stop Loss
   double                        price_tp;         // Уровень Take Profit
   double                        volume;           // Объем в лотах
  };
下订单的原因,分别是
触发的SL
触发的TP
通过止损退出一个头寸

和其他人,如果有的话//虽然这可能是我们所需要的一切
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торговой транзакции - Документация по MQL5
 
sergeev:

这里有一个观点,雷纳特。

MT5清楚地了解 何时激活止损,何时激活止盈。// 这可以从订单的评论中看出,而且从平台本身也可以看出。

这就是问题所在:他不明白,也不应该明白。

一切都要经过执行队列,订单被分成简单的买入/卖出,有通往流动性供应商和交易所的网关。不知道在现实中会如何执行(包括部分)。如果我们突然宣布我们保证停止旗帜,papaklass明天会义愤填膺地指责我们,"这对我没有用!"。

 
Renat:

这就是问题所在:在现实中,它没有也不应该有。

一切都在执行队列中运行,订单被分成简单的买入/卖出,并通过网关进入流动性供应商和交易所。

是的,它正在分裂。

但这种拆分动作需要相当特殊的动作--激活止损/叠加利润。而这些动作是由MT的服务器处理 的,而不是由客户终端处理的。

即使在MT中没有激活止损,其结果仍然是为MT5创建一个真正的订单或事件。

我意识到,我不能进入MT5服务器的内部,但你只要再确认一次。是否可以通知有关行动,在此基础上下订单。

一旦服务器(或网关)激活了止损/止盈/止损等,回应就是无论如何都要下单。 //没有订单什么都不会发生!//没有订单什么都不会发生。

而在这里,在这个订单上,放上适当的标志--下这个订单 或事件的原因

 
也许应该引入一个新的结构,专门用于TradeTransaction?
 
pronych:
也许应该引入一个新的结构,只针对TradeTransaction?

它不是那么新:)它非常完整。

只缺少两个字段

- 位置标识符
- 下订单的原因

 
sergeev:

是的,它分裂了。

但这种分割的行动是非常具体的--激活止损/止盈。而这个动作是由MT服务器处理 的,而不是由客户终端处理的。

答案很简单--不能保证100%的标记。

因为有许多触发的来源和发起者,而且它不是唯一的交易服务器。

 
Renat:

答案很简单--不能保证100%的标记。

因为有这么多的来源和触发因素,而这绝不是唯一的贸易服务器。

止损的激活是否真的由几个交易服务器处理?

在我看来,只有一个交易服务器就足以满足这一目的。

对于激活,创建一个订单,并通知平台其创建。//由一个外部网关提供
然后,它被浇筑。而交易出现。
可以理解的是,订单可能无法完成,剩余部分将被撤回。
但在创建这个订单的时候,我们可以在交易中加入一个标志,说这是一个止损订单。
最重要的是事件本身,这是一个止损的订单。

或者在MT中,如果止损是由网关处理的,可能会有没有订单的交易?

但你更清楚,我不会争论。这是一个非常微妙的观点。
 

papaklass:

而谁在做所有的谈话?

肯定是你。

你想耍赖,有什么用?

表现自己。

 
Renat:

就我们而言,我们考虑的是没有终端的代理人之间的独立通信。例如,其中一个代理可以生成初始数据 并通过fordcast将其发送给其他

没有终端的参与,这是好事。

谁将为这个 "代理人之一 "生成数据?脚本或指标能够做到吗?

代理人之间的沟通是为了什么,如果可以的话,给不懂的人指点一下。

已经写了一个脚本来测试数学计算能力,但缺少一些功能)

// все данные расчетов агентов складываются в массив структур
struct MqlCloud
  {
   enum STATUS {wait,ready,error,free};
   STATUS status; // статус выполнения задачи - выполнена, выполняется, ошибка выполнения
   double input_data[]; // массив входных данных
   double out_data[];   // массив выходных данных
  };
  
long id=AccountInfoInteger(ACCOUNT_LOGIN);  

double in_data[100];
MqlCloud result[10000];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   CloudInit(id,"myprog.ex5");  // id - это кто будет платить за Cloud, myprog.ex5 - программа которая будет выполнять расчеты
   CloudData("file.dat");       // file.dat - файл с неизменными данными для расчета
   for(uint i=0; i<10000; i++)
      {
       //
       // формируем массив входных данных для расчета
          for(int n=0; n<ArraySize(in_data); n++) in_data[n]=MathRand()/SHORT_MAX; 
       //
       CloudCalculat(i,in_data); // здесь i - номер задачи, input_data - массив переменных входных данных
      }
   // выводим максимальный результат
   double max_result=0.0; 
   for(uint i=0; i<10000; i++)
      {
       if(result[i].status!=ready)
         {
          i--;
          Sleep(1000);
          continue;
         }
       max_result=MathMax(max_result,result[i].out_data[0]);
      }
   Print("Max result = ",ArrayMaximum(result[0].out_data));
  }
  
//+------------------------------------------------------------------+
void OnCloudPass(uint num_mission)
  {
   // анализируем результат выполнения задачи по ее номеру, если нужно
   double s=result[num_mission].out_data[0];
  }
//+------------------------------------------------------------------+

void CloudInit(long ID, string programm_name) {}
void CloudData(string file_dat) {}
void CloudCalculat(uint num_mission, double & idata[]) {}