[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 104

 
Можно создать советник который закрыл бы все ордера при срабатывания take-profit-a у последнего открытова ордера?
 

Уважаемые программисты!

Помогите, пожалуйста. Индикатор рисует значения по бычьей скрытой дивергенции, и НИ В Какую не рисует медвежью скрытую.... Пишет, что ошибка 4002 - Индекс массива - вне диапазона.

Я вроде бы все поисправляла... Промучалась целый вечер... И обидно - код простейший... Но бычью рисует стрелками, а медвежью - никак... ПОМОГИТЕ! В чем ошибка?????????????????????

//+------------------------------------------------------------------+
//| div zz 5.mq4 |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 CLR_NONE
#property indicator_color2 CLR_NONE
#property indicator_color3 BlueViolet
#property indicator_color4 Red
#define arrowsDisplacement 0.0001
double cci[];
double cci1[];
double bullishDivergence[];
double bearishDivergence[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators

SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);
SetIndexStyle(2, DRAW_ARROW);
SetIndexStyle(3, DRAW_ARROW);

SetIndexBuffer(0, cci);
SetIndexBuffer(1, cci1);
SetIndexBuffer(2, bullishDivergence);
SetIndexBuffer(3, bearishDivergence);

SetIndexArrow(2, 233);
SetIndexArrow(3, 234);

return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
//int limit=Bars-counted_bars;
double vpadcci[];
double v[];
double hh[];
double ss[];



for (int i=500; i>=0; i--)
{
cci[i] = iCustom(NULL, 0, "CCI-OnArray_", 9, 3, 5, 25, 1, i);
if (
(cci[i]<cci[i-1])&&
(cci[i]<cci[i-2])&&
(cci[i]<cci[i+1])&&
(cci[i]<cci[i+2])
)
{
vpadcci[i]=cci[i];
ss[i]=Low[i];
}
}



for(int j=500; j>0; j--)
{
cci[j] = iCustom(NULL, 0, "CCI-OnArray_", 9, 3, 5, 25, 1, j);
if (
((cci[j+1]>vpadcci[10])&&
(cci[j]<vpadcci[10])&&
(Low[j]>ss[10])) ||
((cci[j+1]>vpadcci[9])&&
(cci[j]<vpadcci[9])&&
(Low[j]>ss[9])) ||
((cci[j+1]>vpadcci[8])&&
(cci[j]<vpadcci[8])&&
(Low[j]>ss[8])) ||
((cci[j+1]>vpadcci[7])&&
(cci[j]<vpadcci[7])&&
(Low[j]>ss[7])) ||
((cci[j+1]>vpadcci[6])&&
(cci[j]<vpadcci[6])&&
(Low[j]>ss[6])) ||
((cci[j+1]>vpadcci[5])&&
(cci[j]<vpadcci[5])&&
(Low[j]>ss[5])) ||
((cci[j+1]>vpadcci[4])&&
(cci[j]<vpadcci[4])&&
(Low[j]>ss[4])) ||
((cci[j+1]>vpadcci[3])&&
(cci[j]<vpadcci[3])&&
(Low[j]>ss[3])) ||
((cci[j+1]>vpadcci[2])&&
(cci[j]<vpadcci[2])&&
(Low[j]>ss[2])) ||
((cci[j+1]>vpadcci[1])&&
(cci[j]<vpadcci[1])&&
(Low[j]>ss[1])) ||
((cci[j+1]>vpadcci[0])&&
(cci[j]<vpadcci[0])&&
(Low[j]>ss[0]))
)

{ bullishDivergence[j] = Low[j] - arrowsDisplacement;
}
}


for (i=1; i<500; i++)
{
cci1[i] = iCustom(NULL, 0, "CCI-OnArray_", 9, 3, 5, 25, 1, i);
if
(
(cci1[i]>cci1[i-1])&&
(cci1[i]>cci1[i-2])&&
(cci1[i]>cci1[i+1])&&
(cci1[i]>cci1[i+2])
)
{
v[i]=cci1[i];
hh[i]=High[i];
}
}



for(j=1; j<500; j++)
{
cci1[j] = iCustom(NULL, 0, "CCI-OnArray_", 9, 3, 5, 25, 1, j);
if (
((cci1[j+1]<v[10])&&
(cci1[j]>v[10])&&
(High[j]<hh[10])) ||
((cci1[j+1]<v[9])&&
(cci1[j]>v[9])&&
(High[j]<hh[9])) ||
((cci1[j+1]<v[8])&&
(cci1[j]>v[8])&&
(High[j]<hh[8])) ||
((cci1[j+1]<v[7])&&
(cci1[j]>v[7])&&
(High[j]<hh[7])) ||
((cci1[j+1]<v[6])&&
(cci1[j]>v[6])&&
(High[j]<hh[6])) ||
((cci1[j+1]<v[5])&&
(cci1[j]>v[5])&&
(High[j]<hh[5]))
)

{ bearishDivergence[j] = High[j] + arrowsDisplacement;

}
}


return(0);
}



Файлы:
divfzzg5.mq4  5 kb
 
Перенесено из отдельной ветки. Простые вопросы рекомендуется задавать здесь. Код надо размещать через кнопку SRC, так намного удобнее читать.


KoDim 14.02.2011 09:29
Здравствуйте.

В процессе программирования советника вызвал недоумение параметр ma_shift – сдвиг средней линий в барах. Если сдвиг положительный, то линия смещается вправо. И наоборот, если сдвиг отрицательный, то линия смещается влево.
При применении положительного значения при пересечении средних ордер открывается.
Однако если поставить параметр отрицательный - ордер не открывается.
С чем это связано?

Вот выдержка из кода

SMFast0=iMA( NULL, Tmfrm_work, PeriodSMFast, -3, ModeSMFast, PriceSMFast, 0 ); // МА быстрая на текущем баре
SMFast1=iMA( NULL, Tmfrm_work, PeriodSMFast, -3, ModeSMFast, PriceSMFast, 1 ); // МА быстрая на первом баре

SMSlow0=iMA( NULL, Tmfrm_work, PeriodSMSlow, 0, ModeSMSlow, PriceSMSlow, 0 ); // МА медленная на текущем баре
SMSlow1=iMA( NULL, Tmfrm_work, PeriodSMSlow, 0, ModeSMSlow, PriceSMSlow, 1 ); // МА медленная на первом баре

if(SMFast0>SMSlow0 && SMFast1<SMSlow1)

{
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
}

if(SMFast0<SMSlow0 && SMFast1>SMSlow1)
{
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
} 
 

Здраствуйте! Я не давно начал пытаться разобраться в написании советников, есть такой вопрос. Как можно прописать что бы советник сам выставлял стоп лоссы, после того как я поставил (сам) стоп бай и стоп сел? Тоесть после прохода стоп бая или стоп села на пунктов 5 (грубо говоря) советник тут же ставил сам стоп лос.

 
Poseidon:
Можно создать советник который закрыл бы все ордера при срабатывания take-profit-a у последнего открытова ордера?

можно.

Pupersa, найди этот ордер и измени в нём параметр "стоплосс", ничё сложного.

KoDim, может связано с тем что если значения сдвинуты влево то на барах правее (пересечение на которых ты наверн и проверяешь) их вообще нет?

 

вопрос програмистам: как сделать число после запятой целым?:)

например в числе 1,128 нужно 128, в 1,12 - 12, в 1,2 - 2)

число - внешняя переменная.

 
Вопрос по MT5. Как определить. что тестер завершил работу? Кроме как визуально :)
 
eddy:

вопрос програмистам: как сделать число после запятой целым?:)

например в числе 1,128 нужно 128, в 1,12 - 12, в 1,2 - 2)

число - внешняя переменная.


посмотрите здесь: https://docs.mql4.com/ru/basis/operations/math
 
nemo811:


Если на рынке работают деньги и их объёмы (а не волны Эллиота) и движение цены не хаотичное, а обусловленное этими самыми объёмами, то два сигнала по 2 парам (из рассматриваемых трёх) дают боле сильный сигнал по третьей паре. Ищите уровни скопления ордеров, анализируйте VSA и Вы найдёте искомые X и Y :)))

Кроме того (см. рисунок) чёткий флет по одной валютной паре (образуемый 2-мя валютами) не мешает тренду третьей валюты (по оставшимся 2-м парам). При тренде по более чем 1-ой валюте - образуется своеобразный "рыночный хаос". Так как внутридневные тренды менее устойчивы, чем средне- и долгосрочные - данный хаос больше всего выражен на мелких ТФ.

Изучая рынок в таком свете я вообще стал склонен к мысли, что тренд самих валют (а не валютных пар) представляет собой более устойчивое образование, иначе мы бы получили график-осциллятор не поддающийся никакому анализу.

Вот о чём мне говорит этот рисунок. ))))

Тестирование советника по индексу доллара на М1 и М5 дало худшие результаты, чем по паре GBP/USD. Большие ТФ протестировать не получается ввиду очень малого архива истории. Фибогрупп не даёт её много по нидексам, а мгогие ДЦ вообще не дают. Поэтому исследовать тренды валют и работать на них с малым лотом - 0.01 проблематично ....
 
eddy:

вопрос програмистам: как сделать число после запятой целым?:)

например в числе 1,128 нужно 128, в 1,12 - 12, в 1,2 - 2)

число - внешняя переменная.

double a = 1.123345;
int b = a;
Так тоже можно.
Причина обращения: