MQL4 запускает советник на всех символах, добавляя только к одному графику - PullRequest
0 голосов
/ 11 мая 2018

В терминале MetaTrader4 я пишу простой советник EA

Я хотел бы запустить свой советник на всех основных валютах и ​​младших валютных биржах, у меня есть весь код, но я хочу, чтобы он автоматически работал навсе символы в моей панели [Обзор рынка].

Вот мой код, он очень прост, может кто-нибудь помочь мне показать, как я могу сделать это автоматически на всех Символах или Символах в моих обзорах рынка?

   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 голосов
/ 29 июня 2018

Просто переберите символы, подобные этому:

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 , вам нужно добавить код, но здесь и здесь вы можете найти бесплатный код / ​​библиотекучтобы помочь вам сделать это.

0 голосов
/ 11 мая 2018

как сделать так, чтобы этот запуск автоматически выполнялся на всех символах?

Две вещи:

1) проектировать код не как советник, а как скрипт (чтобы освободить выполнение кода от потока событий локального графа

2) «оберните» логику в цикл «лучший цикл для быстрого выбора», чтобы сканировать все торговые инструменты по вашему выбору:

...
   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... ]" );
         }
}
...