Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 868

[Удален]  
tara:

Для этого API не нужно, все не просто, а очень просто. 

 

ну так подскажи пожалуйста решение новичку
 
Новичку-не новичку, могу посоветовать сохранять в тех же GV имя валютной пары в момент запуска эксперта. 
[Удален]  
они все запускаются одновременно во время запуска клиента.  либо я тебя опять не понял, либо
сохранять в тех же GV имя валютной пары в момент запуска эксперта. 
не даст никакой пользы
 
pycha:
они все запускаются одновременно во время запуска клиента.  либо я тебя опять не понял, либо не даст никакой пользы

Вам просто кажется, что Вы не любите кошек. 

Вы просто не умеете их готовить.  

Эксперт запускает перерисовку в том и только том случае, если символ активного графика совпадает с его стартовым символом.  

[Удален]  
я понял, пол беды уже снялось))). но там и в в самом эксперте выполняются фукции по подготовке к перерисовке, очищению массивов,  вбивание в масивы новых данных - что можно и не делать .  сейчас эксперт работает на 20 инструментах и  проц постоянно загружен на  5 - 10 %.  ищу любые способы облегчения и оптимизации )))))
 
Не ко мне. 
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- check for bars count
   if(rates_total<InpMAPeriod-1 || InpMAPeriod<2)
      return(0);
//--- counting from 0 to rates_total
   ArraySetAsSeries(ExtLineBuffer,false);
 //  ArraySetAsSeries(ExtLineBufferFid,false);
   ArraySetAsSeries(close,false);
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
   {
      ArrayInitialize(ExtLineBuffer,0);
      ArrayInitialize(ExtLineBufferFid,0);  
   }       
//--- calculation
  
    CalculateSimpleMA(rates_total,prev_calculated,close);
    
    ExtLineBufferFid[rates_total-3]=(ExtLineBuffer[rates_total-2]*InpMAPeriod+close[InpMAPeriod+1])/(InpMAPeriod+1);
  //sma99[i]=(sma100[i]*100-d[i-100])/99;
//(firstValue*InpMAPeriod+price[i+1])/InpMAPeriod;
///(firstValue*InpMAPeriod+price[InpMAPeriod+1])/(InpMAPeriod+1);
// Y[i]=Y[i+1]+(X[0]-X[N])/N    
    Print("  ",ExtLineBufferFid[rates_total-3]
         ,"  ",ExtLineBufferFid[rates_total-2]
         ,"  ",ExtLineBuffer[rates_total-2]
             );      
//--- return value of prev_calculated for next call
   return(rates_total);
  }

 Вы уж извините, стыдно обращаться по сто раз на одном и том же.

Ну уже почти месяц смотрю как баран на ворота. Ничего не пойму.

Задача высчитать скользящую среднюю меньшего порядка, имея скользящую 13,

то есть высчитать период 12, основываясь на 13

 
Top2n:

 Вы уж извините, стыдно обращаться по сто раз на одном и том же.

Ну уже почти месяц смотрю как баран на ворота. Ничего не пойму.

Задача высчитать скользящую среднюю меньшего порядка, имея скользящую 13,

то есть высчитать период 12, основываясь на 13

 

Какой же смысл высчитывать не прямо на том же периоде, который нужен?!
 
Top2n:

 Вы уж извините, стыдно обращаться по сто раз на одном и том же.

Ну уже почти месяц смотрю как баран на ворота. Ничего не пойму.

Задача высчитать скользящую среднюю меньшего порядка, имея скользящую 13,

то есть высчитать период 12, основываясь на 13

 

Легко вычислить: Y(N)=1/N*(Y(N+1)*(N+1)-X[N]), где Y(i) - значение МА(i) на нулевом баре, X[j] - значение цены на j-ом баре; только это - вычислительный нонсенс, а в будущее заглянуть все-равно не позволит. 
 

Здравствуйте! Кто-нибудь из уважаемых гуру, проверьте, плиз, начало моего первого советника. Можно ли двигаться дальше? Может что упустил? Буду очень благодарен за любую конкретику. И еще: где-то на форуме видел, как сделать, чтобы открывалась только одна позиция, но не скопировал, а теперь не могу найти. Помогите, плиз.

Спасибо!

// Пробный вариант советника

//--------------------------------------------------------------------

//------Вводные данные:-----------------------------------------------------------

 input double Lots         = 0.1;                  // Лот                            

 input int MovingPeriod  =5;                       // Расчетный период МА

 input int MovingShift   =0;                       // Сдвиг МА

 input int    InpBandsPeriod=10;                   // Период Bollinger Bands 

 input int    InpBandsShift=0;                     // Сдвиг Bollinger Bands

 input double InpBandsDeviations=2.0;              // Отклонение Bollinger Bands

 input int K_Period  =30;                          // %K период Stochastic

 input int D_Period  =10;                          // %D период Stochastic

 input int Slowdawn  =8;                           // Замедление Stochastic

 input color clMainStoch  =Yellow;                 // Цвет главной линии Stochastic

 input color clSignalStoch  =Red;                  // Цвет сигнальной линии Stochastic

// -----Объявляем Глобальные переменные:------------------------------------------

   double MA_0, MA_1, MA_2;                   // Значение МА на 0, 1 и 2 барах 

   double MB_0, MB_1, MB_2;                   // Значение средней Bollinger на 0, 1 и 2 барах

   double ExtUpperBuffer[];                   // Значение верхней линии Bollinger

   double ExtLowerBuffer[];                   // Значение нижней линии Bollinger 

   double Delta_0, Delta_1;                   // Разница межу значениями верхней и нижней ...

                                              // ...линий Bollinger на 0 и 1 барах

   double Yellow_0, Yellow_1, Yellow_2;            // Значение MAIN на 0, 1 и 2 барах

   double Red_0, Red_1, Red_2;                     // Значение SIGNAL на 0, 1 и 2 барах

//-------Поехали!----------------------------------------------------------------

int start()                                        //Спец. функция start

  {

                                                   //Обращение к функции индикатора МА

     MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

     MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);

     MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);

                                                   //Обращение к функции Bollinger Bands

     MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0);

     MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1);

     MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2);

     Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0]);

     Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1]);

                                                   //Обращение к функции Stochastic

     Yellow_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0);

     Yellow_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1);

     Yellow_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2);

     Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0);

     Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1);

     Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2); 

     

//-------Ситуации по Стохастику:-----------------------------------------------------

                                                      //Рынок перекуплен

      double MOB()=(Yellow_0>=80 && Red_0>=80);          //Локальная переменная

                                                      //Рынок перепродан

      double MOS()=(Yellow_0<=20 && Red_0<=20);          //Локальная переменная

                                                      //Рынок в норме

      double MN()=(20<Yellow_0<80 && 20<Red_0<80);       //Локальная переменная

                                                      //Критическая ситуация

      double MC1()=(20<Yellow_0<80 && Red_0<=20);        //Локальная переменная

      double MC2()=(20<Yellow_0<80 && Red_0>=80);        //Локальная переменная

      double MC3()=(20<Red_0<80 && Yellow_0<=20);        //Локальная переменная

      double MC4()=(20<Red_0<80 && Yellow_0>=80);        //Локальная переменная  

         

//-------Пример(мой) приказа на открытие позиции-----------------------------------------------------


   if (Delta_0 > Delta_1 && MOB()==true)              //Рынок перекуплен, но дельта расширяется

     { if (MB_2 > MB_1 && MB_1 < MB_0)                //Нижний перелом Боллинджера

  OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point);//открываем ордер БАЙ

  Alert (GetLastError());                                            //Сообщение об ошибке  

  Alert("Открыта позиция БАЙ лотом("Lots"),цена("Ask").");           //Сообщение о покупке