[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 309

 

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

Выводятся только две линии МАшек, хотя код эквивалентный для всех четырех линий.В чем проблема?

#property indicator_separate_window // Индик. рисуется в отдельном окне
#property indicator_buffers 4 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии
#property indicator_color3 Olive
#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(3,Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(4,Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (4,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i, // Индекс бара
History=3000,
Counted_bars; // Количество просчитанных баров
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars;//-Counted_bars-1; // Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
Alert("ma20=",ma20, " ma20_s=",ma20_s," ma40_s=",ma40_s," ma40=",ma40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}

 

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

2.Как можно вывести отладочные данные и куда ( в какое окно), а то пльзоваться алертами неудобно.

3.Как можно обновить версию MQL?

 

Подскажите плиз!

Как сделать чтоб советник торговал только на европейской сессии?

 
VNG писал(а) >>

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

Выводятся только две линии МАшек, хотя код эквивалентный для всех четырех линий.В чем проблема?

int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(2,Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (2,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(3,Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (3,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}

Одну ошибку я нашел. После буфера 1 шел сразу же буфер 3. Буфер 2 был пропущен

Только не стоило бы машки и разность машек выводить в одном окне. У них значения различаются более чем на порядок

 
KoDi писал(а) >>

Подскажите плиз!

Как сделать чтоб советник торговал только на европейской сессии?

Поставь сразу в начале модуля старт

if(Hour()<7 || Hour()>15)return(0);

 

Просьба посмотреть код еще раз.Убрал МАшки т.к. у вновь получаемых значений совсем другой масштаб.

Все равно ничего не выводится.

#property indicator_separate_window // Индик. рисуется в отдельном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии
//#property indicator_color3 Olive
//#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
//SetIndexBuffer(0,Buf_MA40); // Назначение массива буферу
//SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
//SetIndexBuffer(1,Buf_MA20); // Назначение массива буферу
//SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(0,Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_ROC_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i, // Индекс бара
History=3000,
Counted_bars; // Количество просчитанных баров
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars;//-Counted_bars-1; // Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}

 
VNG писал(а) >>

Просьба посмотреть код еще раз.Убрал МАшки т.к. у вновь получаемых значений совсем другой масштаб.

Все равно ничего не выводится.

#property indicator_separate_window // Индик. рисуется в отдельном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 Blue // Цвет первой линии
#property indicator_color2 Red // Цвет второй линии
//#property indicator_color3 Olive
//#property indicator_color4 Teal


double Buf_ROC_MA40[],Buf_ROC_MA20[],Buf_MA40[],Buf_MA20[]; // Объявление массивов (под буферы индикатора)
//--------------------------------------------------------------------
int init() // Специальная функция init()
{
//SetIndexBuffer(0,Buf_MA40); // Назначение массива буферу
//SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
//SetIndexBuffer(1,Buf_MA20); // Назначение массива буферу
//SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(0,Buf_ROC_MA40); // Назначение массива буферу
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
SetIndexBuffer(1,Buf_ROC_MA20); // Назначение массива буферу
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
return; // Выход из спец. ф-ии init()
}
//--------------------------------------------------------------------
int start() // Специальная функция start()
{
int i, // Индекс бара
History=3000,
Counted_bars; // Количество просчитанных баров
double ma20,ma40,MA40[],MA20[],MA40_s[],MA20_s[],ma40_s,ma20_s,ROC_MA40[],ROC_MA20[];
//--------------------------------------------------------------------
// Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars;//-Counted_bars-1; // Индекс первого непосчитанного
while(i>=0) // Цикл по непосчитанным барам
{
ma20=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i);
ma20_s=iMA("EURUSD",PERIOD_M1,20,0,MODE_SMA,PRICE_CLOSE,i+20);
ma40=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i);
ma40_s=iMA("EURUSD",PERIOD_M1,40,0,MODE_SMA,PRICE_CLOSE,i+40);
MA40_s[i]=ma40_s;
MA40[i]=ma40;
MA20[i]=ma20;
MA20_s[i]=ma20_s;
Buf_MA40[i]=ma40;
Buf_MA20[i]=ma20;
ROC_MA40[i]=MA40[i]-MA40_s[i];
Buf_ROC_MA40[i]=ROC_MA40[i];
ROC_MA20[i]=MA20[i]-MA20_s[i];
Buf_ROC_MA20[i]=ROC_MA20[i];
i--;
// Расчёт индекса следующего бара
}
//--------------------------------------------------------------------
return; // Выход из спец. ф-ии start()
}

Ошибок слишком много.

В основном ошибка в работе с массивами.

Файлы:
proba.mq4  2 kb
 

Помогите еще решить такую проблему - появляется сигнал на покупку/продажу, советник открывает сделку, выставляет профит и стоп. И вот если сделка закрывается по стопу на этой же свече, то советник открывает сделку еще раз, а надо чтоб не открывал т.е. на одном сигнале открывалась тока одна сделка.

Как это сделать?

 
KoDi >>:

Как это сделать?

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

Если это не так, сделку не открываем.

 
TheXpert >>:

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

Если это не так, сделку не открываем.

Я чё то запутался.

Дык а как он ПЕРВУЮ то сделку откроет если в условии написать чтоб он не входил пока хоть одной сделки не будет??