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

 
下午好,请帮助,有一个简单的想法,当三个MAs相交时实现Alert()调用
方案中的交叉点描述。它似乎在工作,但不像它应该的那样。我把变量四舍五入到一位数,这样
,就能抓住交叉点。而这个Alert()鼓动了我,只要手段是在同一个位置。我怎样才能使它被调用一次,以及最多调用5次。
//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;

//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD()
      {
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          Alert("Cигнал на ПОКУПКУ паре EURUSD");
          return(11); // 11 - на первой паре сигнал на покупку.
         }
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          Alert("Cигнал на ПРОДАЖУ паре EURUSD");
          return(10); // 20 - на первой паре сигнал на продажу.
         }     
      }
int start()

   {

//+------------------------------------------------------------------+
//| Блок работы с EURUSD                               |
//+------------------------------------------------------------------+
   if(EURUSD() != 11 || EURUSD() != 10)
      {
         // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
         MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
  
         SMA_Blue_EURUSD = MA_Blue_EURUSD;
     // Преобразование int в string
         SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, '');     // Округление до х.хххх
         SMA_Green_EURUSD = MA_Green_EURUSD;   // Преобразование int в string
         SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, '');   // Округление до х.хххх
         SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
         SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх

      }

     }

int deinit(){return(0);}




如果在根基上都是错的,建议用方法来追踪交叉点。谢谢。
 
Zherart:
下午好,请帮助,有一个简单的想法,当三个MAs相交时实现Alert()调用。
方案中的交叉点描述。它似乎在工作,但不像它应该的那样。我将变量四舍五入到一位数,以
来抓取交叉点。而这个Alert()的鼓声对我来说,只要手段是在同一个位置。如何让它被调用一次,好在最多调用5次.如果在根部不对,建议用方法来跟踪交叉点。谢谢你。

//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
   int БАРАБАНИТЬ = 1; // Сколько раз подавать сигнал
   int ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD() 
      {
   
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
          return(11); // 11 - на первой паре сигнал на покупку.
         }
      else ПОКУПКА=0;
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
          return(10); // 20 - на первой паре сигнал на продажу.
         }
       else ПРОДАЖА=0;       
      }

像这样的地方一目了然......
 
塞普尔卡,谢谢你!!!。我们会试一试。明白了!!!。
 
要么是我太傻,要么是终端机出了问题。我想优化一个EA,但在EA属性中没有 "输入参数 "标签。帮助。
 
prom18:
要么是我太傻,要么是终端机出了问题。我想优化一个EA,但在EA属性中没有 "输入参数 "标签。我一直在尝试优化我的EA,但在其属性中没有 "输入参数 "标签。



https://forum.mql4.com/ru/46980/page417#702426

https://www.mql5.com/ru/forum/138609/page417#702426

 

是否可以在一个函数的参数中使用一个数组?例如,我想创建一个处理数组信息的函数。

void Function(double Array[])
 {
  ...
 }
 
silhouette:

是否可以在一个函数的参数中使用一个数组?例如,我想创建一个处理数组信息的函数。


这里 的教程是怎么说的?

"

要传递的参数 在要调用的函数名称后面的括号中表示,并列出,用逗号分隔。传递给一个函数的参数数量不得超过64个。该函数也可以不使用传递的参数。在这种情况下,表示一个空的参数列表,也就是说,在函数名称后面紧接着放上开括号和闭括号。

在函数调用中传递的参数的数量、类型和顺序必须与函数描述中指定的正式参数的数量、类型和顺序一致(调用一个有默认参数的函数除外--见函数调用函数描述及返回操作符)。 如果没有这种一致性,MetaEditor将输出一个错误信息。常量、变量、表达式和 数组 可以作为传递参数。"

 
silhouette:

是否可以在一个函数的参数中使用一个数组?例如,我想创建一个处理数组信息的函数。

试试这个。

void Function(double& Array[])
 {
  ...
 }
https://docs.mql4.com/ru/basis/variables/formal
 
Sepulca:


Close - iClose,Open - iOpen,Time - iTime Volume - iVolume等也是如此。

而指标可以画出多达8条线,从0到7https://docs.mql4.com/ru/customind/indicatorbuffers


非常感谢 :) 指标仍然没有画出来,我得到了尖峰的线条,如price=iL[k]; 其中iL是我的iLow...前低点。

总之,我发现了很多有用的东西......但我不会再挖下去了......

有一种更简单的方法可以使重绘可视化......不需要自定义指标。

 
Roman.:

教科书在这里 是怎么说的?

"

要传递的参数 在要调用的函数名称后面的括号中表示,并以逗号分隔列出。传递给函数的参数数量不得超过64个。该函数也可以不使用传递的参数。在这种情况下,表示一个空的参数列表,也就是说,在函数名称后面紧接着放上开括号和闭括号。

在函数调用中传递的参数的数量、类型和顺序必须与函数描述中指定的正式参数的数量、类型和顺序一致(调用一个有默认参数的函数除外--见函数调用函数描述及返回操作符)。 如果没有这种一致性,MetaEditor将输出一个错误信息。常量、变量、表达式和 数组 可以作为传递参数。"

写作前读了课本,看到下划线,但在实践中没能实现--写的是不兼容的类型。