在贸易交易中的处理 - 页 5

 
fxsaber:

傻子。

我以为你是指你。

发生了什么事?"如果他愿意,他会想出办法的。"?

 
fxsaber:

对我来说,在一个帖子里回复比在几十个帖子里 "推荐 "更容易。

如果他想,他就会想出办法。

我曾经想...但你的代码是另一回事。
 
Alexey Viktorov:
从前,我想...但你的代码是世界上的东西。

在这种情况下,你只需要有一点MT4/5的知识。

 
fxsaber:

在这种情况下,你只需要有一点MT4/5的知识。

不幸的是,我知道的不多,只有一点点。

我曾经告诉过你,你把你的代码插进插出,就像每个桶里的屁股塞。那些需要它的人已经使用了很长时间,有些人甚至为它做广告。但在不是很有必要的情况下强加于人,简直是不礼貌的。特别是当一个人想了解并进入mql5的编程,而不是通过技巧。

 
Alexey Viktorov:

不幸的是,我知道的不多,只有一点点。

我已经告诉过你一次,你把你的代码插在每个桶里做生意,没有任何理由。那些需要它的人已经使用了很长时间,有些人甚至为它做广告。但在不是很有必要的情况下强加于人,简直是不礼貌的。特别是当一个人想了解并进入mql5的编程,而不是通过技巧。

关于交易、自动交易系统和交易策略测试的论坛

在贸易交易中的处理

fxsaber, 2019.02.08 13:24

给我看看支部作者问题的解决方案。

你看,当你做出一些断言时,以某种方式在实践中支持它们也不失为一个好主意。在几页中没有出现OnTradeTransaction的解决方案。如果有的话,很快就会明白为什么给定的解决方案是这样的,而不是相反。解决方案应该显示逻辑,而不是地狱。如果我去掉这个插件,源代码的逻辑不会有一点损失。而且你只需要理解逻辑(想法),没有别的。

我同意这种说法。一旦理解了逻辑,就会扔掉所有的包括,创造自己的。这正是建议的方式:掌握的不是一个inlude,而是通过代码来展示,而不是吓唬人,其解决方案需要的任务如何能够工作。

 

在这里,我又回到了问题的源头。问题也随之而来。

关于交易、自动交易系统和交易策略测试的论坛

在贸易交易中的处理

Ilya Child, 2019.02.07 20:08

晚上好。

伙计们,请帮助解决这个问题。这个问题可能并不新鲜,但我还没有找到任何明确的解决方案(无论是在实践中,还是在论坛上)。

在终端中对2个不同的仪器 运行2个不同的机器人。各地的魔法是不同的。机器人放置待定限额,程序OnTradeTransaction 允许我检测一个交易,并使用该交易放置待定止损单。

以下是贸易交易的代码

case TRADE_TRANSACTION_DEAL_ADD:
        {
         drop_info2("TRADE_TRANSACTION_DEAL_ADD\r\n"+TransactionDescription(trans));
         if((trans.deal_type==DEAL_TYPE_BUY || trans.deal_type==DEAL_TYPE_SELL) && trans.order!=0)
           {
            if(getIsDealOfExpert(trans.deal)) //функция проверки принадлежности сделки к роботу
              {
               drop_info2("Сделка наша");
               analyzeFilledOrder(trans.order,trans.volume); //процедура по выставлению отложенных стоп ордеров
              }
           }
        }
      break;

这是检查该交易是否属于机器人的函数的代码

bool getIsDealOfExpert(ulong dealTicket)
     {
      if(HistoryDealSelect(dealTicket) && HistoryDealGetInteger(dealTicket,DEAL_MAGIC)==magic_number && HistoryDealGetString(dealTicket,DEAL_SYMBOL)==symbol)
         return true;
      else
         return false;
     }

这是待定止损单的程序代码

