Как прикрутить к советнику трейлингстоп и вывод в безубыток? |
//+------------------------------------------------------------------+
void Trailing()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()||OrderMagicNumber()==MAGICMA)
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop)
{
if(OrderStopLoss()<Bid-TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop)
{
if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void BU()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()<=(Bid-BULevel)&&OrderOpenPrice()>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
}
}
if(OrderType() == OP_SELL)
{
if(OrderOpenPrice()>=(Ask+BULevel)&&OrderOpenPrice()<OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
}
}
}
}
}
//------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| alya-bob.mq4 |
//| Copyright © 2011, AM2. |
//| www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2."
#property link "www.forexsystems.biz"
#define MAGICMA 20110426
extern double StopLoss = 0.0035;
extern double TakeProfit = 0.007;
extern double MovingPeriod = 20;
extern double MovingShift = 0;
extern int StochOversold = 30;
extern int StochOverbought = 70;
extern double Lots = 0.1;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
int res;
//----
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре
double ma2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре
double st=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
//---- buy
if(ma1>ma2 && ma0>ma1 && Close[1]>ma0 && st<StochOversold) // Moving Average растет, Stochastic ниже уровня перепроданности и цена выше Moving Average
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue);
return;
}
//---- sell
if(ma1<ma2 && ma0<ma1 && Close[1]<ma0 && st>StochOverbought) // Moving Average убывает, Stochastic выше уровня перекупленности и цена ниже Moving Average
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red);
return;
}
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
if (BULevel!=0) BU();
if (TrailingStop!=0) Trailing();
//+------------------------------------------------------------------+
//| alya-bob.mq4 |
//| Copyright © 2011, AM2. |
//| www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2."
#property link "www.forexsystems.biz"
#define MAGICMA 20110427
extern double StopLoss = 0.0035;
extern double TakeProfit = 0.007;
extern double BULevel = 0.001;
extern double TrailingStop = 0.005;
extern int MovingPeriod = 20;
extern int MovingShift = 0;
extern int StochOversold = 30;
extern int StochOverbought = 70;
extern double Lots = 0.1;
//+------------------------------------------------------------------+
//| alya-bob.mq4 |
//| Copyright © 2011, AM2. |
//| www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2."
#property link "www.forexsystems.biz"
#define MAGICMA 20110427
extern double StopLoss = 0.0035;
extern double TakeProfit = 0.007;
extern double BULevel = 0.001;
extern double TrailingStop = 0.005;
extern int MovingPeriod = 20;
extern int MovingShift = 0;
extern int StochOversold = 30;
extern int StochOverbought = 70;
extern double Lots = 0.1;
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
int res;
//----
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); // Значение Moving Average на текущем баре
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1); // Значение Moving Average на предыдущем баре
double ma2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2); // Значение Moving Average на предпредыдущем баре
double st=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
//---- buy
if(ma1>ma2 && ma0>ma1 && Close[1]>ma0 && st<StochOversold) // Moving Average растет, Stochastic ниже уровня перепроданности и цена выше Moving Average
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue);
return;
}
//---- sell
if(ma1<ma2 && ma0<ma1 && Close[1]<ma0 && st>StochOverbought) // Moving Average убывает, Stochastic выше уровня перекупленности и цена ниже Moving Average
{
res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red);
return;
}
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
if (BULevel!=0) BU();
if (TrailingStop!=0) Trailing();
}
//+------------------------------------------------------------------+
void Trailing()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol()||OrderMagicNumber()==MAGICMA)
if(OrderType()==OP_BUY)
{
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>TrailingStop)
{
if(OrderStopLoss()<Bid-TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>TrailingStop)
{
if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------+
void BU()
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()<=(Bid-BULevel)&&OrderOpenPrice()>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
}
}
if(OrderType() == OP_SELL)
{
if(OrderOpenPrice()>=(Ask+BULevel)&&OrderOpenPrice()<OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
}
}
}
}
}
//------------------------------------------------------------------+
Следующая запись в группе Эффективное использование MagicNumber ордеров для упрощения анализа при торговле советниками. |
|
26 апреля 2011
|
10 октября 2011
|
Комментарии (14)
32 Nord Сообщений: 1327 - Дмитрий
35 AM2 Автор Сообщений: 16392 - Андрей
9 amyrgan145 Сообщений: 428 - Амыр
35 AM2 Автор Сообщений: 16392 - Андрей
В таком случае Вы можете написать в своем блоге и сделать пометку с просьбой переместить в нужную группу. Я перемещу.
Inside Сообщений: 986 - модератор
Хочу создать топик как внедрить Мартингейл в советник!
Для особо агрессивных торговцев
AM2, скажите, а как вы прикрепили в топик код MQL чтобы он просматривался так красиво?
9 amyrgan145 Сообщений: 428 - Амыр
Для этого нужно вставить код в текст, выделить его и нажать кнопку code в панели форматирования.
Добавил более подробное описание функций форматирования в Справку Там же в комментариях Вы можете задавать дальнейшие вопросы по использованию сайта, созданию топика, форматированию и т.д.
Inside Сообщений: 986 - модератор
35 AM2 Автор Сообщений: 16392 - Андрей
amyrgan145 хочет полноценный мануал сделать — лишним точно не будет!
11 pilot Сообщений: 410
9 amyrgan145 Сообщений: 428 - Амыр
15 div15 Сообщений: 71 - div15
35 AM2 Автор Сообщений: 16392 - Андрей
А с новым билдом будет работать этот код БУ и Трала?
И как регулировать параметры: условие БУ, старт трала, шаг трала и расстояние до цены? Редактирован: 1 ноября 2015, 18:08
3 Lagoda Сообщений: 53
20 alex30774 Сообщений: 757
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий