Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делись ссылками на форуме. Теперь они имеют Rich Content!
asaras
13
asaras 2010.11.03 00:33 

итак советник работает по 2-м ЕМА

на всех валютах с всеми лотами

дано: 10ЕМА и 50ЕМА

трейлинг стоп 25

тейкпрофит 100

стоплосс 30

если 10ЕМА пересекает 50ЕМА вверх тогда покупаем

если 10ЕМА пересекает 50ЕМА вниз тогда продаем

закрытие лота по стоплоссу или трейлинг стопу либо тейпрофиту

Warstein
799
Warstein 2010.11.03 00:43  
asaras:

итак советник работает по 2-м ЕМА

на всех валютах с всеми лотами

дано: 10ЕМА и 50ЕМА

трейлинг стоп 25

тейкпрофит 100

стоплосс 30

если 10ЕМА пересекает 50ЕМА вверх тогда покупаем

если 10ЕМА пересекает 50ЕМА вниз тогда продаем

закрытие лота по стоплоссу или трейлинг стопу либо тейпрофиту

http://dmffx.com/index.php?page=2

Серия TAClassic

http://dmffx.com/free_zip/taclassic.zip

там есть, очень качественный

asaras
13
asaras 2010.11.04 19:18  
rustein:

https://www.mql5.com/go?link=http://dmffx.com/index.php?page=2

Серия TAClassic

http://dmffx.com/free_zip/taclassic.zip

там есть, очень качественный


я посмотрел. хорошие, но не то что мне нужно.
я тут нашел один советник
даю исходный код.

#property copyright "fxtrades.ru"
#property link "http://fxtrades.ru/"

#define magic 2342002

//---- input parameters
extern double lots=0.1;
extern int fast_ma_period=10;
extern int medium_ma_period=25;
extern int slow_ma_period=50;
extern int ma_method=0;
extern int applied_price=0;
extern int close_variant = 2;
extern int take_profit=0;
extern int stop_loss=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
bool can_buy = false, can_sell = false;
int init()
{
//----

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

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double fma_prev=double iMA( Symbol(), 0, fast_ma_period, 0, ma_method, applied_price, 2);
double fma_next=double iMA( Symbol(), 0, fast_ma_period, 0, ma_method, applied_price, 1);

double mma_prev=double iMA( Symbol(), 0, medium_ma_period, 0, ma_method, applied_price, 2);
double mma_next=double iMA( Symbol(), 0, medium_ma_period, 0, ma_method, applied_price, 1);

double sma_prev=double iMA( Symbol(), 0, slow_ma_period, 0, ma_method, applied_price, 2);
double sma_next=double iMA( Symbol(), 0, slow_ma_period, 0, ma_method, applied_price, 1);

//----
int i;
int err;

//закрываем при пересечени быстрой и медленной
if (close_variant == 1 || close_variant == 0)
{
//закрываем SELL orders
if (fma_prev<=sma_prev && fma_next>sma_next && ChekForOrders(OP_SELL) > 0)
{
for(i=0;i<OrdersTotal();i++)
{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if ( OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
if (OrderClose(OrderTicket(),OrderLots(),Ask,0,Red)==false)
{
//если не получилось закрыть
err=GetLastError();
Print("OrderSend failed with error #",err);
}
}
}
//закрываем BUY orders
if (fma_prev>=sma_prev && fma_next<sma_next && fma_next<mma_next && ChekForOrders(OP_SELL)==0)
{
for(i=0;i<OrdersTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if ( OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
if (OrderClose(OrderTicket(),OrderLots(),Bid,0,Red)==false)
{
//если не получилось закрыть
err=GetLastError();
Print("OrderSend failed with error #",err);
}
}
}
}

//закрываем при пересечени быстрой и средней
if (close_variant == 2 || close_variant == 0)
{
//закрываем SELL orders
if (fma_prev<=mma_prev && fma_next>mma_next && ChekForOrders(OP_SELL) > 0)
{
for(i=0;i<OrdersTotal();i++)
{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if ( OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==magic)
if (OrderClose(OrderTicket(),OrderLots(),Ask,0,Red)==false)
{
//если не получилось закрыть
err=GetLastError();
Print("OrderSend failed with error #",err);
}
}
}
//закрываем BUY orders
if (fma_prev>=mma_prev && fma_next<mma_next && ChekForOrders(OP_SELL)==0)
{
for(i=0;i<OrdersTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if ( OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==magic)
if (OrderClose(OrderTicket(),OrderLots(),Bid,0,Red)==false)
{
//если не получилось закрыть
err=GetLastError();
Print("OrderSend failed with error #",err);
}
}
}
}

//быстрая линия должна пересечь обе
if (fma_next > sma_next && fma_next > mma_next)
can_sell = true;

if (fma_next < sma_next && fma_next < mma_next)
can_buy = true;

//если было пересечение вверх и нет активных BUY то
if ((fma_prev<=sma_prev || fma_prev<=mma_prev) && fma_next>sma_next && fma_next>mma_next && ChekForOrders(OP_BUY)==0 && can_buy)
{
//создаем buy
OrderSendFunc(OP_BUY);
can_buy = false;
}

//если было пересечение вниз то
if ((fma_prev>=sma_prev || fma_prev>=mma_prev) && fma_next<sma_next && fma_next<mma_next && ChekForOrders(OP_SELL)==0 && can_sell)
{
//создаем SELL
OrderSendFunc(OP_SELL);
can_sell = false;
}

return(0);
}
//+------------------------------------------------------------------+


//Отправляет запрос типа cmd
int OrderSendFunc(int cmd)
{
if (cmd==OP_BUY) double Price=Ask;
else Price=Bid;
int ticket=OrderSend(Symbol(),cmd,lots,Price,0,GetSL(cmd),GetTP(cmd),NULL,magic,0,Blue);
if(ticket<0)
{
int err=GetLastError();
if (err==135)
{
//если ошибка "цены изменились" то делаем вторую попытку
RefreshRates();
ticket=OrderSend(Symbol(),cmd,lots,Price,0,GetSL(cmd),GetTP(cmd),NULL,magic,0,Blue);
if (ticket<0)
{
err=GetLastError();
Print("OrderSend failed with error #",err);
}
else Print("OrderSend failed with error #",err);
return(-1);
}
}
return(ticket);
}


// Функция возвращает значение цены с учетом StopLoss.
//Для Buy Order: cmd=OP_BUY, для Sell: cmd=OP_SELL
double GetSL(int cmd)
{
if (stop_loss==0) return(0);
else
if (cmd==OP_BUY) return(Bid-stop_loss*Point);
else return(Ask+stop_loss*Point);
}

// Функция возвращает значение цены с учетом TakeProfit.
//Для Buy Order: cmd=OP_BUY, для Sell: cmd=OP_SELL
double GetTP(int cmd)
{
if (take_profit==0) return(0);
else
if (cmd==OP_BUY) return(Ask+take_profit*Point);
else return(Bid-take_profit*Point);
}


//*Функция определяет количество позиций типа cmd*
int ChekForOrders(int cmd)
{
int count=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
if (OrderSymbol()==Symbol() && OrderType()==cmd && OrderMagicNumber()==magic)
count++;
}
return(count);
}


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

Warstein
799
Warstein 2010.11.04 19:24  

добавь код правильно

asaras
13
asaras 2010.11.05 05:28  

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

Vladyslav Goshkov
2050
Vladyslav Goshkov 2010.11.05 07:46  
asaras:

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

В чем проблема - вставляйте. Можно взять из примеров или любого советника здесь, на форуме - их масса, как и типов тралов.

Если что-то не получается - задавайте вопросы. То, что Вы пишете выше, это не вопросы - утверждения.

Кстати, в советнике ошибки - закрытие ордеров. Это сотню раз обсуждалось на форуме: попытайтесь понять сами или поискать на форуме......

Удачи.

ЗЫ Если хотите помощи с кодом - оформите его правильно. Вам уже показали как. Разбирать то, что Вы выложили выше вряд ли кто возьмется..... Кому это кроме Вас нужно то ?

И вообще: есть соответствующие ветки, для поиска альтруистов и желающих поддержать халявное отношение...

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий