willrik: Вот решился взяться за советник на Индикаторах ББ и МА ...
За основу взят Moving Average.mq4 ? Но там сейчас ВМЕСТО void start() используется void OnTick() - это более современно. И то вместо IsTradeAllowed()==false считаю более изящным да и кратким !IsTradeAllowed(). А трал есть, судя по параметру input double TrailingStop =30; в MACD Sample.mq4, который рядом с Moving Average.mq4 в дистрибутиве терминала...
STARIJ:
За основу взят Moving Average.mq4 ? Но там сейчас ВМЕСТО void start() используется void OnTick() - это более современно. И то вместо IsTradeAllowed()==false считаю более изящным да и кратким !IsTradeAllowed(). А трал есть, судя по параметру input double TrailingStop =30; в MACD Sample.mq4, который рядом с Moving Average.mq4 в дистрибутиве терминала...
Вам естественно виднее... вот и прошу помощи чтобы сделать боли менее советник для пользование на торгах.
За основу взят Moving Average.mq4 ? Но там сейчас ВМЕСТО void start() используется void OnTick() - это более современно. И то вместо IsTradeAllowed()==false считаю более изящным да и кратким !IsTradeAllowed(). А трал есть, судя по параметру input double TrailingStop =30; в MACD Sample.mq4, который рядом с Moving Average.mq4 в дистрибутиве терминала...
Переписал советника под свой стиль, добавил модификацию стопов и отключение закрытия по сигналу.
//+------------------------------------------------------------------+
//| BB.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
input int MagicNumber =20110315; // Номер копии
input int MAPeriod =20; // Период МА
input ENUM_TIMEFRAMES TimeFrameMA =PERIOD_D1; // Тайм Фрейм МА
input int BBPeriod =20; // Период ВВ
input double BBDev =2.0; // Отклонение ВВ
input double Lot =0.01; // Объем
input int StopLoss =300; // Стоп Лосс (Пипс)
input int TakeProfit =500; // Тейк Профит (Пипс)
input int Slippage =10; // Проскальзование (Пипс)
input bool CloseSignal = false; // закрытие по сигналу ( false - выкл, true - вкл)
input string CommentOrder ="BB"; //Комментарий к ордеру
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(TotalOrder()==0)OrderOpen(GetSignalOpen());
else
{
ModifySL(StopLoss);
ModifyTP(TakeProfit);
if(CloseSignal)OrderClose(GetSignalClose());
}
}
//+------------------------------------------------------------------+
int GetSignalOpen()
{
double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
double ma=iMA(NULL,TimeFrameMA,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,TimeFrameMA,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
if(Ask<bbl && ma>ma1) return(OP_BUY);
if(Bid>bbh && ma<ma1) return(OP_SELL);
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
int GetSignalClose()
{
double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
if(Bid>bbh)return(OP_BUY);
if(Ask<bbl)return(OP_SELL);
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
void OrderOpen(int type)
{
double price_open=0.0;
if(type==WRONG_VALUE)return;
if(!IsTradeAllowed())return;
if(type==OP_BUY)price_open = NormalizeDouble(Ask,_Digits);
if(type==OP_SELL)price_open = NormalizeDouble(Bid,_Digits);
int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OrderClose(int type)
{
double price_close=0.0;
if(type==WRONG_VALUE)return;
if(!IsTradeAllowed())return;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()!=type)continue;
if(type==OP_BUY)price_close=NormalizeDouble(Bid,_Digits);
if(type==OP_SELL)price_close=NormalizeDouble(Ask,_Digits);
bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
int TotalOrder()
{
int value=0;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderType()>1)continue;
value++;
}
return(value);
}
//+------------------------------------------------------------------+
void ModifySL(double sl)
{
if(sl<=0)return;
double price_sl=0.0;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;
if(OrderStopLoss()==0)
{
if(OrderType()==OP_BUY)price_sl=NormalizeDouble(OrderOpenPrice()-sl*_Point,_Digits);
if(OrderType()==OP_SELL)price_sl=NormalizeDouble(OrderOpenPrice()+sl*_Point,_Digits);
if(price_sl<=0)continue;
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),price_sl,OrderTakeProfit(),0);
if(!res)Print("Ошибка модификации стоп лосса ордера № - ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
void ModifyTP(double tp)
{
if(tp<=0)return;
double price_tp=0.0;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;
if(OrderTakeProfit()==0)
{
if(OrderType()==OP_BUY)price_tp=NormalizeDouble(OrderOpenPrice()+tp*_Point,_Digits);
if(OrderType()==OP_SELL)price_tp=NormalizeDouble(OrderOpenPrice()-tp*_Point,_Digits);
if(price_tp<=0)continue;
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),price_tp,0);
if(!res)Print("Ошибка модификации тейк профита ордера № - ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
//| BB.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
input int MagicNumber =20110315; // Номер копии
input int MAPeriod =20; // Период МА
input ENUM_TIMEFRAMES TimeFrameMA =PERIOD_D1; // Тайм Фрейм МА
input int BBPeriod =20; // Период ВВ
input double BBDev =2.0; // Отклонение ВВ
input double Lot =0.01; // Объем
input int StopLoss =300; // Стоп Лосс (Пипс)
input int TakeProfit =500; // Тейк Профит (Пипс)
input int Slippage =10; // Проскальзование (Пипс)
input bool CloseSignal = false; // закрытие по сигналу ( false - выкл, true - вкл)
input string CommentOrder ="BB"; //Комментарий к ордеру
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if(TotalOrder()==0)OrderOpen(GetSignalOpen());
else
{
ModifySL(StopLoss);
ModifyTP(TakeProfit);
if(CloseSignal)OrderClose(GetSignalClose());
}
}
//+------------------------------------------------------------------+
int GetSignalOpen()
{
double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
double ma=iMA(NULL,TimeFrameMA,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,TimeFrameMA,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
if(Ask<bbl && ma>ma1) return(OP_BUY);
if(Bid>bbh && ma<ma1) return(OP_SELL);
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
int GetSignalClose()
{
double bbh=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_UPPER,0);
double bbl=iBands(NULL,0,BBPeriod,BBDev,0,PRICE_CLOSE,MODE_LOWER,0);
if(Bid>bbh)return(OP_BUY);
if(Ask<bbl)return(OP_SELL);
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
void OrderOpen(int type)
{
double price_open=0.0;
if(type==WRONG_VALUE)return;
if(!IsTradeAllowed())return;
if(type==OP_BUY)price_open = NormalizeDouble(Ask,_Digits);
if(type==OP_SELL)price_open = NormalizeDouble(Bid,_Digits);
int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OrderClose(int type)
{
double price_close=0.0;
if(type==WRONG_VALUE)return;
if(!IsTradeAllowed())return;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()!=type)continue;
if(type==OP_BUY)price_close=NormalizeDouble(Bid,_Digits);
if(type==OP_SELL)price_close=NormalizeDouble(Ask,_Digits);
bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
int TotalOrder()
{
int value=0;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=Symbol())continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderType()>1)continue;
value++;
}
return(value);
}
//+------------------------------------------------------------------+
void ModifySL(double sl)
{
if(sl<=0)return;
double price_sl=0.0;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;
if(OrderStopLoss()==0)
{
if(OrderType()==OP_BUY)price_sl=NormalizeDouble(OrderOpenPrice()-sl*_Point,_Digits);
if(OrderType()==OP_SELL)price_sl=NormalizeDouble(OrderOpenPrice()+sl*_Point,_Digits);
if(price_sl<=0)continue;
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),price_sl,OrderTakeProfit(),0);
if(!res)Print("Ошибка модификации стоп лосса ордера № - ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
void ModifyTP(double tp)
{
if(tp<=0)return;
double price_tp=0.0;
int total=OrdersTotal();
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderType()>1)continue;
if(OrderTakeProfit()==0)
{
if(OrderType()==OP_BUY)price_tp=NormalizeDouble(OrderOpenPrice()+tp*_Point,_Digits);
if(OrderType()==OP_SELL)price_tp=NormalizeDouble(OrderOpenPrice()-tp*_Point,_Digits);
if(price_tp<=0)continue;
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),price_tp,0);
if(!res)Print("Ошибка модификации тейк профита ордера № - ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
...
Файлы:
BB.mq4
14 kb
Sergey Gritsay, Спасибо Вам за помощь!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброе время суток!
Вот решился взяться за советник на Индикаторах ББ и МА но вот возникла проблема... В советнике нету TP и SL чтобы можно было самому выставлять, а там в полном автомате сам закрывает как бы этого не хотелось бы... Пожалуйста помогите новичку с данным советником. Если не затруднит возможно какие-то советы дадите для трендовой торговли или Контро-трендовой для данного советника. Я имел введу по сигналам или каких не будь модификаций внедрить в советник.