新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1785

 
Nerd Trader #:
不见得

但其他人可以看到(CHARTEVENT_OBJECT_CLICK)。

 
Nerd Trader #:

一切辉煌都是简单的。

我本可以这样做

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {    
   if(ObjectGetInteger(0,"button_bs",OBJPROP_STATE))
     {
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;
     
      if(id == CHARTEVENT_MOUSE_MOVE)
        {
         if(ChartXYToTimePrice(0,x,y,window,dt,price))
           {
            if(ObjectFind(0,"H Line")!=window)
              {
               ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
              }
            else
            if(ObjectMove(0,"H Line",window,dt,price))
              {
               ChartRedraw(0);
              }
           }
        }
     }
   else
     {
      ObjectDelete(0,"H Line");
     }
  }
 
MakarFX #:

我会这样做的。

同样的解决方案。但这对我来说是行不通的,因为在点击这一行后,我需要删除第一行,创建另一行,并让它跟随光标,在点击它后也被删除。我这样做了。

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    datetime static dt        = 0;
    double   static price     = 0;
    int      static window    = 0;
    string   static line_name;


  if(id==CHARTEVENT_OBJECT_CLICK){
    }
    //Нажатие кнопки создаёт line 1 
    if(sparam=="button"){
      line_name = "line 1";
      CreateLine(line_name, clrGreen);
    }
    //Нажатие на line 1 удаляет line 1 и создаёт line 2 
    if(sparam=="line 1"){
      ObjectDelete(0,line_name);
      line_name = "line 2";
      CreateLine(line_name, clrRed);
    }
    //Нажатие на line 2 удаляет line 2
    if(sparam=="line 2"){
      ObjectDelete(0,line_name);
    }
  }

  if(ObjectGetInteger(0,"button",OBJPROP_STATE)){
    int x = (int)lparam;
    int y = (int)dparam;
    if(ChartXYToTimePrice(0,x,y,window,dt,price)){
      if(id == CHARTEVENT_MOUSE_MOVE){
        if(ObjectMove(line_name,0,0,price))
          ChartRedraw(ChartID());
      }
    }
  }
}
 

按下按钮 - 创建一条线。按下按钮--删除。有那么难猜吗?

另外,你可以显示和隐藏,这样你就不必一直创建和删除它们。

 
Nerd Trader #:

也是一种解决办法。但这对我来说是行不通的,因为在点击这一行后,我需要删除第一行,创建另一行,并让它跟随光标,在点击它后也被删除。我这样做了。

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    datetime static dt        = 0;
    double   static price     = 0;
    int      static window    = 0;
    string   static line_name;


  if(id==CHARTEVENT_OBJECT_CLICK){
    }
    //Нажатие кнопки создаёт line 1 
    if(sparam=="button"){
      line_name = "line 1";
      CreateLine(line_name, clrGreen);
    }
    //Нажатие на line 1 удаляет line 1 и создаёт line 2 
    if(sparam=="line 1"){
      line_name = "line 2";
      ObjectSetString(0,"line 1",OBJPROP_NAME,line_name);
      ObjectSetInteger(0,line_name,OBJPROP_COLOR,clrRed);
    }
    //Нажатие на line 2 удаляет line 2
    if(sparam=="line 2"){
      ObjectDelete(0,line_name);
    }
  }

  if(ObjectGetInteger(0,"button",OBJPROP_STATE)){
    int x = (int)lparam;
    int y = (int)dparam;
    if(ChartXYToTimePrice(0,x,y,window,dt,price)){
      if(id == CHARTEVENT_MOUSE_MOVE){
        if(ObjectMove(line_name,0,0,price))
          ChartRedraw(ChartID());
      }
    }
  }
}

而且我会在创建和删除对象之前留下一个检查。

 
MakarFX #:

出了问题),信号根本就没有来。0个交易。

为什么要用双倍?

我的变量看起来像这样。

// Параметры советника
input string  sParametersEA = "";     // Параметры советника
input double  Lot           = 0.01;   // Количество лотов
input double  LotControl    = 0.01;   // Контрольная лотность
input int     StopLoss      = 30;     // Уровень убытка
input int     TakeProfit    = 30;     // Уровень прибыли
input int     Deviation     = 20;     // Отступ цены входа
input int     Slippage      = 3;      // Проскальзование (в пунктах)
input int     Magic         = 1;      // Индентификатор советника
input double  K_Martin1     = 2.0;    // Множитель мартин 1
input double  K_Martin2     = 2.0;    // Множитель мартин 2
input double  K_Martin3     = 2.0;    // Множитель мартин 3
input int     OrdersClose   = 5;      // Ограничение лотности мартин1
input int     OrdersClose2  = 5;      // Ограничение лотности мартин2
input int     DigitsLot     = 2;      // Точность лотности
// Параметры индикатора
input string  ParametersMA  = "";     // Параметры индикатора
input int     PeriodMA      = 14;     // Период мувинга
input int     MovingShift   = 1;      // Сдвиг мувинга
// Глобальные переменные
string AC;
datetime Start;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
double openPrice;   // цена открытия позиции
//+-----------------------------------------------

也许这就是问题所在?

 
законопослушный гражданин #:

出了问题),信号根本就没有来。0个交易。

为什么要用双倍?

我的变量看起来像这样。

也许这就是问题所在?

删除这个。

double openPrice;   // цена открытия позиции
并在代码中使用
openPrice();
 
законопослушный гражданин #:


为什么是双倍?


double - 十进制数字

int - 整数

 
MakarFX #:

删掉这个!

而在代码中,使用

谢谢你!信号已经消失了。

 
MakarFX #:

double - 十进制数字

int - 整数

清楚地

原因: