Главная
Форум
MQL программирование, помощь, доработки

Для того, чтобы использовать все возможности сайта, мы рекомендуем Вам person_add Зарегистрироваться или person Войти

  • Страница 1 из 1
  • 1
Форум Трейдеров » Торговые стратегии и программирование на MQL » MQL программирование, помощь, доработки » учимся создавать советники
учимся создавать советники
Дата: Пятница, 24.07.2009, 18:31 | Сообщение # 1 Написал: startbord
Группа: Пользователи
Сообщений: 9
Награды: 0
Статус: Оффлайн

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

extern string s0 = "Setup: Main";
extern int Magic = 1121;
extern double lots = 0.1;
extern int StopLoss = 20;
extern int TakeProfit = 50;
extern double TrailingStop = 19;
int slip = 3;
extern int MaxTrade =1;

int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
static datetime TimeFlag = 0;
datetime TimeLast = Time[0];
if(TimeFlag < TimeLast)
{
TimeFlag = TimeLast;

//int MACD = GetSignal_MACD();
int RSI = GetSignal_RSI();
//int CCI = GetSignal_CCI();
//int STOCH = GetSignal_STOCH();
//int MA = GetSignal_MA();

AnalyzeSignals( RSI);
}
return(0);
}

void AnalyzeSignals( int RSI )
{
int res;

if( RSI == OP_BUY )
{
res = OrderSend(Symbol(), OP_BUY, lots, Ask, slip, Bid - StopLoss*Point, Bid + TakeProfi+TrailingStopt*Point, NULL, Magic,MaxTrade);
if (OrdersTotal()<MaxTrade)
if(res < 0) {Alert("OrderSend Error: ", GetLastError());}

}

else if( RSI == OP_SELL )
{
res = OrderSend(Symbol(), OP_SELL, lots, Bid, slip, Ask + StopLoss*Point, Ask - TakeProfit-TrailingStop*Point, NULL, Magic,MaxTrade);
if (OrdersTotal()<MaxTrade)
if(res < 0) {Alert("OrderSend Error: ", GetLastError());}
}

}
//----

int GetSignal_RSI()
{
double ha0_M1 = iCustom(NULL,0, "HeikenAshi_DM", 0, 1);
double ha1_m1 = iCustom(NULL,0, "HeikenAshi_DM", 1, 1);

if(ha0_M1> ha1_m1)
return(OP_SELL);

else

if(ha0_M1< ha1_m1)

return(OP_BUY);

else
return(-1);
}

Сообщение отредактировал startbord - Пятница, 24.07.2009, 18:39

Дата: Пятница, 24.07.2009, 21:09 | Сообщение # 2 Написал: expforex
Группа: Администраторы
Сообщений: 9463
Награды: 32
Статус: Оффлайн

Стоит внести некоторые исправления, чтобы сделки не открывались так часто:

Code
extern string s0 = "Setup: Main";   
extern int Magic = 1121;   
extern double lots = 0.1;   
extern int StopLoss = 20;   
extern int TakeProfit = 50;   
extern double TrailingStop = 19;   
int slip = 3;   
extern int MaxTrade =1;   

int Alt;

int start()   
{   
static datetime TimeFlag = 0;   
datetime TimeLast = Time[0];   
if(TimeFlag < TimeLast)   
{   
TimeFlag = TimeLast;   

//int MACD = GetSignal_MACD();   
int RSI = GetSignal_RSI();   
//int CCI = GetSignal_CCI();   
//int STOCH = GetSignal_STOCH();   
//int MA = GetSignal_MA();   

AnalyzeSignals( RSI);   
}   
return(0);   
}   

void AnalyzeSignals( int RSI )   
{   
int res;   

if( RSI == OP_BUY  && Alt!=Time[0])   
{   
res = OrderSend(Symbol(), OP_BUY, lots, Ask, slip, Bid - StopLoss*Point, Bid + TakeProfi+TrailingStopt*Point, NULL, Magic,MaxTrade);   
Alt=Time[0];
if(res < 0) {Alert("OrderSend Error: ", GetLastError());}   

}   

else if( RSI == OP_SELL && Alt!=Time[0])   
{   
res = OrderSend(Symbol(), OP_SELL, lots, Bid, slip, Ask + StopLoss*Point, Ask - TakeProfit-TrailingStop*Point, NULL, Magic,MaxTrade);   
Alt=Time[0];
if(res < 0) {Alert("OrderSend Error: ", GetLastError());}   
}   

}   
//----   

int GetSignal_RSI()   
{   
double ha0_M1 = iCustom(NULL,0, "HeikenAshi_DM", 0, 1);   
double ha1_m1 = iCustom(NULL,0, "HeikenAshi_DM", 1, 1);   

if(ha0_M1> ha1_m1)   
return(OP_SELL);   

else   

if(ha0_M1< ha1_m1)   

return(OP_BUY);   

else   
return(-1);   
}

gestureс Уважением, Владислав Expforex

Дата: Четверг, 24.09.2009, 01:23 | Сообщение # 3 Написал: startbord
Группа: Пользователи
Сообщений: 9
Награды: 0
Статус: Оффлайн

ой спасибо и правда все стало нормально только в тестере он все по прежнему также все делает biggrin

Добавлено (23.09.2009, 22:23)
---------------------------------------------
нее не помогло это просто по я воткнул туда индикатор который сигналит не так часто вот и получилась вроде как фильтрация сигнала и при новом сигнале новая сделка а старая не закрылась)а по моей тс нужно чтоб одна сделка была)конечно можно поискать другую библиотеку функций но заметил что не все эксперты могут привязываться к чат таймфрему а этот может )я понимаю что лучше написать с чистого листа самому но я еще не до конца разобрался в программировании еще нужно учиться и учиться но увы времени не хватает штурмовать учебники но я упорно тружусь над этим младший)) брат блин не помогает хотя знает этот язык от и до. говорит учись сам смотри как люди пишут сравнивай узнавай что это значит а что то ))

Сообщение отредактировал startbord - Четверг, 24.09.2009, 01:29

Форум Трейдеров » Торговые стратегии и программирование на MQL » MQL программирование, помощь, доработки » учимся создавать советники
  • Страница 1 из 1
  • 1
Поиск: