[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 47

 
Tiken123:

如果你知道用SL计算关闭头寸的总损失余额和开放盈利交易的总余额的功能,请来信。

损失余额的计算应从最后的最大存款价值开始

你的问题与前一个问题有些类似,所以我对前一个答案中的函数做了一些调整。我承认我没有测试过,但它应该可以工作。在全局层面申报的变量利润和损失应分别显示平仓 的总利润和损失。

如果你也需要对未平仓的订单这样做,添加第二个for循环,不是根据历史记录,而是根据OrdersTotal()标准来选择它们:for(int n=1; n<=OrdersTotal(); n++)

并将得到的数值加入到相同的变量利润和损失中。

//+----------------------------------------------------------------------------+
// Прибыльно или убыточно закрылся последний ордер, и возврат типа такого ордера
int fHistory(){
  profit = 0; loss = 0;
  for(int i=OrdersHistoryTotal(); i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() > 0 ) profit = profit+OrderProfit(); // Если прибыль по посл.ордеру - суммируем

        if(OrderProfit() < 0 ) loss = loss + OrderProfit();   // Если убыток по посл.ордеру - суммируем

     }
  }
  return(-1);
}
 
Twilight:

例如,我需要知道一个待定的买入限价是否被触发,如果被触发,在什么价格,然后设置一个新的限价。

如果使用OrderType()函数在每个tick上有一个OP_BUYLIMIT类型的订单,当这个类型消失时,意味着这个订单已经打开,成为OP_BUY。这里 列出了所有6种类型。使用OrderOpenPrice()函数,你可以找出订单是以什么价格开仓的。
 
Twilight:

我如何知道一个订单是否已经触发了追踪止损,并在追踪止损被触发时下新的订单?

你的意思是要关闭订单还是要修改订单?
如果关闭,你需要知道它是否刚刚关闭?还是以止损方式收盘?(它可能在TakeProfit和OrderClose()或OrderCloseBy()时关闭)
 

这是我的新酒吧控制功能。

bool IsNewBar()
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

其中,i_trading_TF 是一个在全局范围内声明的变量。因此,当我在图表上设置我的专家顾问时,我可以在弹出的窗口中设置这个变量的值,从而设置要控制的条形开口的时间框架。

我在一个专家顾问中看到了一个类似的函数,但在函数头中有一个正式参数。在这里,它是。

bool IsNewBar(int i_trading_TF)
{
  if(bartime != iTime(Symbol(),i_trading_TF,0))
  {
    bartime = iTime(Symbol(),i_trading_TF,0);
    return(true);
  }
  
  return(false);
}

时间框架是通过函数参数传递的。但是,如果i_trading_TF 变量是在全局层面上声明的,我认为通过形式参数传递它是没有意义的,因为它的可见性不受限制

请对这一点进行评论。

第一个选项对我来说也是可行的,但奇怪的是,有些程序员有一个习惯,即使是那些我自己不会做的函数,也会塞进形式化的参数。

 
pu6ka:
在每个tick上,使用OrderType()函数监测OP_BUYLIMIT类型的订单的存在, 当这个类型消失时,意味着订单已经打开并变成OP_BUY类型这里 列出了所有6种类型。使用OrderOpenPrice()函数,你可以找出订单是以什么价格开仓的。
它不一定是这样。它可以被手动杀死。相反,有必要记住订单的票据;只要我们发现没有这个票据的订单,而出现了相同票据的市场位置 - 那么是的,它被触发了...
 
hoz:

这是我的新酒吧控制功能。

其中,i_trading_TF 是一个在全局范围内声明的变量。因此,当我在图表上设置我的专家顾问时,我可以在弹出的窗口中设置这个变量的值,从而设置我想控制的条形开口的时间框架。

我在一个专家顾问中看到了一个类似的函数,但在函数头中有一个正式参数。在这里,它是。

时间框架是通过函数参数传递的。但是,如果i_trading_TF 变量是在全局层面上声明的,我认为通过形式参数传递它是没有意义的,因为它的可见性不受限制

请对这一点进行评论。

第一个选项对我来说也是可行的,但奇怪的是,有些程序员有一个习惯,即使是那些我自己不会做的函数,也会塞进形式化的参数。

如果EA分析了几个框架,并且每一个框架都必须形成一个新的条形图,这就有意义了。

这还不是全部,让我们在转移的参数中加入乐器的名称

bool IsNewBar(string Symb,int i_trading_TF)
{
  if(bartime != iTime(Symb,i_trading_TF,0))
  {
    bartime = iTime(Symb,i_trading_TF,0);
    return(true);
  }
  
  return(false);
}
并分析一个新的酒吧形成的事实,任何工具,期间。
 
artmedia70:
不一定。它也可以被手动杀死。相反,你需要记住挂单的票据;只要发现该票据的挂单丢失,并且出现相同票据的市场头寸,那么是的,它就会被触发......

是的,这更正确。但我们可以像这样在测试器中检查这个想法。为了追踪四种类型的挂单,我们需要4个额外的变量来追踪点子。尽管如果一种类型有多个待定,那么你肯定应该为门票输入一个变量。
 
r772ra:

如果EA分析了几个框架,并且每一个框架都需要形成一个新的条形的事实,这是有意义的。

这还不是全部,让我们在参数中加入乐器的名称

并分析一个新的酒吧形成的事实,任何符号,期间。

你认为将一个符号 "涉及 "到 "寻找新酒吧 的机制 "中是合理的吗?:)))
 
TarasBY:
你认为将一个符号 "卷入""寻找新酒吧的机制 "中是否合适?:))

如果能对新酒吧 进行普遍控制,那将是很有意思的。顺便说一句--一切都在那里,因为
 
Vinin:

如果能对新酒吧进行普遍控制,那就很有意思了。顺便说一句--一切都在那里,因为
你是在说 "考虑 "和DC吗?;)