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

 

Пожалуйста, помогите мне в этом вопросе.

Ниже приведен кросс-алерт MA, но я получаю слишком много сообщений на одно и то же уведомление.

Я просто хочу получать 1 уведомление на 2 последовательных бара, это означает, что нужнопропустить 2бара перед следующим уведомлением.

Как я могу это сделать, пожалуйста, помогите мне. Большое спасибо



//+------------------------------------------------------------------+

//|                MA Cross Arrows.mq4                               |

//|                Copyright © 2006  Scorpion@fxfisherman.com        |

//+------------------------------------------------------------------+

#property copyright "FxFisherman.com"

#property link      "http://www.fxfisherman.com"



#property indicator_chart_window

#property indicator_buffers 3

#property indicator_color1 Blue

#property indicator_color2 White

#property indicator_color3 Red



extern int Crossed_Pips = 0;

extern int MA_Period = 21;

extern int MA_Type = MODE_SMA;

extern int Shift_Bars=0;

extern int Bars_Count= 1000;

int state;

  

//---- buffers

double v1[];

double v2[];

double v3[];

  





int start()

 {

  double ma;

  int previous;

  int i;

  int shift;

  bool crossed_up, crossed_down;

  int totalBars = Bars - (MA_Period * 2);

  

  if (Bars_Count > 0 && Bars_Count <= totalBars)

  {

    i = Bars_Count;

  }else if(totalBars <= 0 ) {

    return(0);

  }else{

    i = totalBars;

  }

  

  while(i>=0)

   {

    shift = i + Shift_Bars;

    ma = iMA(Symbol(), Period(), MA_Period, 0, MA_Type, PRICE_CLOSE, shift);

    crossed_up = High[shift] >= (ma + (Crossed_Pips * Point));

    crossed_down = Low[shift] <= (ma - (Crossed_Pips * Point));



    v1[i] = NULL;

    v2[i] = NULL;    

    v3[i] = ma;

    if (crossed_up && previous != 1) {

      v1[i] = ma + (Crossed_Pips * Point);

      previous = 1;

    }else if(crossed_down && previous != 2){

      v2[i] = ma - (Crossed_Pips * Point);

      previous = 2;

    }

 

    i--;

   }

   

   ma = iMA(Symbol(), Period(), MA_Period, 0, MA_Type, PRICE_CLOSE, 0);

   if (Close[0] >= ma + (Crossed_Pips * Point) && state != 1) { 

      state = 1;

      SendNotification(Symbol() + "M"+_Period + " Price crossed UP EMA21.");

   }else if (Close[0] <= ma - (Crossed_Pips * Point) && state != -1) {

      state = -1;

      SendNotification(Symbol() + "M"+_Period + " Price cross DOWN the EMA21.");

   }



   return(0);

 }
 

Когда я объявляю переменную extern, я получаю сообщение об ошибке "extern-unexpected token".

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

Файлы:
error1.zip  116 kb
 
Ricardo Schuller:

Когда я объявляю переменную extern, я получаю сообщение об ошибке "extern-unexpected token".

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

Вы не можете использовать extern внутри метода или функции.

 

как исправить ошибку?

 
Mo3tasemovic:

как исправить ошибку ??

" GBPUSD"

 
Keith Watford:

" GBPUSD"

спасибо

 
pivboll:

Помогите модифицировать индикатор

Я пытаюсь модифицировать индикатор MACD, чтобы превратить его в Trend Thrust Indicator, как описано в книге Баффа Дормайера "Инвестирование с помощью анализа объема".

У меня проблемы с переменной и я не могу добиться достойного результата. Я прилагаю volWMA и VW MACD, которые работают.

Вот описание

Индикатор трендовой тяги

Индикатор направленного тренда (Tti), усовершенствованная версия индикатора схождения/расхождения скользящих средних, взвешенных по объему (VW-Macd), был представлен в моей книге Investing With Volume Analysis. Tti использует множитель объема уникальным образом, чтобы преувеличить влияние объема на скользящие средние, взвешенные по объему. Как и VW-Macd, Tti использует скользящие средние, взвешенные по объему, в отличие от экспоненциальных скользящих средних. Средние, взвешенные по объему, взвешивают цены закрытия пропорционально объему торгов за каждый период времени, поэтому Tti придает большее значение ценовым тенденциям с большим объемом и меньшее значение периодам с меньшим объемом. В февральском номере журнала Stocks & Commodities за 2001 год я показал, что скользящие средние, взвешенные по объему (Buff averages, или Vwmas), улучшают реагирование и одновременно повышают надежность простых скользящих средних.

Как и Macd и VW-Macd, Tti рассчитывает спред путем вычитания короткой (быстрой) средней из длинной (медленной) средней. Этот спред в сочетании с множителем объема создает спред Buff.

Расчеты выглядят следующим образом

множитель объема = быстрый VolWMA / медленный VolWMA

множитель объема возводится во вторую степень, а затем умножается на быструю VolWMA, чтобы получить объем, увеличенный до быстрого среднего значения

множитель объема возводится во вторую степень, а затем умножается на медленный VolWMA, чтобы получить среднее значение Volume enhance slow

TTi = увеличение быстрого среднего - увеличение медленного среднего

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

ссылка на индикатор: https://www.sendspace.com/file/rfy2dv

Здравствуйте, мой друг. Вы разобрались с TTI? Можете ли вы поделиться здесь или отправить мне через PM? Спасибо

 
Hi
Не могли бы вы помочь мне с этой проблемой
Мне нужен советник, которыйотправляет push-уведомление всякий раз, когда разница между ценой предложения и ценой кинджун сен (в ишимоку) превышает 3 пипса (30 пунктов) в 1-минутном временном потоке.
 

хай,


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

спасибо

Файлы:
 

Привет

Я нашел темы типа "iCustom возвращает неверные значения", но это немного другое.

Я пытаюсь создать индикатор, который сравнивает размер одинаковых баров (бычий/медвежий) в последовательности.

и показывает максимальные значения сравнения в гистограмме.

вот так.

максимальное_значение

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

С ArrayMaximum результат получается быстрее. но что-то не так с моим кодом.пример:

iCustom_diff

вот код, который сравнивает значения iCustom и возвращает неправильные значения:

#property indicator_separate_window
#property indicator_buffers 4


#property indicator_color1 DeepSkyBlue
#property indicator_width1 10


#property indicator_color2 Red
#property indicator_width2 10



#property indicator_color3 DodgerBlue
#property indicator_width3 4


#property indicator_color4 Crimson
#property indicator_width4 4


#property indicator_level1 0
#property indicator_levelcolor White
#property indicator_levelstyle 0


string LF = "\n";  // use this in custom or utility blocks where you need line feeds
int ObjCount = 0;  // count of all objects created on the chart, allows creation of objects with unique names
int current = 0; // variable points to current bar


double Buffer1[];
double Buffer2[];

double Buffer3[];
double Buffer4[];


double bar_0;
double bar_1;
double bar_2;
double bar_3;
double bar_4;
double bar_5;
double bar_6;
double bar_7;
double bar_8;
double bar_9;
double bar_10;
double bar_11;


//+------------------------------------------------------------------+
int init()
{
    if (false) ObjectsDeleteAll();      // clear the chart

    IndicatorDigits(Digits-5);
    IndicatorBuffers(4);
    
    SetIndexBuffer(0, Buffer1);
    SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID);
    
    SetIndexBuffer(1, Buffer2);
    SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID);
    
    
    
    
    SetIndexBuffer(2, Buffer3);
    SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID);
    
    SetIndexBuffer(3, Buffer4);
    SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID);
    
    
    return(0);
}


//+------------------------------------------------------------------+
int deinit()
{
if (false) ObjectsDeleteAll();

return(0);
}


//+------------------------------------------------------------------+
int start()
{
OnEveryTick1();

return(0);
}
//+------------------------------------------------------------------+
void OnEveryTick1()
{
    
    int i;
    int counted_bars = IndicatorCounted();
    if(counted_bars < 0) return(-1);
    if(counted_bars > 0) counted_bars--;
    i = Bars - counted_bars - 1;
    // main calculation loop
    while (i >= 0)
    
{
current = i;
        
//current  >0
//current+1=0
TechnicalAnalysis00();

//current  >0
//current+1>0
//current+2=0
TechnicalAnalysis01();

//current  >0
//current+1>0
//current+2>0
//current+3=0
TechnicalAnalysis02();


i--;
}
}

//-----------------------------------------------------
//---------bar_0-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis00()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);

if
(
bar_0 > 0
&&
bar_1 == 0
)

{
Histogram00();
}

}

void Histogram00()
{
Buffer1[current]= bar_0;
}
//-----------------------------------------------------
//---------bar_1-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis01()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);
bar_2 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+2);

if
(
bar_0 > 0
&&
bar_1 > 0
&&
bar_2 == 0
)

{
Histogram01();
}

}

void Histogram01()
{
int x_up_01[] = {0,0};

x_up_01[0] = bar_0;
x_up_01[1] = bar_1;

int maxValue_01 = ArrayMaximum(x_up_01);

Buffer1[current]= x_up_01[maxValue_01];
}
//-----------------------------------------------------
//---------bar_2-------------------------------
//-----------------------------------------------------
void TechnicalAnalysis02()
{

bar_0 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current);
bar_1 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+1);
bar_2 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+2);
bar_3 = iCustom(NULL, NULL, "candles_from_chart-celi_masivi",0,current+3);

if
(
bar_0 > 0
&&
bar_1 > 0
&&
bar_2 > 0
&&
bar_3 == 0
)

{
Histogram02();
}

}

void Histogram02()
{
int x_up_02[] = {0,0,0};

x_up_02[0] = bar_0;
x_up_02[1] = bar_1;
x_up_02[2] = bar_2;

int maxValue_02 = ArrayMaximum(x_up_02);

Buffer1[current]= x_up_02[maxValue_02];
}
//-----------------------------------------------------
//---------bar_3--------and so on-----------------------
//-----------------------------------------------------

где моя ошибка? как я могу ее исправить?
Я пробовал вызывать iCustom со всеми внешними параметрами - тот же неверный результат. Я попробовал вызвать iCustom без внешних параметров - тот же неверный результат.

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

основной код (первая гистограмма) и второй код (вторая гистограмма) на его основе:

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