MQL4通过添加到一个图表来对所有符号运行EA

时间:2018-05-11 18:03:22

标签: mql4 algorithmic-trading metatrader4 forex metatrader5

在MetaTrader4终端中,我写了一个简单的警报EA

我想在所有FOREX专业和外汇未成年人上运行我的EA,我已完成所有代码,但我希望它能自动运行在我的[Market Watch]面板中的所有符号上。

这是我的代码,非常简单,有人可以帮我向我展示如何在我的市场观察中自动运行所有符号或符号吗?

   double RSI            = iRSI(        NULL,15, 7,PRICE_CLOSE,0 );
   double Stoc           = iStochastic( NULL,15, 5,3,3,MODE_SMA,STO_LOWHIGH,0,0);
   double BoliUpper      = iBands(      NULL,15,20,2,0,PRICE_MEDIAN,1,1 );
   double BoliLower      = iBands(      NULL,15,20,2,0,PRICE_MEDIAN,2,1 );
   double CandlePrevHigh = iOpen(       NULL,15, 1 );
   double CandlePrevLow  = iClose(      NULL,15, 1 );

   if ((RSI > 75) && (Stoc > 80)&& (BoliUpper < CandlePrevHigh) )
   {
       Alert(Symbol()+" is over bought");
   }
   else if ((RSI < 25) && (Stoc < 20)&&(BoliLower>CandlePrevLow))
   {
       Alert(Symbol()+" is over sold");
   }

2 个答案:

答案 0 :(得分:1)

只需遍历如下符号:

String syms[] = {"EURUSD","USDJPY"); // Currency pair symbol array

for(int i=0; i < ArraySize(syms); i++) {
 double RSI = iRSI( syms[i], 15, 7,PRICE_CLOSE,0 );
 // ...
}

因此,只需将所有的'NULL'替换为syms[i]

要获取 Market Watch 符号,您需要添加一些代码,但是herehere您可以找到一些免费的代码/库来帮助您做到这一点。

答案 1 :(得分:-1)

  

如何在所有符号上自动运行?

两件事:

1)将代码设计为不是EA,而是设计为脚本(以便使代码执行不受本地图形事件流的影响

2)将逻辑“包装”成for循环,最好的智能捷径,以便扫描您选择的所有交易工具:

...
   for ( int anInstrumentNAME_INDEX =  0;
             anInstrumentNAME_INDEX < ArraySize( anInstrumentNAME_ARRAY );
             anInstrumentNAME_INDEX++
             )
   {  string anInstrumentNAME = anInstrumentNAME_ARRAY[anInstrumentNAME_INDEX] );

      double aFetchedLastPRICE =  iClose( anInstrumentNAME, PERIOD_CURRENT, 0 );
      if (   aFetchedLastPRICE == 0 )
      {   // 0: signals that the requested piece of data is not in Terminal's local datastore
          // get Error# + analyse + remedy
             continue;
      }
      if (   anInstrumentPRICE[anInstrument_NAME_INDEX] == aFetchedLastPRICE ) continue; // .WAS the same, loop
      else   anInstrumentPRICE[anInstrument_NAME_INDEX] =  aFetchedLastPRICE;            // .STO

      runAsync_MonitorOnThisOne( anInstrumentNAME );

   }

void runAsync_MonitorOnThisOne( string aSymbolNAME )
{    double RSI         =        iRSI( aSymbolNAME, 15,  7, PRICE_CLOSE, 0 );
     double Stoc        = iStochastic( aSymbolNAME, 15,  5, 3, 3, MODE_SMA, STO_LOWHIGH, 0, 0 );
     double BoliUpper        = iBands( aSymbolNAME, 15, 20, 2, 0, PRICE_MEDIAN, 1, 1 );
     double BoliLower        = iBands( aSymbolNAME, 15, 20, 2, 0, PRICE_MEDIAN, 2, 1 );   
     double CandlePrevHigh   = iOpen(  aSymbolNAME, 15,  1 );
     double CandlePrevLow    = iClose( aSymbolNAME, 15,  1 );

     if (  ( RSI       >  75 )
        && ( Stoc      >  80 )
        && ( BoliUpper <  CandlePrevHigh )
           )
    {
           Alert( aSymbolNAME + " is over bought [BEWARE, THIS BLOCKS...] " );
    }
    else if (  ( RSI       <  25 )
            && ( Stoc      <  20 )
            && ( BoliLower >  CandlePrevLow )
               )
         {
               Alert( aSymbolNAME + " is over sold [BEWARE, THIS BLOCKS... ]" );
         }
}