Помощь в кодировании - страница 675

 
traderduke:
Вы бы использовали один 2ma для общего тренда, а другой - для краткосрочного возвращения максимумов и минимумов.
Значит ли это, что должно быть два индикатора канала volty?
 

Привет кодеры.

Мне нужна помощь по такому вопросу: как сдвинуть по горизонтали стрелки сигналов простого индикатора ma cross?

Я пробовал, но он сдвигается только влево, а мне нужно и вправо.

Спасибо

//+------------------------------------------------------------------+
//|                                                   ma crosses.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1  Blue
#property  indicator_color2  Red
#property  indicator_color3  LimeGreen
#property  indicator_color4  Magenta

//
//
//
//
//

extern int    FastMa             = 13;
extern int    FastMaShift        = 0;
extern int    FastMAMethod       = MODE_EMA;
extern int    FastMAPrice        = PRICE_CLOSE;
extern int    SlowMa             = 68;
extern int    SlowMaShift        = 0;
extern int    SlowMAMethod       = MODE_SMA;
extern int    SlowMAPrice        = PRICE_CLOSE;
extern bool   ShowMaLines        = true;

extern string note               = "turn on Alert = true; turn off = false";
extern bool   alertsOn           = true;
extern bool   alertsOnCurrent    = true;
extern bool   alertsMessage      = true;
extern bool   alertsSound        = true;
extern bool   alertsEmail        = false;
extern string soundfile          = "alert2.wav";

extern string note7              = "Arrow Type";
extern string note8              = "0=default,1=Thick,2=Thin,3=Hollow";
extern string note9              = "4=Round,5=Fractal,6=Diagonal Thin";
extern string note10             = "7=Diagonal Thick,8=Diagonal Hollow";
extern string note11             = "9=Thumb,10=Finger";
extern int    ArrowType          = 2;
extern int    arrowthickness     = 2;
extern double arrowsDisplacement = 2.0;
extern int    arrowHshift        = 0;

//
//
//
//
//

double CrossUp[];
double CrossDn[];
double fastMA[];
double slowMA[];
double trend[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
{
   IndicatorBuffers(5);   
   
   if (ArrowType == 0) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0,DRAW_ARROW,0,arrowthickness); SetIndexArrow(0,119);
   SetIndexBuffer(1, CrossDn );  SetIndexStyle(1,DRAW_ARROW,0,arrowthickness); SetIndexArrow(1,119);
   }
   if (ArrowType == 1) {
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 233);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 234);
   }
   else if (ArrowType == 2) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 225);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 226);
   }
   else if (ArrowType == 3) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 241);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 242);
   }
   else if (ArrowType == 4) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 221);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 222);
   }
   else if (ArrowType == 5) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 217);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 218);
   }
   else if (ArrowType == 6) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 228);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 230);
   }
   else if (ArrowType == 7) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 236);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 238);
   }
   else if (ArrowType == 8) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 246);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 248);
   }
   else if (ArrowType == 9) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 67);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 68);
   }
   else if (ArrowType == 10) { 
   SetIndexBuffer(0, CrossUp);  SetIndexStyle(0, DRAW_ARROW,0,arrowthickness); SetIndexArrow(0, 71);
   SetIndexBuffer(1, CrossDn);  SetIndexStyle(1, DRAW_ARROW,0,arrowthickness); SetIndexArrow(1, 72);
   }
   SetIndexBuffer(2, fastMA);
   SetIndexBuffer(3, slowMA);
   SetIndexBuffer(4, trend);
   
   if (ShowMaLines)
   {
     SetIndexStyle(2,DRAW_LINE); 
     SetIndexStyle(3,DRAW_LINE); 
   }
   else
   {
     SetIndexStyle(2,DRAW_NONE);
     SetIndexStyle(3,DRAW_NONE);
   }       
   
return(0);
}

//
//
//
//
//

int deinit() {  return(0); }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//
//
//
//

int start() {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = MathMin(Bars-counted_bars,Bars-1);
         
   //
   //
   //
   //
   //
            
   for(i=limit; i>=0; i--)
   {
      fastMA[i]  = iMA(NULL,0,FastMa,FastMaShift,FastMAMethod,FastMAPrice,i);
      slowMA[i]  = iMA(NULL,0,SlowMa,SlowMaShift,SlowMAMethod,SlowMAPrice,i);
      double gap = iATR(NULL,0,20,i); 
      
      trend[i] = trend[i+1];
         if (fastMA[i]>slowMA[i]) trend[i] = 1;
         if (fastMA[i]<slowMA[i]) trend[i] =-1;

         //
         //
         //
         //
         //
      
         CrossUp[i] = EMPTY_VALUE;
         CrossDn[i] = EMPTY_VALUE;
         if (trend[i]!= trend[i+1])
         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 
         }
         
         if (alertsOn)
         {
         if (alertsOnCurrent)
              int whichBar = 0;
         else     whichBar = 1;

         //
         //
         //
         //
         //
         
         if (trend[whichBar] != trend[whichBar+1])
         if (trend[whichBar] == 1)
               doAlert("uptrend");
         else  doAlert("downtrend");       
   }
   
   return(0);
}
//+------------------------------------------------------------------+


void doAlert(string doWhat)
{
   static string   previousAlert="nothing";
   static datetime previousTime;
   string message;
   
      if (previousAlert != doWhat || previousTime != Time[0]) {
          previousAlert  = doWhat;
          previousTime   = Time[0];

          //
          //
          //
          //
          //

          message =  StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," ma cross ",doWhat);
             if (alertsMessage) Alert(message);
             if (alertsEmail)   SendMail(StringConcatenate(Symbol()," ma cross "),message);
             if (alertsSound)   PlaySound(soundfile);
      }
}

 
thefxpros:

Привет кодеры.

Мне нужна помощь по такому вопросу: как сдвинуть по горизонтали стрелки сигналов простого индикатора ma cross?

Я пробовал, но он сдвигается только влево, а мне нужно и вправо.

Спасибо

Вы пробовали сдвигать буфер вместо сдвига отдельного значения.

Что-то вроде :

   SetIndexShift(0,arrowHshift);
   SetIndexShift(1,arrowHshift);

А затем верните эти строки, чтобы сдвиг вообще отсутствовал.

//
// instead of 
//


         if (trend[i] == 1)
               CrossUp[i+arrowHshift] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i+arrowHshift] = High[i] + arrowsDisplacement * gap; 

//
// it has to be
//

         if (trend[i] == 1)
               CrossUp[i] = Low[i]  - arrowsDisplacement * gap;
         else  CrossDn[i] = High[i] + arrowsDisplacement * gap; 
 
thefxpros:

Привет кодеры.

Мне нужна помощь по такому вопросу: как сдвинуть по горизонтали стрелки сигналов простого индикатора ma cross?

Я пробовал, но он сдвигается только влево, а мне нужно и вправо.

Спасибо

PS: для сдвига значений теперь нужно использовать + значения для сдвига стрелок вправо и - значения для сдвига значений влево (прилагаю тестовый код, он работает нормально для любого случая сдвига стрелок - влево или вправо).

Файлы:
_test.mq4  8 kb
 
mladen:
Значит ли это, что должно быть два индикатора вольтова канала?

mladen

Извините, что не ответил раньше, я надеялся, что вернусь с решением вопроса об индикаторе, но этого не произошло.

Да, все верно. Извините за недопонимание. Я отвечал Стивену по поводу индикатора 2MA. Я не смог использовать существующий индикатор для входа и повторного входа, как это сделал MR Tools для индикатора PrCh, хотя мой советник никогда не мог сделать правильный повторный вход, это было похоже на качели в дыму.

В любом случае, я могу сделать это в советнике с 2 вольтами, так что нет необходимости создавать этот индикатор.


Спасибо за помощь

Рэй

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

Здравствуйте.

Я пытаюсь сделать оповещение на основе индикатора shved supply - demand в соответствии со стохастическим кроссовером. Мне сообщили, что этот индикатор можно использовать для создания советников, так как он хранит информацию в буферах, но я не очень уверенно читаю и понимаю mql4, и у меня нет больше 2-3 месяцев времени на эксперименты.

Поэтому я надеюсь, что кто-нибудь сможет помочь мне написать iCustom линию для проверки того, находится ли цена в пределах zoene или нет.

//+------------------------------------------------------------------+
//|                                              Indicator: chan.mq4 |
//|                                       Created with EABuilder.com |
//|                                             http://eabuilder.com |
//+------------------------------------------------------------------+
#property copyright "Created with EABuilder.com"
#property link      "http://eabuilder.com"
#property version   "1.00"
#property description ""

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2

#property  indicator_type1 DRAW_ARROW
#property  indicator_width1 5
#property  indicator_color1 0xFFAA00
#property  indicator_label1 "Buy"

#property  indicator_type2 DRAW_ARROW
#property  indicator_width2 5
#property  indicator_color2 0x1A00FF
#property  indicator_label2 "Sell"

//--- indicator buffers
double Buffer1[];
double Buffer2[];

double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | chan @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(2);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexArrow(0, 241);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexArrow(1, 242);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   int limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   ArraySetAsSeries(Buffer2, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
      ArrayInitialize(Buffer2, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) < 20
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) > 20 //Stochastic Oscillator crosses below fixed value
          !!!!!  && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************** check if price is in upper zone
      )
        {
         Buffer1[i] = Low[i]; //Set indicator value at Candlestick Low
        }
      else
        {
         Buffer1[i] = 0;
        }
      //Indicator Buffer 2
      if(iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, i+1) < 80 //Stochastic Oscillator crosses above fixed value
           !!!! && iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", i ***************  check if price is in lower zone
      )
        {
         Buffer2[i] = High[i]; //Set indicator value at Candlestick High
        }
      else
        {
         Buffer2[i] = 0;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Я не ожидаю, что кто-то потратит время на помощь, но если я не напишу, у меня вообще не будет никаких шансов, поэтому я решил попробовать.

Мир и любовь, друзья трейдеры

Файлы:
 
NWFstudent:

Здравствуйте.

Я пытаюсь сделать оповещение на основе индикатора shved supply - demand в соответствии со стохастическим кроссовером. Мне сообщили, что этот индикатор можно использовать для создания советников, так как он хранит информацию в буферах, но я не очень уверенно читаю и понимаю mql4, и у меня нет больше 2-3 месяцев времени на эксперименты.

Поэтому я надеюсь, что кто-нибудь сможет помочь мне написать iCustom линию для проверки того, находится ли цена в пределах zoene или нет.

Я не ожидаю, что кто-то потратит время на помощь, но если я не напишу, у меня вообще не будет шансов, поэтому я решил попробовать.

Мир и любовь, товарищи трейдеры

Сделайте что-то вроде этого(проверьте также комментарии)

   //
   //
   // checking if the price is withing the lower zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 6,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 7,i))
   //
   //
   // checking if the price is withing the upper zone
   //
   //
   
   if (Close[i] <= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 4,i) &&
       Close[i] >= iCustom(NULL, PERIOD_CURRENT, "shved_supply_and_demand", 5,i))
       
   //
   //
   // PS: that indicator stores values only for current bar in the buffers, so it works only for i==0
   //
   //
   //       
 
mladen:

Сделайте что-то вроде этого (проверьте также комментарии)

Спасибо, вы, наверное, самый добрый администратор любой страницы. Ваша работа очень ценится.

Берегите себя.

 
dotmund:
помогите мне пожалуйста закодировать этот индикатор в советник я хочу чтобы он торговал только одной свечой когда появляется стрелка и закрывал ее когда свеча закрывается помогите мне пожалуйста сделать это как мне нужно

пожалуйста, помогите мне