[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 87

 
FOReignEXchange:


谁喜欢他们喜欢的东西。每个人的笔迹都是不同的。也许你说对了,但我认为这很草率。

我不会那样做的。

首先,我不太清楚为什么要在那里声明一个变量,其中的意义是什么,我也不明白。

第二,PriceBuy = Ask;这一行位于OrderSend函数之后。而据我所知,一旦这个函数执行完毕,计算结果就会立即传递到下一行。我不认为 "问价 "可以改变。如果不影响程序的正常运行,我尽量把一切写得简单,减少字符数。我可以用和你一样的方式赋值,我不认为这里有什么问题。我写的是第一个想到的、最简单的东西。

我曾经写过一个Pips Expert Advisor,并参加了一个竞赛,其中要考虑的最低利润是5点。我在我的EA中设置了TP=5,SL=10,然后就去散步了。傍晚时分,我回到家,看了看航站楼,感到很失望。我的点子专家顾问关闭了我的大部分交易,并获得了利润,但其中一些交易的利润是4点,甚至是3点,而不是我需要的5点。顺便说一下,SL有时不是10分,而是11或12分......

为什么?我相信你知道答案!:D

这里是现实生活中的情况,我已经不再把卖价和买价作为订单的开盘价。如果1-2分对你来说并不重要,那也没关系。对我来说,重要的是这些小事。

 
MaxZ:

为什么不呢?我相信你知道答案!:D

Nah.我最初以为是因为没有计算差价。

是否有任何交易的利润是6-7个点?

 
FOReignEXchange:
Nah.我首先想到的是,这是因为没有计算差价。

糟糕......。引用我自己的话。

MaxZ:

第三:如果在OrderSend交易函数中指定了Slippage,我们想开一个买入订单,该订单不一定会准确地在卖出价开仓,因为执行OrderSend函数给出的交易订单需要一定的时间,价格可能会偏离这个值。

而我们将TP和SL与什么价格值挂钩?要问...价格已经改变,但TP和SL没有移动任何地方。

 
MaxZ:

我们将TP和SL固定在什么价格值上?要问...价格已经改变,但TP和SL没有移动任何地方。

我不能保证我的拼写是绝对正确的。但我在需要的时候一直这样做。我没有注意到它有什么问题。

对于你的情况,我不能说什么,你有一个固定的利润小于5点,因为我没有看到代码。

 

是。

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL =  Ask-StopLoss*Point;
   TP =  Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      Alert("Открыт ордер Buy ", Ticket, ".");
      Opn_B = False;
   }
   else
      Alert("Ошибка: ", GetLastError());
}

成为了。

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL = Ask-StopLoss*Point;
   TP = Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         
         if (NormalizeDouble(OrderOpenPrice()-OrderStopLoss(), Digits) != NormalizeDouble(StopLoss*Point, Digits))
         {
            SL = OrderOpenPrice()-StopLoss*Point;
            TP = OrderOpenPrice()+TakeProfit*Point;
            
            Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
            if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
               Alert("Ордер Buy ", Ticket, " модифицирован.");
            else
               Alert("Ошибка: ", GetLastError());
         }
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}

其原则是这样的。但实际上比这更复杂一些......。

有多少行?真的吗?:)))

 
MaxZ:

是。

成为了。

其原则是这样的。但实际上比这更复杂一些......。

有多少行?真的吗?:)))


???我不明白。第一个例子中的SL和TP在哪里?
 
FOReignEXchange:

???我不明白。第一个例子中的SL和TP在哪里?

我只展示了原则。好的,那么。已添加。

MaxZ:

其原则是这样的。但实际上比这更复杂一些......。

如果订单没有在规定的价格开盘,在修改订单时可能会出现错误,我们将遇到同样的耙子。这就是为什么我们实际上尝试修改订单不止一次,如果它有一个积极的票据......我们只是不想复制所有的代码。这很麻烦。但原则已经说了。
 
啊,我明白了。SL和TP是站在OrderSend函数 之前。也许这就是问题所在?
 
FOReignEXchange:
啊,我明白了。SL和TP是站在OrderSend函数之前。也许这就是问题所在?
可能是什么问题?在计算SL和TP时,价格将有时间变化?;)))
 
MaxZ:
这能有什么问题呢?在计算SL和TP的时候,价格是否有时间变化?;))

我告诉过你,当OrderSend函数 运行时,价格可能会改变。所以我们必须在事后分配它,这时它已经改变了。