[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 295

 

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

Спасибо

//+------------------------------------------------------------------+
//|                                                   Stochastic.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1 1
#property  indicator_width2 1
#property indicator_level1 20
#property indicator_level2 50
#property indicator_level3 80
#property indicator_levelcolor DimGray
//---- input parameters
//+------------------------------------------------------------------+
extern bool Alerts  = true;
//+------------------------------------------------------------------+
extern int AlertBar = 1; 
//+------------------------------------------------------------------+
extern int KPeriod  = 5;
//+------------------------------------------------------------------+
extern int DPeriod  = 2;
//+------------------------------------------------------------------+
extern int Slowing  = 3;
//+------------------------------------------------------------------+
extern int MAMethod = 3; // 0=SMA,1=EMA,2=SSMA,3=LWMA
//+------------------------------------------------------------------+
//-------------------------------------------------------------------+
//-----
datetime LastAlertTime = -333;
//---- Buffers
double MainBuffer[];
double SignalBuffer[];
double HighesBuffer[];
double LowesBuffer[];
//----
int    MAMode;
string strMAType;
//----
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
  string short_name;
//---- 2 additional buffers are used for counting.
  IndicatorBuffers(4);
//---- indicator lines
  SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
  SetIndexBuffer(0,MainBuffer);
  SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
  SetIndexBuffer(1,SignalBuffer);
//----
  SetIndexBuffer(2,HighesBuffer);
  SetIndexBuffer(3,LowesBuffer);
//----
  switch(MAMethod)
  {
    case 1:  strMAType="EMA";  MAMode=MODE_EMA;  break;
    case 2:  strMAType="SMMA"; MAMode=MODE_SMMA; break;
    case 3:  strMAType="LWMA"; MAMode=MODE_LWMA; break;
    default: strMAType="SMA";  MAMode=MODE_SMA;  break;
  }
//---- name for DataWindow and indicator subwindow label
  short_name="Stochastic ("+KPeriod+","+DPeriod+","+Slowing+","+strMAType+")";
  IndicatorShortName(short_name);
  SetIndexLabel(0,short_name);
  SetIndexLabel(1,"Signal");
//----
  draw_begin1=KPeriod+Slowing;
  draw_begin2=draw_begin1+DPeriod;
  SetIndexDrawBegin(0,draw_begin1);
  SetIndexDrawBegin(1,draw_begin2);
//----
  return(0);
}
//+------------------------------------------------------------------+
//| Stochastic oscillator                                            |
//+------------------------------------------------------------------+
int start()
{
  int i,k;
  int counted_bars=IndicatorCounted();
  double price;
//----
  if(Bars<=draw_begin2) return(0);
//---- initial zero
  if(counted_bars<1)
  {
    for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0;
    for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0;
  }
//---- minimums counting
  i=Bars-KPeriod;
  if(counted_bars>KPeriod) i=Bars-counted_bars-1;
  while(i>=0)
  {
    double min=1000000;
    k=i+KPeriod-1;
    while(k>=i)
    {
      price=Low[k];
      if(min>price) min=price;
      k--;
    }
    LowesBuffer[i]=min;
    i--;
  }
//---- maximums counting
  i=Bars-KPeriod;
  if(counted_bars>KPeriod) i=Bars-counted_bars-1;
  while(i>=0)
  {
    double max=-1000000;
    k=i+KPeriod-1;
    while(k>=i)
    {
      price=High[k];
      if(max<price) max=price;
      k--;
    }
    HighesBuffer[i]=max;
    i--;
  }
//---- %K line
  i=Bars-draw_begin1;
  if(counted_bars>draw_begin1) i=Bars-counted_bars-1;
  while(i>=0)
  {
    double sumlow=0.0;
    double sumhigh=0.0;
    for(k=(i+Slowing-1);k>=i;k--)
    {
      sumlow+=Close[k]-LowesBuffer[k];
      sumhigh+=HighesBuffer[k]-LowesBuffer[k];
    }
    if(sumhigh==0.0) MainBuffer[i]=100.0;
    else MainBuffer[i]=sumlow/sumhigh*100;
    i--;
  }
//---- last counted bar will be recounted
  if(counted_bars>0) counted_bars--;
  int limit=Bars-counted_bars;
//---- signal line is simple movimg average
  for(i=0; i<limit; i++)
  SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MAMethod,i);
//+------------------------------------------------------------------+ 
  if(Alerts)
  {
    if(AlertBar >= 0 && Time[0] > LastAlertTime)
    {
      if(MainBuffer[i+AlertBar] > SignalBuffer[i+AlertBar] && MainBuffer[i+AlertBar+1] <= SignalBuffer[i+AlertBar+1])
      {
        Alert("Stochastic BULL! ",Symbol()," TF: ",Period());
      }
      if(MainBuffer[i+AlertBar] < SignalBuffer[i+AlertBar] && MainBuffer[i+AlertBar+1] >= SignalBuffer[i+AlertBar+1])
      { 
        Alert("Stochastic BEAR! ",Symbol()," TF: ",Period());
      }
    }
    LastAlertTime = Time[0];
  }
//----
  return(0);
}
//+------------------------------------------------------------------+
 

Хочу сделать мульти МА. Т.е. на чарте должно быть видно 2 МА - одну текущего инструмента, другую - второго инструмента:

Возникает вопрос к привязкой их друг к другу, т.к. волатильность и кратность пунктов у каждого инструментов своя. Что-то мне ничего дельного в голову ни приходит.... Помогите! :)

 
Cmu4:

Хочу сделать мульти МА. Т.е. на чарте должно быть видно 2 МА - одну текущего инструмента, другую - второго инструмента:

Возникает вопрос к привязкой их друг к другу, т.к. волатильность и кратность пунктов у каждого инструментов своя. Что-то мне ничего дельного в голову ни приходит.... Помогите! :)

С подокном надеюсь проблем не вызывает.

От задачи зависит, можно на обоих графиках брать МА с большим периодом и ее считать за основу.

к примеру рабочая МА период 12. Для основного символа рисуем как есть.

Для других находим разницу между МА 12 и 60, эту разницу помноженную на коэффициент плюсуем к МА 60 основного символа.

 
artmedia70:

А уточнить? Выбирать первую из открытых (в рынке находящихся) или из уже закрытых? А если первая позиция была открыта три года назад? Её нужно выбрать?

А вообще зачем это всё?

Выбрать первую, из открытых.

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

 
forexnew:
Попробовал использовать функцию IsConnected() - безрезультатно. Кто посоветует что-нибудь дельное?

может посмотреть еще что возвращает IsTradeAllowed() ?

Поможите пожалуйста. Пытаюсь строить трендовые по двум точкам привязанным к барам на N баров вперед от последней точки. Т.е. входящие - время-цена первой и второй точки, и N выраженное в количестве баров вперед (флажок луч = false). Если вторая точка предположим лежит на баре 1 от текущего бара 0, и мне нужно нарисовать от нее на 10 баров вперед, как мне вычислить время и цену бара из будущего?

 

Помогите пожалуйста.

Как узнать время High[3]?

 
alex11230:

Помогите пожалуйста.

Как узнать время High[3]?


Time[3]
 
Roll:

Пробуйте:
Спасибо :)
 

Как изобразить:

/

в string?

Например:

string path=TerminalPath()+"/logs/"+tekTime+".log";

выдает ошибку, а если убрать слэш "/"

string path=TerminalPath()+"logs"+tekTime+".log";

- ошибки нет.

Причина обращения: