[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 591

 
vik-777:

帮我解决一个问题

我对所有关闭的项目进行了抽查

for (int i=0; i<OrdersHistoryTotal(); i++)//对于所有订单
如果(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

然后按神奇数字过滤

如果(OrderMagicNumber()==12)

滤波器满足了3个位置,但我只需要最后一个封闭的位置

想不出来如何只留下最后一个?

谢谢

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
与你的问题有关的内容用下划线表示。
 

同样,非常需要。

帮我解决这个问题。

我是通过所有的平仓位 来选择的

for (int i=0; i<OrdersHistoryTotal(); i++)//对终端的所有订单
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)

事后按神奇数字过滤

如果(OrderMagicNumber()==12)

过滤器匹配3个位置,但我只需要最后一个关闭的位置。

想不出如何只留下最后一个?

谢谢

 
- 做个哑巴真好!Tumtz-tumtz(一首歌的歌词)。
 

请帮助我们!我需要它在关闭旧的订单后,立即以Tp或SL价格开立一个订单。

#property copyright"Copyright © 2010, MetaQuotes Software Corp.
#属性链接 "http://www.metaquotes.net"
#property show_confirm
最大风险=3.extern int MaxRisk
外部 bool Buy=false; //用于打开一个买入订单。
extern bool Sell=true; //打开一个卖单。
在外部,MagicNumber=7749。
外部TP=210。
外部inttern SL=420。

{
double point=MarketInfo(Symbol(),MODE_POINT);//request Point
double Free=AccountFreeMargin()。
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
int pos,total=OrdersTotal();
//----

如果(Buy==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point, "777"+ Symbol(), MagicNumber, 0, DarkGreen)。

购买=false。
}
如果(Sell==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point, "4949"+ Symbol(), MagicNumber, 0, DarkGreen)。

出售=false。
}

for (pos=0; pos<total; pos++)
如果(OrderSelect(pos,SELECT_BY_POS ) ==true)

如果(OrdersTotal()==OP_BUY)
如果(PRICE_CLOSE==OrderTakeProfit()) Buy=true;
if(PRICE_CLOSE==OrderStopLoss())卖出=true。

}
}

如果(OrderSelect(pos,SELECT_BY_POS ) ==true)
如果(OrdersTotal()==OP_SELL)
{
如果(PRICE_CLOSE==OrderStopLoss()) Buy=true;
if(PRICE_CLOSE==OrderTakeProfit()) 卖出=true。

}
} }

//----
return(0);
}
//+------------------------------------------------------------------+




 

伙计们,这里有一个问题,一个EA试图打开一个订单,但价格变化,显示错误的错误价格,我如何能绕过它,让它尝试买入,直到买入?

void CLOSEORDER(string ord)
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY && ord=="Buy")
            OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buy
         if (OrderType()==OP_SELL && ord=="Sell")
            OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
      }   
   }
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
   if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
   if (error==-1) //неудачная покупка OK
   {  
      ShowERROR(error,0,0);
   }

以前是这样的。

Bid,3,CLR_NONE

我加了30,因为我有一个5的标志,但它是无用的。

 
vik-777:

同样,非常需要。

帮我解决这个问题。

我正在抽查所有的封闭项目。



从最后开始,那么第一个匹配的就是那个人。

for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) ==true)


 
Craft:

还有一个烦人的地方,有些部分只有平仓而没有反转,虽然止损和开新仓的条件是一样的。


这些情况可能发生,因为专家顾问中的买入和卖出条件并不相互排斥。尝试在测试器中追踪所需变量的值,根据

if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
   Print("переменная=", значение);
}
 
Pyxlik2009:

伙计们,这里有一个问题,一个EA试图打开一个订单,但价格变化,显示错误的错误价格,我如何能绕过它,让它尝试买入,直到买入?

以前是这样的。

我加了30,因为我有一个5的标志,但它是无用的。

做一个order while(true),检查是否有135个错误,然后RefreshRates()。看,在终端包里有带例子的脚本,一切都在那里解释。
 
alsu:

这需要详细调查,这种情况可能出现,因为EA中的买入和卖出开仓条件并不相互排斥。试着在测试器中沿着以下思路追踪所需变量的值

好的,应该在代码的哪个部分插入这个,如何实际应用?
 
SergNF:

与你的问题有关的内容用下划线表示。
因此,我选择了最后关闭的顺序,我需要最后关闭的魔术师,例如,它是3、6和9行,因此我需要3行,因为它是最后关闭的魔术师。
原因: