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

 
Notter:

下午好。

能否请您告诉我如何在图表上做标记?例如,订单没有打开,但至少要在图表上看到,在这一点上它应该已经打开。

我想在图表上放置一个标记。

像这样

#include <stderror.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int Err;
//----
       if(...........) //покупаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Blue,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
       if(...........) //продаем
          { 
          Err=OrderSend(..................);
             if(Err<0)
                SetArrow(159, Red,"ошибка открытия № "+GetLastError(),Time[0],Open[0],2);
          }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow(int cd, color cl,
              string nm="", datetime t1=0, double p1=0, int sz=0) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE, cd);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_WIDTH    , sz);
}
 
dertop:


是的,对不起,我弄糊涂了,第一次在论坛上写作。先是抄写,然后决定手写,结果弄混了......。但上面的例子是正确的...

MA1>MA2,MA1<MA3,MA3<MA4


阅读以下主题
 
Vinin:


这里有一些奇怪的东西。

MA1>MA2,MA2>MA3,然后MA1<MA3

更重要的是,它足以

是的,的确,两者之间存在矛盾。我只是没有调查清楚所有的事情!作者要犯 "硬性错误",还有很长的路要走!
 

问题是这样的。这不是我第一次遇到这种情况了。

例如,如果在每个tick上调用 traal或breakeven函数,将弹出错误1。这意味着,根据文件规定。

ERR_NO_RESULT   1       Нет ошибки, но результат неизвестен

如果不是在启动函数中公开调用,即不只是在启动 中直接输入参数的函数,而是在每个柱子上调用,即不是按tick来调用,那么错误--不...

我的意思是像这样。

int start()
{
   MovingStopLossToBU();
// Что-то дальше делаем..

为什么要这样?

而在一般情况下,如何更明智地实施?每次打钩都会耗费大量资源吗?

 

Всем добрый день.

我需要你的帮助。我不明白发生了什么事。

如果(OrderStopLoss()!= NormalizeDouble(t6,5))

{

a=10;

}

OrderStopLoss()=1.3017和NormalizeDouble(t6,5)=1.3017条件仍然成立,即a=10。但它不应该被满足。

这方面的原因可能是什么?

 
hoz:

问题是这样的。这不是我第一次遇到这种情况了。

例如,如果在每个tick上调用traal或breakeven函数,将弹出错误1。这意味着,根据文件规定。

如果不是在启动函数中公开调用,即不只是在启动 中直接输入参数的函数,而是在每个柱子上调用,即不是按tick来调用,那么错误--不...

我的意思是像这样。

为什么要这样?

而在一般情况下,如何更明智地实施?每次打钩都会耗费大量资源吗?

我建议你不要按条数,按这么多点来计算。如果有必要,这就是资源的作用。而 "没有错误 "的错误发生在对一个已经存在的修改进行价格重复时。这就是为什么你必须一步一步地做,正如我一开始就建议你的那样。
 
hoz:

问题是这样的。这不是我第一次遇到这种情况了。

例如,如果在每个tick上调用traal或breakeven函数,将弹出错误1。这意味着,根据文件规定。

如果不是在启动函数中公开调用,即不只是在启动 中直接输入参数的函数,而是在每个柱子上调用,即不是按tick来调用,那么错误--不...

我的意思是像这样。

为什么要这样?

而在一般情况下,如何更明智地实施?是不是每次打钩都会耗费大量资源?

拖网试图将SL移到同一水平。 我们需要增加一个检查,拖网水平应该与当前SL不同。

 
valeryk:

拖网试图将SL移动到同一水平。应增加一项检查,拖网水平必须与目前的SL不同。



我有一张这方面的支票。

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
{
  if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
  {
    Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
  }

}
如果停止-新的停止(以b.u为单位)不为零...然后我们修改...如果没有,我们就不修改。这就是为什么我不清楚这种情况如何发生。毕竟,我明白我需要检查过去和新的停止 的平等,我已经做了。
 

你好!请告知我如何才能将我的初始和最终订单修改为1个T/P,谢谢。

gi_304 = CountTrades();

   g_price_212 = 0;

   double ld_24 = 0;

   for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

      OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

      if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {

            g_price_212 += OrderOpenPrice() * OrderLots();

            ld_24 += OrderLots();

         }

      }

   }

   if (gi_304 > 0) g_price_212 = NormalizeDouble(g_price_212 / ld_24, Digits);

   if (gi_332) {

      for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

         OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_BUY) {

               g_price_180 = g_price_212 + TakeProfit2 * Point;

               gd_unused_196 = g_price_180;

               gd_308 = g_price_212 - Stoploss * Point;

               gi_268 = TRUE;

            }

         }

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) {

            if (OrderType() == OP_SELL) {

               g_price_180 = g_price_212 - TakeProfit2 * Point;

               gd_unused_204 = g_price_180;

               gd_308 = g_price_212 + Stoploss * Point;

               gi_268 = TRUE;

            }

         }

      }

   }

   if (gi_332) {

      if (gi_268 == TRUE) {

         for (g_pos_300 = OrdersTotal() - 1; g_pos_300 >= 0; g_pos_300--) {

            OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES);

            if (OrderSymbol() != Symbol() || OrderMagicNumber() != g_magic_176) continue;

            if (OrderSymbol() == Symbol() && OrderMagicNumber() == g_magic_176) OrderModify(OrderTicket(), g_price_212, OrderStopLoss(), g_price_180, 0, Yellow);

            gi_332 = FALSE;

         }

      }

   }

   return (0);


 
agat8430:

你好!请告知我如何才能将我的初始和最终订单修改为1个T/P,谢谢。


编辑这段代码,使它看起来不像是一个黑客