void analyzeFilledOrder(ulong orderTicket,double volume)
  {
   bool isFindOrder=false;
   string fullComment;
   ENUM_ORDER_TYPE orderType;
   if(getIsOrderOfExpert(orderTicket,true)) //Если ордер из сделки уже в истории
     {
      fullComment=HistoryOrderGetString(orderTicket,ORDER_COMMENT);
      orderType=ENUM_ORDER_TYPE(HistoryOrderGetInteger(orderTicket,ORDER_TYPE));
      isFindOrder=true; //локальная переменная, если нашли в истории
     }
   if(!isFindOrder && getIsOrderOfExpert(orderTicket,false)) //Если не нашли ордер в истории и ордер есть не в истории
     {
      fullComment=OrderGetString(ORDER_COMMENT); 
      orderType=ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE));
      isFindOrder=true; //локальная переменная, если нашли не в истории
     }
   if(isFindOrder) //если хоть где-то нашли, то выставляем отложенные стоп ордера
     {
     //выставляем стоп ордера

这是搜索历史中的订单和历史外的订单的函数代码

bool getIsOrderOfExpert(ulong OrderTicket,bool isHistory)
     {
      bool is_expert=false;
      //если ордер находится в истории
      if(isHistory)
        {
         if(HistoryOrderSelect(OrderTicket) && HistoryOrderGetInteger(OrderTicket,ORDER_MAGIC)==magic_number && HistoryOrderGetString(OrderTicket,ORDER_SYMBOL)==symbol)
            is_expert=true;
        }
      else
        {
         if(OrderSelect(OrderTicket) && OrderGetInteger(ORDER_MAGIC)==magic_number && OrderGetString(ORDER_SYMBOL)==symbol)
            is_expert=true;
        }
      return is_expert;
     }

我将按照终端接收的顺序在日志文件中输出关于传入交易的信息。现在我有一个问题,我在用模拟账户交易时遇到过。

有时交易的顺序如下 TRADE_TRANSACTION_ORDER_DELETE, then TRADE_TRANSACTION_DEAL_AD, then TRADE_TRANSACTION_HISTORY_AD。在这种情况下,止损单往往不会在交易执行后下达。我想这是因为该订单已经被删除,但还没有被添加到历史中。这意味着我们无法在历史或终端中找到该交易的订单。虽然这很值得怀疑,但事实是没有下止损单,因为机器人在所有维度搜索订单后没有找到它(isFindOrder=false)。交易的顺序可能是正确的,但订单仍然无处可寻。 在所有情况下,机器人都能正确检测到交易,但没有进入下单阶段。然而,它也偶尔会正确工作,下单

我已经尝试了不同的方法,没有任何效果。我现在考虑在待定下单程序开始时增加一个1秒钟的间隔。我不知道还有什么地方可以挖掘。

请分享你的经验和想法。

我怎样才能将突出的内容与下面这句话协调起来。

关于交易、自动交易系统和策略测试的论坛

在贸易交易中的处理

Ilya Child, 2019.02.07 20:20

我忘了补充,模式是网状的。这个位置对所有机器人来说都是一样的。也就是说,一个机器人买了一个头寸,第二个 买了,TRADE_TRANSACTION_DEAL_ADD事件以相反的顺序出现,最终第一个机器人没有看到它。

是的,而且我在逻辑上需要从交易中获得对订单的评论,位置在这里没有什么帮助。

我们不要注意这个错别字,一个买了,另一个买了...最主要的是,似乎两个EA在一个符号上工作,账户类型净值...或者,也许我不明白什么?

 
Alexey Viktorov:

我们不要注意这个错别字,一个买了,另一个买了...最主要的是,看起来好像有两个EA在同一个工具上工作,账户类型为净值...或者,也许我不明白什么?

在一个网状符号上有几个EA是正常的。比如说,织网的。所以很有可能净值头寸为零,但有两个SL和两个TP。这个问题在上面有明确的表述。

 
fxsaber:

在一个单一的网状符号上,多个EA是常态。例如,净值化头寸。所以很有可能净值头寸为零,但有两个SL和两个TP。这个问题在上面有明确的表述。

我们可以猜测任何我们喜欢的东西。我想听听 "运输局长 "的意见。毕竟,我引用了他的帖子。

 
Alexey Viktorov:

我们想怎么编就怎么编。我想听听运输经理的意见。我是在引用他的话。

我想老板已经被 "吓到 "了,他不会再出现了 :)

 
Илья Ребенок:

我不太明白你的意思。下面是我的交易处理

关于交易中的订单状态。你应该意识到,这不是我自己编造的。在所有deal_add交易中,这是订单的状态。请注意,这是一个市场订单,它曾经是一个挂单。

现在我们有另一部分不理解的地方。一笔deal_add交易飞来,而该头寸没有出现,不存在的头寸上的挂账被放置。

已添加。

发送了Deal_add交易,但头寸还没有被放置,而一个不存在的头寸的挂单已经被放置。交易类型为卖出,订单类型为买入。尽管最初的限制是Sell_limit

显然,要么是旧的信息没有在某个地方被清除,要么是未初始化的信息被占用。

如果我有一个deal_add,这个订单通常已经在历史中,或者已经被删除,但还没有出现在历史中。

虽然也有这样的情况,即订单仍然存在,然后它处于放置状态。

但在这个时候,它几乎不可能。

选择订单 或故事的地方检查它们是否真的被选中。