[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 289

 

基本上,这个策略本身是非常长和复杂的,没有必要描述它,这是1点,以创建一个循环,即我需要找到一些东西,而不是总==1,不打开一个不符合要求的位置,即如果它关闭在ST,然后.........open 1,如果关闭在......... тп打开2,条件缺乏在市场上的订单,这是所有。

 
FoxUA:

基本上,这个策略本身是非常长和复杂的,没有必要描述它,它是1点,以创建一个循环,即我需要找到一些东西,而不是总==1,不打开不符合要求的头寸,即如果由st关闭,那么.........open 1,如果由......... тп打开2,条件是市场上的订单不存在,这是所有。


那么你就是不想使用伊戈尔的函数。你需要一个函数来返回最后关闭的订单的类型,以及它被关闭的原因。它不会返回某种类型的最后一个关闭订单的原因。 我现在会试着想办法......。

 
Figar0:


那么你就是不符合你所使用的伊戈尔的功能。你需要一个函数来返回最后关闭的订单的类型,以及它被关闭的原因(tap或sl)。它不会返回某种类型的最后一个关闭订单的原因。我现在会试着想办法......。


如果你有类似于Klimovskoe的东西,只返回最后一个订单关闭的值,我将非常感谢你。
 

试着将这样的函数与Igor的函数结合起来。

//+----------------------------------------------------------------------------+
//|  Версия   : 30.03.2011                                                     |
//|  Описание : Возвращает тип последней закрытой позиции                      |
//|  если Buy 1 , если Sell -1                                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    symbol - наименование инструмента                                       |
//|    magic - MagicNumber                                                     |
//+----------------------------------------------------------------------------+
int LastCloseDeal(string symbol, int magic) 
{
  int lastclosetime=-1;
  int lastcloseticket=-1;
  int lastdealtype=0;

  for (int i=0; i<OrdersHistoryTotal(); i++) 
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; 
    if (OrderSymbol()==symbol || OrderMagicNumber()==magic) 
    {
      if (lastclosetime<OrderCloseTime()) 
      {
        lastclosetime=OrderCloseTime();
        lastcloseticket=OrderTicket();
      }
    }
  }

  if (OrderSelect(lastcloseticket, SELECT_BY_TICKET, MODE_HISTORY)) 
  {
    if (OrderType()==OP_BUY) lastdealtype=1;
    if (OrderType()==OP_SELL) lastdealtype=-1;   
  }
  return(lastdealtype);
}
 

你的这段代码应该是这样的

bool Buystop=isCloseLastPosByStop(NULL,OP_BUY,MagBuy);
bool BuyTake=isCloseLastPosByTake(NULL,OP_BUY,MagBuy);
bool Sellstop=isCloseLastPosByStop(NULL,OP_SELL,MagBuy);
bool SellTake=isCloseLastPosByTake(NULL,OP_SELL,MagBuy);

//--------------------------------------------------------------------------------+
if(total==1) 
 {

   if (LastCloseDeal(Symbol(), MagBuy)==1)

  {
      if(Buystop==True)    OpenPosition(NULL, OP_SELL, Lot,Bid+Sl3*Point, Bid-Tp3*Point,MagBuy);
      if(BuyTake==True)   OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy);      
   }

   if (LastCloseDeal(Symbol(), MagBuy)==-1)

   { 
      if(Sellstop==True)   OpenPosition(NULL, OP_BUY,  Lot, 0, Ask+Tp*Point,MagBuy);
      if(SellTake==True)    OpenPosition(NULL, OP_BUY,  Lot, Ask-Sl*Point, Ask+Tp*Point,MagBuy); 
   }  

}

 
Figar0:

你的这段代码应该是这样的


谢谢你,我可以试一试。
 
你好,请帮助我在指定的点设置虚拟止损。 更准确地说:EA不应该发送新的SL的数据,而应该只是将它们存储在变量中(或其他地方),并不断追踪,追踪,当价格达到一定水平(价格)时,向DC发送信号关闭订单,(一种带有虚拟止损的虚拟追踪停止)。换句话说,专家顾问包括一个从1点到DC服务器的无形水平上的追踪止损... 它是现实的吗?
 
Centuriy:
你好,请帮助我在指定的点设置虚拟止损。 更准确地说:EA不需要发送新的SL数据,而只需将它们存储在变量中(或其他地方),并不断追踪,追踪,当价格达到一定水平时,它将向经纪公司发送一个关闭订单的信号,(一种带有虚拟止损的虚拟追踪止损)。换句话说,专家顾问包括一个从1点到DC服务器的无形水平上的追踪止损...它是现实的吗?


是的,它是真实的,当然了。你看一下未平仓的订单,它们有一个未平仓的价格,例如,我们有一个以X的价格开的买入订单,虚拟止损Y点,所以如果当前价格Z<=X-Y*点,该订单应该被关闭。当然,我们还应该考虑到点差,如果止损不是固定的,而是计算出来的,计算出来的数值必须安全地储存在某个地方,等等。

搜索 "虚拟止损"、"虚拟止损 "等。

 
Figar0:


这当然是现实的。如果我们查看未平仓的订单,它们的未平仓价格将被设定,例如,我们有一个以X价格开立的买入订单,虚拟止损是Y点,所以如果当前价格Z<=X-Y*点,订单将被关闭。当然,我们必须考虑到点差,如果止损不是固定的,而是计算出来的,那么计算出来的数值就必须安全地储存在某个地方,等等。

搜索 "虚拟止损"、"虚拟止损 "等。

我认为我们不能没有自己的某种订单簿记。

创建你自己的订单阵列,并在其中存储所有必要的虚拟停止数据。

 
Figar0:


是的,它是真实的,当然了。你看一下未平仓的订单,它们有一个未平仓的价格,例如,我们有一个以X的价格开的买入订单,虚拟止损Y点,所以如果当前价格Z<=X-Y*点,该订单应该被关闭。当然,我们还应该考虑到点差,如果止损不是固定的,而是计算出来的,计算出来的数值必须安全地储存在某个地方,等等。

搜索 "虚拟止损"、"虚拟止损 "等。

谢谢你的回答,只是追踪止损(trailing stop)的问题,我想追踪最小1点,我想在每一个tick 上向经纪公司发送orderModify - 这只是流氓行为IMHO ))

"如果止损不是固定的,而是计算出来的,那么计算出来的值必须安全地储存在某个地方"。

在哪里存储和如何调用它......我认为它必须是一个变量,或者我错了......