Здесь сплетение кода советника и индикатора. Я вот даже не знаю, будет ли в советнике работать SetIndexBuffer(). По идее, не должен. В советнике все это не нужно. Цикл по барам тоже не нужен. Берите напрямую значения МА и ADX на нужных барах без сохранения значений в массив, достаточно сохранения в локальные переменные.
Ihor Herasko #:
Здесь сплетение кода советника и индикатора. Я вот даже не знаю, будет ли в советнике работать SetIndexBuffer(). По идее, не должен. В советнике все это не нужно. Цикл по барам тоже не нужен. Берите напрямую значения МА и ADX на нужных барах без сохранения значений в массив, достаточно сохранения в локальные переменные.
Здесь сплетение кода советника и индикатора. Я вот даже не знаю, будет ли в советнике работать SetIndexBuffer(). По идее, не должен. В советнике все это не нужно. Цикл по барам тоже не нужен. Берите напрямую значения МА и ADX на нужных барах без сохранения значений в массив, достаточно сохранения в локальные переменные.
А что надо убрать? Я вообще профан в кодинге.. SetIndexBuffer()?
У вас вообще код основан на старой версии языка, которой уже лет 10-15.
Функций int init(), int start(), void deinit() давно уже нет, вместо extern используются input.
Лучше возьмите простенький советник из кодобазы, которому не более 2-3 лет,
разберитесь как он работает и модифицируйте потихоньку по своим нуждам.
Так будет продуктивнее.
Функций int init(), int start(), void deinit() давно уже нет, вместо extern используются input.
Лучше возьмите простенький советник из кодобазы, которому не более 2-3 лет,
разберитесь как он работает и модифицируйте потихоньку по своим нуждам.
Так будет продуктивнее.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вроде код все компилируются но не открывает позиции.. Новичок, может подскажите что не так с кодом и стоит ли вообще такой стратегией торговать?
extern int period1 = 10; // период первой MA
extern int period2 = 20; // период второй MA
extern int adx_period = 14; // период ADX
extern double risk = 4.0; // риск в процентах от депозита
extern double stop_loss = 100.0; // размер стоп-лосса в пунктах
double ma1[], ma2[], adx[]; // массивы для хранения значений индикаторов
int init()
{
SetIndexBuffer(0, ma1); // устанавливаем буфер для первой MA
SetIndexBuffer(1, ma2); // устанавливаем буфер для второй MA
SetIndexBuffer(2, adx); // устанавливаем буфер для ADX
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexLabel(0, "MA1");
SetIndexLabel(1, "MA2");
SetIndexLabel(2, "ADX");
IndicatorDigits(Digits + 1);
return(0);
}
int start()
{
int counted_bars = IndicatorCounted();
int limit = Bars - counted_bars;
double lots = NormalizeDouble(AccountBalance() * risk / 100 / stop_loss / 10, 2); // расчет размера лота
int ticket; // объявляем переменную "ticket"
for (int i = limit; i >= 0; i--)
{
ma1[i] = iMA(NULL, 0, period1, 0, MODE_EMA, PRICE_CLOSE, i);
ma2[i] = iMA(NULL, 0, period2, 0, MODE_EMA, PRICE_CLOSE, i);
adx[i] = iADX(NULL, 0, adx_period, PRICE_CLOSE, MODE_MAIN, i);
if (adx[i] > 25 && ma1[i] > ma2[i] && ma1[i - 1] < ma2[i - 1])
{
// сигнализируем о пересечении восходящего тренда и открываем позицию на покупку
if (!OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - stop_loss * Point, Bid + stop_loss * Point);
if (ticket > 0)
Print("Открыта позиция на покупку: ", lots, " лотов");
}
}
else if (adx[i] > 25 && ma1[i] < ma2[i] && ma1[i - 1] > ma2[i - 1])
{
// сигнализируем о пересечении нисходящего тренда и открываем позицию на продажу
if (!OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + stop_loss * Point, Ask - stop_loss * Point);
if (ticket > 0)
Print("Открыта позиция на продажу: ", lots, " лотов");
}
}
}
return(0);
}
void deinit()
{
//очищаем буферы индикаторов
ArrayInitialize(ma1, 0.0);
ArrayInitialize(ma2, 0.0);
ArrayInitialize(adx, 0.0);
}