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

 

当然,当我们开启下一次买入时,我们会立即 对所有仓位 进行滚动操作(StopLoss 等于我们的平均价格+50点)

这就是那个有时不采取最后立场的无赖。 我们有3个职位,但有4个职位空缺。我忘了把StopLoss放在第四个 位置。

应举行DedZone。

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

DedZone的计算是在专家顾问的初始化中。

 
Limita:

当然,当我们开启下一次买入时,我们会立即 对所有仓位 进行滚动操作(StopLoss 等于我们的平均价格+50点)

这就是那个有时不采取最后立场的无赖。 我们有3个职位,但有4个职位空缺。我忘了把StopLoss放在第四个 位置。

应举行DedZone。

DedZone在专家顾问的初始化中。

StopLevel = (MarketInfo(Symbol(), MODE_STOPLEVEL)*Point);       // текущий уровень стопов
FreezeLevel = (MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point);        // уровень заморозки
DedZone = MathMax(StopLevel,FreezeLevel);              // Зона запрета розмещения ордеров

当两者都等于零时,那又如何?在这种情况下,Alpari使用价差*2。

而且你还没有回答我关于这些线条的逻辑问题。

 
ALXIMIKS:

这样做比较好(有人写道,在修改或删除订单时,他对你的做法有意见)。

为什么是油和黄油呢?(不要管什么)。


谢谢你!

似乎同意专家的说法 :))

 
artmedia70:

而且你还没有回答我关于这些线条的逻辑问题。


artmedia70:

一个EA的整个行为逻辑可以分为逻辑块,根据条件的不同,这些逻辑块要么被执行,要么不被执行。

为了你自己的目的,你可以看到这个块可以是一些用大括号括起来的字符串。

如果 (条件){如果条件为真,则执行这些大括号内的块}。

否则{如果 上述条件 不为真,则执行这些大括号中的块}。

如果条件后面没有大括号,当条件为真时执行的块是紧随条件之后的单行。

如果 (条件)这一行被执行

否则 就执行这一行。

在我的例子中,If 是if,Other 是else。

摘自这里

 
artmedia70:

而当两者都为零时,又会怎样?在这种情况下,Alpari使用价差*2。

而且你没有回答我关于这些字符串的逻辑问题。



谢谢你提供的关于Alpari的信息。

至于线路逻辑,ALXIMIKS回答说。

我应该为自己补充的是,只有在所有条件都是真的情况下才应该进行修改。如果他们中至少有一个人失败了,我们就继续下去。

 
Limita:


谢谢你提供的关于Alpari的信息。

关于字符串逻辑,ALXIMIKS回答说。

我应该补充说,在这种情况下,只有在所有条件都是真的情况下才应该进行修改。如果他们中至少有一个人失败了,我们就继续前进。

他出于某种原因给我看了我自己曾经写给某人的文字。

我想得到我关于逻辑的问题的答案。该代码块中所有的ifs()都是一个接一个的。这意味着如果第一个条件是真的,第二个也会是真的,如果第二个是真的,第三个也会是真的,以此类推,但是......。如果第一个条件不成立,第二个条件将不会被执行,但第三个条件将被再次检查。

也许这毕竟是应该的方式。

bool ProfitManagement() {
   double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
   double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
   double StopLossSell = SellAP-Profit*Point;
   double TakeProfitSell = SellAP - Profit*Point;
   RefreshRates();
   for(int good = 0; good < OrdersTotal(); good ++) {
      if(OrderSelect (good, SELECT_BY_POS)) {            
         if (OrderMagicNumber()!=MagicNumber)   continue;
         if (OrderSymbol()!=Symbol())           continue;
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_BUY) {                             
            if (BuyAP < Bid) { 
               if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick) { // Профит не равен нужному
                  if (Bid-StopLossBuy>DedZone) {                     // Уровень достаточно удален от цены
                     if (WaitForTradeContext()) {                    // Свободен ли торговый поток?
                        if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
                           Alert (Symbol()," Хрень со стопами! ",   GetLastError());
                           return(false);
                           }
                        }
                     }
                  }
               }
            }
//-------------------------Order Buy-----------------------------------------------------  
         if (OrderType()==OP_SELL) {                             
            // вся та же хрень...
            }
//-------------------------Order Buy-----------------------------------------------------  
         }
      }
   return(true);
}

这只是我的猜测,因为我完全不知道你想的是什么逻辑,也不知道一些变量和函数的作用和包含/返回的内容。

 
artmedia70:

1)他出于某种原因给我看了我自己曾经写给别人的话。

2)这就是我想让你说的逻辑问题。你在那块代码中的所有if()都是一个接一个的。这意味着如果第一个条件是真的,第二个条件也会是真的,如果第二个条件是真的,第三个条件也会是真的,等等,但是...如果第一个条件不成立,第二个条件将不会被执行,但第三个条件将被再次检查。

1)好吧,那是针对所有人的,不只是你。

2)你曾经已经做了这个声明,几天前,只是我当时忘了仔细检查我的这个信息。

现在我做了一个简单的脚本。

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

而事实证明你错了:没有警报!!!。

 
ALXIMIKS:

1)好吧,那是针对所有人的,不只是你。

2)你以前说过一次这样的话,几天前,但我当时忘了仔细检查信息。

现在我做了一个简单的脚本。

而事实证明你错了:没有警报!!!。

int start(){
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA");}
} 

嗯,我同意。在这种情况下,当我之前写到在没有大括号的情况下,嵌套条件的内容和方式会被强制执行时,我有点草率。在这种情况下,你是对的。你知道为什么吗?

尝试在你的代码中执行else。

 
artmedia70:

嗯,我同意。在这种情况下,当我之前写到在没有大括号的情况下,嵌套条件的内容和方式会被强制执行时,我有点草率。在这种情况下,你是对的。你知道为什么吗?

尝试在你的代码中执行else。


int start(){
 int a=0;
 if (3>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

这个脚本没有发出警报。Else指的是条件"if (5>3){Alert ("AAAAAAAAAAAAAA"); a=5;}"

鸣谢 :

int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (3>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
}

有 anAlert: "a=0".

结果--条件失败的处理只适用于最后一个条件,当大括号"{"在某一系列条件的枚举过程中没有使用时。

 
ALXIMIKS:

没有来自这个脚本的警报。Else指的是条件"if (5>3){Alert ("AAAAAAAAAAAA"); a=5;}"

鸣谢 :

有 anAlert: "a=0".

其结果是,只有当在列举某一系列条件时不使用大括号"{"时,才可能对最后一个条件进行非条件处理。


也就是说,需要用括号来组织逻辑分支。没有它们,第一个条件是首要的。如果它不是真的,其他条件将不会被执行。

试着去解决它。

 if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

在这之后,要弄清楚它还指的是什么。

if (a>b)
    if (b>c) 
        Alert(" условие if (a>b && b>c) выполнено ");
else if (d>e) 
    if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");