初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1269

 
Kira27:

我已经尝试了你建议的所有方法,扭来扭去,但在MT5中仍然是用一种颜色画线。 而在MT4中,它可以正常画线,没有延迟。

我想我还没有尝试所有的东西。

Alexey Viktorov:

很有可能在重命名一个对象后,它仍然无法被引用。你可以试着把ChartRedraw放在重命名之后。如果它没有帮助,我们将不得不以某种其他方式建立序列。

ps;另一个选择:先用sparam这个名字重画,然后再重命名。

由于某些原因,事件CHARTEVENT_OBJECT_CREATE 在老鼠接触到图表后立即计数,而不是在完成对象的创建后计数。而保险丝的不同末端的价格原来是一样的。所以你必须在对象创建后重新绘制。

还有一句话:你是画水平还是画灯芯的主线?

这里有三种变体。

一。

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

第二。

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

三。

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

如何在一个指标中组织一个算法来取点并将其转移到另一个缓冲区。

- 要画出趋势线。(如图)

-----------------------------------------

我尝试了所有的直觉,它们被吸引了,但在奇怪的地方。

-----------------------------------------------------------------------------------------------------

我附上了指标,它可以工作,但我无法调整这些线条。

我做不到,也许有人能指导我看关于趋势线结合点的文章。

-- 我无法画出它们,不清楚在哪些点上。

EURUSDH4

---------------------------------------------------------

类似的东西,也许?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



-------------------

我在正确的轨道上吗?

附加的文件:
2.mq5  82 kb
 
SanAlex:

也许有人能指导我阅读有关趋势线点的文章。

-- 我现在能做的就是把它们画出来,不清楚在哪个点。

---------------------------------------------------------

类似的东西,也许?

-------------------

我在正确的轨道上吗?

趋势线 是在2个点上画的,它要么是价格数据,要么是另一个指标的数据,用分形画的例子,顺便说一下,你已经知道了)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

趋势线 是在2个点上画的,这要么是价格数据,要么是另一个指标的数据,这是一个通过分形画的例子,顺便说一下,你很熟悉这个例子)

https://www.mql5.com/ru/code/29210

我想用一个指标来做,但没有成功。

- 我不得不用两个指标来做。

这就是我所做的。

gbpusdm30 gotov

---------------------------

我忘了说谢谢你!- 谢谢你!!!。

 
SanAlex:

我想在一个指标中做,但没有成功,但我在这个指标中做了,这是你建议的。

- 所以我不得不用两个指标来做。

这就是它的工作原理。

---------------------------

我忘了说谢谢你!- 谢谢你!!!。

那么把它们结合起来,你可以在一个指标中创建许多不同的对象)

 
Alexey Viktorov:

显然,我还没有尝试所有的东西。

由于某些原因,CHARTEVENT_OBJECT_CREATE 事件在老鼠接触到图表后立即计数,而不是在对象被创建后计数。而保险丝的不同末端的价格原来是一样的。所以,我们必须在对象创建后重新绘制它。


你是如何确定的呢? 在逻辑上?

还有一句话:你是画水平还是画纤维的主线?


我试着在不同的变体中重新绘制趋势线))))。

这里有三种变体。

一。

第二。

第三次。


非常感谢这些!!!根据你的例子,我可能会学会有逻辑地思考,))))。

你是搞编码的,还是搞交易的? 我是说,你做交易多久了? 我已经做了12年了))))。

 
Kira27:

非常感谢你的选择!!我会用你的例子,学会逻辑思考))))。

我是说,你做交易多久了? 我已经做了12年了)。

我并不总是那么 "善良"。我并不总是那么 "善良",只是在攻击时......所以从我的例子中没有什么可学的。我从事贸易的时间几乎一样长。

 
Alexey Viktorov:

我并不总是那么 "善良"。只有在攻击期间......所以从我的例子中没有什么可学的。我在交易方面也差不多。

我不知道,我正在通过实例更好地学习编程的方法和技术。我希望MQL5有这样的教程,就像MQL4 一样,使用包含的 文件一步一步地解释机器人

 
Alexey Viktorov:

我从事贸易的时间几乎一样长。

所以你已经知道了市场波动的本质? 在我看来,我已经学会了)))),我只需要问它,因为我可以在一定时间内与它合作,然后我啪啪地创造一个混乱)))))),但现在我了解任何资产)))),我特别喜欢S&P,它是技术和动态的))

 
VVT:

好吧,把它们结合起来,你可以在一个指标中创建许多不同的对象)

我想这样做,我已经试了一个星期了,但就是不成功。

- 在第二个指标中似乎更好--你无法看到过去的点和线本身,只有那些用于确定入市 的点和水平。

----------------

这两个指标是一个(这是我的草稿--我没有改变其中的4个指标的名称)。