任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 191

 
yan720:

谢谢你的回答。我自己也很惊讶,这样的问题竟然出现了。虽然,也许我误解了我所看到的,也误解了引起这个问题的原因。

我现在正在看其他人的代码,看看用什么方法(与我的不同,也许更有效)来实现某些算法。现在我正在看臭名昭著的伊兰1.6专家顾问(附件)。我可以看出,它是由各种零件组装起来的,然后再进行重建。但是第337行包含了一个用户定义的尾随止损功能(尽管其使用的标志在开始时被强行清除了)。这个函数在第52行被调用。

我的问题是,上面提到的追踪止损通过止损来修改未平仓的 订单(可能有几个),保持其最初的止盈,但对这些订单设置相同的值(AveragePrice,在第173和178行计算)作为平仓价(OrderModify函数的第二个参数)。

或者,在修改未平仓订单时,该参数(未平仓价格)是否被服务器简单地忽略了,服务器可以设置任何价格?

当修改一个市场头寸时,价格应被设置并等于开盘价: OrderOpenPrise()

PS 如果我是你,我不会在这段代码中寻找 "高效的算法"--看起来这个人在写代码时并不真正了解他在那里做什么...

 
转到
 Alert("Исполнение программы");
    double p[100];
    int i =0;
    int n = OrdersTotal ();
    int t =0;
    
    for (i=0; i<=n+1; i++)
    {
    
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
     {
     
      p[i+1] = OrderProfit();      // р - це прибуток ордера
     
     } 
    }
    for (i=0; i<=n+1; i++)
    {
    if (p[i+1]>0)                  // якщо ордер прибутковий, то його 
    {
      Alert("Є прибуток ордер ",i+1);
      OrderSelect(i+1,SELECT_BY_POS,MODE_TRADES); 
      Alert("Маємо помилку ",GetLastError());
      Alert("Вибрали ордер ",i+1);
      double ld_Price;
      if (OrderType() == 0) ld_Price = NormalizeDouble (Bid, Digits);
      else ld_Price = NormalizeDouble (Ask, Digits);
      OrderClose (OrderTicket(), OrderLots(), ld_Price, 2);  // треба зачинити 
      Alert("Маємо помилку ",GetLastError());
      Alert("Закрили ордер ",i+1); 
       if ( OrderType()==OP_BUY)                              //  в залежності від того, якого типу ордер ми зачинили
       { 
        Alert("Ордер типу бай");
        OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point);   // змінюється порядок відкривання наступних ордерів
        Alert("Відкрили ордер типу селл");
        Sleep(10000);
        OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
        Alert("Відкрили ордер типу бай");
        }else
      {
        OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point);
        Alert("Відкрили ордер типу бай");
        Sleep(10000);
        OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid-25*Point,Ask+25*Point);    
        Alert("Відкрили ордер типу селл");
      }
    } 
   } 
    Alert("Последняя ошыбка ",GetLastError()); 
//----
   return(0);
  }

发现 "愚蠢 "是仁慈的,请怜悯一个被帕斯卡尔折磨的人。

 
artmedia70:
当修改一个市场头寸时,价格必须被设置并等于头寸的开盘价:OrderOpenPrise()

那么这个功能,在你看来,将无法工作?我没有测试过它,但在我看来,它是工作代码的一部分(这个伊兰显然是从充其量是调试过的东西重建的)。还是说它仍然是一个蹩脚的代码?

void TrailingAlls(int pType, int stop, double AvgPrice) {
   int profit;
   double stoptrade;
   double stopcal;
   if (stop != 0) {
      for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
         if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
            if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) {
               if (OrderType() == OP_BUY) {
                  profit = NormalizeDouble((Bid - AvgPrice) / Point, 0);
                  if (profit < pType) continue;
                  stoptrade = OrderStopLoss();
                  stopcal = Bid - stop * Point;
                  if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal > stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Aqua);
               }
               if (OrderType() == OP_SELL) {
                  profit = NormalizeDouble((AvgPrice - Ask) / Point, 0);
                  if (profit < pType) continue;
                  stoptrade = OrderStopLoss();
                  stopcal = Ask + stop * Point;
                  if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Red);
               }
            }
            Sleep(1000);
         }
      }
   }
}
 
你好,你需要写一个 关于3蜡烛策略的专家顾问。交易是在清除了市场噪音的Renko图表上进行的。当三个连续的条形图在同一方向上打开一个买入或卖出的订单,止损放在前面的条形图的顶部,关闭蜡烛后在prevedshego条形图上采取止损。
 
artmedia70:

PS 如果我是你,我不会在那段代码中寻找 "高效的算法"--看起来那家伙在写代码时并不真正了解他在那里做什么...

是的,代码是非常具体的,有很多冗余,不仅如此。但我感兴趣的不是算法本身,而是实现算法背后的想法的方法。我看的是总体情况,或类似的东西。在各个函数中投入了什么,同一个拖曳臂是如何实现的,与我自己的相比,等等。我是自学成才的,它对我来说只是有用而已 :)
 
artmedia70:
在正确的地方--那是哪个地方?


例如,一个订单已经在1200点了......而价格例如在下沉,星星已经排列好了,所以在这个地方必须下一个订单......而订单已经在那里了,不要把余额降低到所需的余额以下,以免每个人都下2个订单,例如
 
yan720:

那么你认为这个功能就不能用了吗?我没有测试过它,但在我看来,它是工作代码的一部分(这个伊兰显然是从充其量是调试过的东西重建的)。还是说它仍然是一个蹩脚的代码?

嗯......这个代码不是真的。至少是这样。

 
该问题的实质如下。我想改变标准的MACD简单专家顾问,但我在编程方面完全是个零。
我想改变EA,使其不是用一个订单工作,而是用一个网格、止损和魔法。
以下是我想添加的变量。
止损 = 放在整个网格的同一水平上,例如,等于EUR/USD = 200pp,放在网格中所有订单的1.3450水平上。
MaxOnDer = 网格中的最大订单数,例如,如果=3,那么网格中的最大订单数将是3。
Dist = 两个未决订单之间的距离

Lommultiplicator = 网格中下一个订单的手数比例。

魔术=神奇的数字

我们像初始代码那样退出交易,即当第一笔订单关闭时,网格中的所有订单都将被关闭。

这就是全部
如果有人otvezvayut将非常感激
我将非常感激!也许有人有一个现成的专家顾问,在生活中已经实现了,也会做。
 
sannin:

例如,在1200点已经有一个订单......而价格下跌,例如,星星排成一排,所以在这个地方必须下订单......而订单已经在那里了,不要把余额降低到所需的余额以下,以避免放置2个订单,每个1点,比方说

情况是这样的。

//+----------------------------------------------------------------------------+
bool ExistOrdersByPrice(string sy, int op, int mn, double pp) {
   int i, k=OrdersTotal()-1;
   for (i=k; i>=0; i--) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue;
         if (MathAbs(OrderOpenPrice()-pp)<0.5*Point) return(true);
         }
      else Print("FUNC ExistOrdersByPrice() : ошибка выбора ордера "+GetLastError());
      }
   return(false);
}
//+----------------------------------------------------------------------------+

为了检查当前符号在1.35000的价格上是否有Magic的BuyStop订单,我们调用这个函数。

//+----------------------------------------------------------------------------+
   if (!ExistOrdersByPrice(Symbol(), OP_BUYSTOP, Magic, 1.35000)) {
      // тут код, если нет такого ордера
      }
   else {
      // тут код, если есть такой ордер
      }
//+----------------------------------------------------------------------------+
 
atztek:

如果你说的是文件,在MetEditor中突出这个词,然后按F1。或者你可以上网,比如说。
https://docs.mql4.com/ru/customind/SetLevelStyle

当然谢谢你,但如果你懒得看问题,那么回答的意义何在?我可以在我的两个函数中改变指标中的水平值、厚度、颜色和风格。我没有机会看到描述。我再问一遍,有人知道答案吗?我不知道我以前是否见过它。

我附上一张图片,显示我需要的东西。