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

 
Alexey Viktorov:

string AUDUSD = "AUDUSD";

至少像这样。

就是这样!!!!。对我来说就是这样))),被抹去,被遗忘))。

在你的家里实现和平!

 
Valeriy Yastremskiy:

顾问、脚本、指标不被访问,而是在当前窗口工作。而不同窗口/图表的全局变量 不会重叠。因此,它应该是有效的)

string AUDUSD; // 这是一个文本变量,除了最初是空的,也就是等于""。

(Symbol() == AUDUSD) //这个字符串与变量AUDUSD没有 关系。

但不同的工具/窗口的开单标准不应相同。如果它们是相同的,它确实会在所有窗口中打开。

谢谢你!

我实现了这个逻辑,这样专家顾问就不会在几个窗口中打开订单时得到信号,并理解为买入信号是针对这样的符号发出的,这样EA就不会干扰到其他窗口。

 
Denis Diakonov:

对我来说就是这样))),被抹去,被遗忘))。

和平进入你的家!

或者像这样在全局变量 层面上

#define  AUDUSD "AUDUSD"
 
Alexey Viktorov:

或者像这样在全局变量 层面上

事实上,这很酷))现在机器人得到一个信号,并在几个窗口中同时打开不同货币对的订单))。

再次感谢!

 
Yerkin Sagandykov:

在我看来,问题不在于变量的值。 我只是在我的代码中uulsovii重新计算在一个新的小时的发生。事实证明,目前的符号新的酒吧 出现,并计算出酒吧=1的值,但信号符号是一个新的酒吧尚未形成或什么如果和计算值为酒吧=2

这个问题很容易解决--我只是通过信号符号来追踪新条形的开始。

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar || iTime(nameSymSignal, LPeriod, 0 ) == counted_Signalbar) return; 
 
请给我一个提示。
是否可以从函数体中传递几个switch case参数?在切换情况下,我有各种类型的订单要打开,我设法从定义市场进入 点的函数中只传递一个参数来打开一个订单,我已经明白这是不可能的,所以我不知道如何实现它,甚至是按顺序实现。
 
Denis Diakonov:
请告知。
是否可以从函数体中传递几个switch case参数?在切换情况下,我有各种类型的订单要打开,我设法从定义市场进入 点的函数中只传递一个参数来打开一个订单,我已经明白这是不可能的,所以我不知道如何实现它,甚至是按顺序实现。

请在代码中向我展示你到底对什么感兴趣

 
Denis Diakonov:
请告知。
是否可以从函数体中传递几个switch case参数?在切换情况下,我有各种类型的订单要打开,我设法从定义市场进入 点的函数中只传递一个参数来打开一个订单,我已经明白这是不可能的,所以我不知道如何实现它,甚至是按顺序实现。

你指的是一个值的范围吗?

 
Vitaly Muzichenko:

准确显示你感兴趣的代码

int OpenOrder()                                             
{
   switch(AUDUSD_Analizing)
   {
      case 0 : Alert("Нет условий для открытия ордера. Выход"); break;    
      case 1 : // кейс для открытия Buy по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_BUY,lot,Ask,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
      case 2 : // кейс для открытия Sell по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_SELL,lot,Bid,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if(AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
      if(raznica > s5)
      {
         Alert("--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---");

и вот тут я могу либо прописать конкретное открытие ордера или несколько их штук(чем и решил заняться так 
как не нашел решения), либо вернуть номер кейса в первую функцию(что сократило бы код). 
Но мне нужно по условиям открывать сразу несколько сделок. К примеру нужно 2 на бай разом открыть, 
а возвращается только одно значение и исполняется один кейс и дальше уже на новый круг все идет, 
а мне нужно сразу несколько кейсов, допустим 5 выполнить, поставить 5 отложек и вот как передать не пойму, 
или как вызвать срабатывание кейсов в последовательности. Если с кейсами можно как-то придумать, то по
факту код влезет в рамку 400-600 строк, а так полагаю все 1000+ выйдет в лучшем случае
(разбитые по 100-200 строк на .mqh, но и из файлов тоже помойка сложится)

 
Alexey Viktorov:

你指的是一个数值范围吗?

不,例如先通过案例1,再通过案例2,等等。

执行开单的案例

原因: