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

 
Vitaly Muzichenko:

好吧,我有一个不同于省钱的目标。

我在图表上有EA,从面板上打开额外的windows副本进行交易是不正确的。这就是为什么我把交易面板写成指标的形式--你可以在一个图表上放很多个指标。

这是一小段摘录,代码有点截断,但逻辑很清楚。

指标

// Открыть позиции
   // Открыть позицию Buy
   if(sparam==prefix+"_openBuy") {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger(0,prefix+"_openBuy",OBJPROP_STATE,false);
     ChartRedraw();
   }
   // Открыть позицию Sell
   if(sparam==prefix+"_openSell") {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger(0,prefix+"_openSell",OBJPROP_STATE,false);
     ChartRedraw();
   }

//===============================================================================================
//------------------ Функция посылает сообщение всем открытым графикам -------------------------+
//===============================================================================================
void BroadcastEvent(long lparam,double dparam,string sparam) {
 ushort eventID=9784-CHARTEVENT_CUSTOM;
 long currChart=ChartFirst(); 
 int i=0; 
  while(i<CHARTS_MAX)                // у нас наверняка не больше CHARTS_MAX открытых графиков 
   { 
    EventChartCustom(currChart,eventID,lparam,dparam,sparam); 
    currChart=ChartNext(currChart); // на основании предыдущего получим новый график 
    if(currChart==-1) break;        // достигли конца списка графиков 
    i++;                            // не забудем увеличить счетчик 
   } 
 }

专家顾问

// -- Получим нажатие кнопки с индикатора
// Открыть позицию
 if(id==9784)     
  {
   if(UseSound) PlaySound("tick.wav");
   OpenPosition(sparam,OP_BUY,dparam,0,0,"comm",(int)lparam,clrNONE);
  }
 
Aleksei Stepanenko:

指标在哪里?请把它附在这里,这样你就不必在论坛的主题中徘徊。

指标
附加的文件:
 
是的,我也在考虑让EA将我的图表的ChartID 写入终端的一个全局变量,然后所有的指标都知道该把事件发送到哪里。没有BroadcastEvent的现货。
 
Aleksei Stepanenko:
是的,我想把我的图表的ChartID 写在终端的全局变量 中,然后所有的指标都知道该把事件发送到哪里。没有BroadcastEvent的现货。

Glob.variable是同一个文件,终端对它的工作强度很大,会杀死磁盘,以静态的方式检查它是没有用的,它是同一个循环,但在配置文件中 :)

 
frank2020:
指标
那么你想从这个指标中得到什么呢?
 
frank2020:
指标

如果有的话,取自这里

Ищу канальные индикаторы для MT5
Ищу канальные индикаторы для MT5
  • 2017.03.28
  • www.mql5.com
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5 Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые резуль...
 
Vitaly Muzichenko:

Glob.variable是同一个文件,终端对它的工作强度很大,会杀死磁盘,以静态的方式检查它是没有用的,它是同一个循环,但在配置文件中 :)

不,不。一旦专家顾问开始工作,它就会在全局变量 中写入其图表的编号。然后在启动时,指标会读取这个变量,每次对象被创建 时,它只向带有EA的图表发送事件。
 
Vitaly Muzichenko:

Glob.variable是同一个文件,终端对它的工作很努力,并杀死了磁盘,以静态的方式检查它是不合理的,它是同一个循环,但在配置文件中 :)

如果你强行刷新它,就会出现相同的文件,否则,内存大部分都在工作。

 

一般来说,EA/指标之间的正常传输器变成了

接收器。

int OnInit()
   {
   GlobalVariableSet("A",ChartID());
   return(INIT_SUCCEEDED);
   }

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) 
   {
   if(id==CHARTEVENT_CUSTOM+777)
      {
      printf("Сообщение принято: "+sparam);
      }
   }

发射器。

int OnInit()
   {
   long a=(long)GlobalVariableGet("A");
   EventChartCustom(a,777,0,0,"Превед медвед!");
   return(INIT_SUCCEEDED);
   }

处理器上没有负载。

 
Aleksei Stepanenko:

一般来说,EA/指标之间的正常发射器会发挥作用。

不正常的是,每8个字节,你将会累死在传输的东西上。

虽然它可以工作--@fxsaber 做了一个bibloo,似乎TypeToByte用于交换更复杂的结构


ZS:碰撞如何处理?- 我认为,所有的道路都通向数据交换的数据库,90%的工作都是为你完成的,而且非常有质量。

原因: