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

 
Rossi:

有没有办法对屏幕底部的标签中的工具进行分类?因为4个时间段的8个工具分散在一个混乱的....。

 
DDFedor:

抓住带有图形名称的标签,并将其拖到正确的位置。

AAAAAAAAAAAAAAAAAAA伟大的答案,谢谢你...
 
artmedia70:
:)现在出现了错误130。最令人困惑的是,在错误的止损点(130)下,它仍然设置了正确的起飞(由ATR计算),但我的止损点从一开始就没有设置...。有什么办法可以理解这个问题吗?

130错误 可以是错误的止损或错误的止盈。
 
ToLik_SRGV:


我添加了限价订单(我在以前的代码中忘记了它们:))+错误#1处理(在修改前,新价格与当前价格进行比较,如果它们相同,则不会发生什么)。

似乎被拖网移动到市场附近的修改后的订单会失去其TakeProfit的继承权......。它们一旦被触发,就会挂在图表上的位置,愚蠢地消耗保证金。他们不以盈利或亏损收盘,也没有获利线。虽然,我特意在代码中加入了用ATR计算的tp 值,以检查它。

void trailingOrder(int magic, int trailing){
   int index = 0, tp=TakeProfitATR (5);
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
                  /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
// ..... Далее по тексту функции также добавлены изменения...

在我修改之前和之后,修改后的订单在转换为头寸之前或之后都没有承接线......。

原因是什么呢?

 
artmedia70:

似乎被拖网移动到市场附近的修改后的订单会失去其TakeProfit的继承权......。它们一旦被触发,就会挂在图表上的位置,愚蠢地消耗保证金。他们不以盈利或亏损收盘,也没有获利线。虽然,我特意在代码中加入了用ATR计算的tp 值,以检查它。

在添加变化之前和之后,修改后的订单在转换为头寸之前或之后都没有取舍线......

可能的原因是什么?

在修改挂单的 价格时,也应修改止损和止盈。
 
khorosh:
错误130可能是错误的止损或错误的止盈。
谢谢你。我已经知道...这并不是重点。是拖网给了我错误--我禁用了它,一切都好了。我还没有时间去处理它。
 
khorosh:
在修改挂单价格时,也应修改StopLoss和TakeProfit。

ATR获利功能不是这样做的吗?我在修改订单前调用它,获得由TakeProfitATR()计算的当前获利值,并将其粘贴到订单修改中...这在我上面的例子中。

int index = 0, tp=TakeProfitATR (5); // Рассчёт нового тейка по значению ATR. Ф-ция возвращает размер тейка в пунктах

....

if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),
   /*OrderTakeProfit()*/tp, 0, MediumSpringGreen))Print(">>> ERROR ", GetLastError()); // здесь вместо OrderTakeProfit() подставляю tp
看来我在写这篇文章时发现了一个错误......ATR的TakeProfit函数以点为单位返回TakeProfit值,而应该使用价格。
但是,我不明白为什么在做这些改变之前,修改后的订单会失去它的取值......。虽然,OrderTakeProfit()应该将其获取点的值写入被修改的订单中...
然后问题是--为什么我每次都要修改它(取),如果说,我只是想把一个挂单 移到离市场更近的地方,而不改变它,如果市场已经远离它,准备进行反转或修正......???
 
artmedia70:

ATR获利功能不是这样做的吗?我在修改订单前调用它,获得由TakeProfitATR()计算的当前获利值,并将其粘贴到订单修改中...这在我上面的例子中。

....

看来我在写这篇文章时发现了我的错误......ATR的TakeProfit函数以点为单位返回TakeProfit值,而应该使用价格。
但是,我不明白为什么在这些变化之前,修改后的订单仍然失去了它的取值......。虽然,OrderTakeProfit()应该将其获取点的值写入被修改的订单中...
然后问题是--为什么我每次都要修改它(取),如果说,我只是想把一个挂单移到离市场更近的地方,而不改变它,如果市场已经远离它,准备进行反转或修正......???




我在我的方法中加入了自动止损和接管。 当你下挂单时,你只需设置限价器,方法会将一切拖到正确的位置:))

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   double takeprofit, stoploss;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing, Ask+Point*trailing-(OrderOpenPrice()-OrderStopLoss()), Ask+Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,Bid-Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid-Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,Bid+Point*trailing+(OrderStopLoss()-OrderOpenPrice()),Bid+Point*trailing-(OrderOpenPrice()-OrderTakeProfit()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,Ask-Point*trailing-(OrderOpenPrice()-OrderStopLoss()),Ask-Point*trailing+(OrderTakeProfit()-OrderOpenPrice()), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 
ToLik_SRGV:


我在方法中加入了自动止损和接管。 在设置挂单时,我只需设置一次限价器,然后方法本身就会把所有东西拖到正确的位置:))

非常 - 非常有用!但不是最佳状态。我们应该动态地改变取舍。为什么我们必须跟随市场?如果我们设置了一个挂单,而价格已经走远--比如说修正,...我们该怎么做?我们要等待价格回归吗?还是删除订单?这样做不是更好吗...

让我们想象一下,当市场的波动性很低,但有一个稳定的上升趋势的情况。价格已经慢慢远离了待定的 SELLSTOP订单 向上移动。一个未平仓的买入头寸已经被算出,并以盈利方式平仓。我们等待市场波动性增加,一旦超过某个阈值,我们就将限价单移至该价格。因此,我们抓住了已经开始的修正,限制器不是作为一个锁定的位置,而是作为一个额外的收入来源。如果我们没有移动它,修正可能已经到达它,触及它并完成。在这种情况下,我们在上升趋势中会有一个lota卖出位置。

这样的游历是一种趋势性的游历...

如果我们有动态TP,那么通过将挂单转移到市场并考虑到强波动性(这里会比弱波动性大),我们更有可能从修正中获得更多利润,而不是在静态TP的情况下。不管怎么说,如果我们没有平仓,拖网将完成它的工作,我们将失去的只是错过的利润。

呃...我已经很久没有在键盘上点击这么多了......。

因此,这个建议本身就很有意义。为了使函数的参数也能传入时间框架。并根据它计算出ATR值的取值。

我实验了一段时间,我对M5 TF的调查得出结论,根据ATR的最佳止盈是用ATR*45000计算的,我在计算中也是这样做的。在这些数值下,市场几乎总是能及时 "捕捉 "住这些东西。

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }

当然,这个功能还没有完成,但对我来说已经足够用于测试了(我现在正在测试M5)......顺便说一下,在输入值=1的情况下,它提供了一个相当好的距离来设置一个悬念。

如果能在你的功能中看到它,那就更好了...:)

无论如何,谢谢你--考虑到我的修改只是为了得到上述结果,这相当令人满意......
ZS...如果能给修改图标添加颜色就更好了......。(真的,我已经添加了它们)...

 

这里有一个问题:BC省如何处理大量的交易?我的专家顾问每29分钟开一次仓(五个策略中只有一个)。然后,当权益增加百分之五时,所有的人都会一起关闭。主要是余额每三到五天增加百分之五。

我不知道BC省是否对这种交易有任何要求。

原因: