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

 
Diubakin:
如果你这样做,所有的怪异现象都应该消失。

要删除 "额外 "条件,你可以这样做。

    int i, ot = OrdersTotal();
    double min = 1000.0;
    int min_ticket=0;
    for (i=ot - 1; i>= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderType()!=OP_BUY) if (OrderType()!=OP_SELL) continue;
        if (min <= OrderLots()) continue;
        min = OrderLots();
        min_ticket=OrderTicket();
    }
 
artmedia70:

怎么说呢...基于伊戈尔-金所做的东西...只有你的一个特点...其他的都是一样的...

我想,是这样的。

而我们称之为。

来计算当前符号的买入和卖出数量,用Magic

Artyom,当然,我从Kim开始,删除对我来说不必要的检查,增加对我来说必要的任务。不是要重新发明轮子!谢谢你的纠正,我将更大胆地删除不必要的!而且我不需要检查魔术师和符号,因为有时我干预 "用我的手",而不是之前的多币种对我来说还!"。
 
TarasBY:

要删除 "额外 "条件,你可以做以下工作



伊戈尔,你是对的。这样更有可读性...。
 
borilunad:
Artyom,当然,我来自金,删除不必要的检查,添加我需要的任务。不是为了重新发明一辆自行车!谢谢你的纠正,我将更大胆地删除不必要的!而且我不需要检查魔术师和符号,因为有时我 "手动 "干预,而不是之前的多币种对我来说还!"。

你必须检查是否(OrderMagicNumber()==0)...这是一个 "手动 "检查。

如果我们想干扰其他EA对另一个符号的工作,我们可以删除OrderSymbol()的检查。

我留下了最低限度的必要检查,以便在单个字符上工作,有自己的位置/顺序。如果你想同时触及什么 "处理",那么你需要添加一个magic==0的检查。

 
artmedia70:

那么你应该做一个检查,如果(OrderMagicNumber()==0)...是对 "手动 "的检查。

如果我们想干扰其他EA对另一个符号的工作,我们可以删除OrderSymbol()的检查。

我已经留下了在一个符号上工作的最低要求的检查,有自己的位置/顺序。如果你也想 "用手 "摸一下,那么你需要增加一个对Magik==0的检查。

我被允许这样做,因为它是!但我要注意,特别是用!!!=和连续体一点也不慢!。谢谢你!
 
solnce600:

非常感谢您的帮助。一切都很好。但......

1.在某些5分钟内,有超过1个订单打开。

2.有些订单被止损单关闭,其价格与代码中规定的价格不同。


好吧,来吧,那么一切都很简单--在已关闭的订单中做同样的检查)而关于收盘价--对不起,它是正确设置的,然后服务器以什么价格真正关闭它。
int start()

{

 double Price=iOpen (Symbol (),PERIOD_M5,0)+300*Point;        
 double SL=NormalizeDouble (Price-300*Point, Digits);         
 double TP=NormalizeDouble (Price+150*Point, Digits);    
 
 int last_order_bar = 0;
 int ot = OrdersTotal();

 if (ot>0) //если есть ордера в рынке
 {
   if (OrderSelect (ot-1,SELECT_BY_POS)) //выбрали последний ордер
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
         last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний ордер (если он есть)
 }
 
 int last_hist_order_bar = 0;
 int oht = OrdersHistoryTotal();

 if (oht>0) //если есть ордера в рынке
 {
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY)) //выбрали последний закрытый ордер
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
         last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний закрытый ордер (если он есть)
 }
 
 if (ot==0 || last_order_bar>0) //если ордеров нет либо последний открыт не на текущем баре
    if (oht==0 || last_hist_order_bar>0) //если закрытых ордеров нет либо последний из закрытых был открыт не на текущем баре
       if (Bid>=Price)                       //если текущая цена доползла до цены открытия
          int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP );

}
 
alsu:
嗯,在已关闭的订单中做同样的检查很容易)而关于收盘价--对不起,它是正确设置的,然后由服务器决定以什么价格关闭。

非常感谢您,很抱歉给您带来不便。
 
alsu:
那么收盘价呢--对不起,它的设置是正确的,然后由服务器决定它到底会以什么价格收盘。

再次感谢您的所有帮助。但.....

在一年的时间里,我只开了一个订单,也就是我遇到的第一个订单。

而在这个时期,还有很多带参数的蜡烛图可以开单。

http://clip2net.com/s/2ToEo


我将无法关闭它。 谢谢你。

 
solnce600:

再次感谢您的所有帮助。但.....

在一年的时间里,我只开了一个订单,也就是我看到的第一个订单。

而在这个时期,还有很多带参数的蜡烛图可以开单。

http://clip2net.com/s/2ToEo


谢谢你。


纠正我的打字错误--第二次

 if (oht>0) //если есть ордера в рынке
 {
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY)) //выбрали последний закрытый ордер
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL) //проверили тип
         last_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ()); //запомнили, на каком 5-минутном баре открыт последний закрытый ордер (если он есть)
 }

我需要

last_hist_order_bar = iBarShift (Symbol (),PERIOD_M5,OrderOpenTime ());
 
alsu:

纠正我的打字错误--第二次

它应该是这样的。


好的,非常感谢你。
原因: