smc-1.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «smc-1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для MetaTrader 4, который в начальной инициализации рисует 12 трендовых линий на графике: три для стоп-ордеров (BuyStop, SellStop и их SL/TP), три для лимитных ордеров (BuyLimit, SellLimit и их SL/TP). В каждом тике советник считывает текущие значения этих линий, управляет существующими позициями — закрывает по уровням стоп-лосс и тейк-профит, при включённом trailing stop перемещает стоп-лосс в сторону прибыли. Открытие новых позиций происходит при пробое стоп-линий или касании ценой лимитных линий. Lot size рассчитывается с учётом свободного маржи, максимального риска и фактора уменьшения при серии убыточных сделок. Есть ограничение одной сделки в день и проверка минимального расстояния стоп-лосса.
Настройки программы
| Настройка | Описание |
|---|---|
| Lots | Объём лота — Базовый размер лота для расчёта оптимального объёма через LotsOptimized |
| MaximumRisk | Максимальный риск — Доля свободного маржи в процентах, используемая для расчёта начального лота |
| DecreaseFactor | Фактор уменьшения — Множитель, уменьшающий лот при наличии серии убыточных сделок без прибыли |
| Slippage | Слэппинг — Допустимое проскальзывание в пунктах при открытии и закрытии ордеров |
| >0 enables trailing stop (UseTrailingStop) | Использовать trailing stop — Включает перемещение стоп-лосса в сторону прибыли при достижении заданного уровня |
| TrailingStop | Trailing stop — Расстояние в пунктах от цены открытия, при достижении которого стоп-лосс переносится в безубыток |
| >0 LIMITS(restricts) trades to ONE PER DAY (OneTradePerDay) | Одна сделка в день — Ограничивает количество сделок до одной в день при включении |
Поиск по коду файла
extern double Lots =0.1;
extern double MaximumRisk =0.02;
extern double DecreaseFactor =3;
extern double Slippage =3;
extern int UseTrailingStop =0;//>0 enables trailing stop
extern double TrailingStop =20;
extern int OneTradePerDay =0;//>0 LIMITS(restricts) trades to ONE PER DAY
double LotsOptimized()
{
double lot=Lots;
int orders=HistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
if(lot<0.1) lot=0.1;
return(lot);
}
int init()
{
// код доступен только после оплаты
}
int start()
{
// код доступен только после оплаты
}
int cnt,total,ticket,MinDist,tmp;
double Spread;
if(Bars<100){
Print("bars less than 100");
return(0);
}
MinDist=MarketInfo(Symbol(),MODE_STOPLEVEL);
Spread=(Ask-Bid);
double BuyStop =ObjectGetValueByShift("BuyStop",0);
double BuyStopSL =ObjectGetValueByShift("BuyStopSL",0);
double BuyStopTP =ObjectGetValueByShift("BuyStopTP",0);
double SellStop =ObjectGetValueByShift("SellStop",0);
double SellStopSL=ObjectGetValueByShift("SellStopSL",0);
double SellStopTP=ObjectGetValueByShift("SellStopTP",0);
double BuyLimit =ObjectGetValueByShift("BuyLimit",0);
double BuyLimitSL =ObjectGetValueByShift("BuyLimitSL",0);
double BuyLimitTP =ObjectGetValueByShift("BuyLimitTP",0);
double SellLimit =ObjectGetValueByShift("SellLimit",0);
double SellLimitSL=ObjectGetValueByShift("SellLimitSL",0);
double SellLimitTP=ObjectGetValueByShift("SellLimitTP",0);
if(Minute()==0){
Print(Symbol(),"BuyStop:",BuyStop," BuyStopSL:",BuyStopSL," BuyStopTP:",BuyStopTP,
" SellStop:",SellStop," SellStopSL:",SellStopSL," SellStopTP:",SellStopTP);}
total=OrdersTotal();
if(total>0)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==16384 &&
OrderType()==OP_BUY &&
OrderSymbol()==Symbol())
{
if(Close[1] < BuyStopSL)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); // close LONG Показано первые 50% кода (символов: 10030)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.