Группа "Стол заказов MQL"

Рейтинг 2089



РЕКОМЕНДУЮ



Доработка советника

Прошу выполнить доработку советника Ambush для mt4
1. Выполнить возможность установки в параметрах настройки любого фиксированного, в том числе минимального лота 0,01.
2. Выполнить возможность установки в параметрах настройки любого реального а не виртуального TP и SL при срабатывании отложенного ордера.
3. Выполнить в коде автоматическое удаление противоположного отложенника при срабатывании любого из двух ордеров.
Советник прилагается. Заранее благодарю.
//+----------------------------------------------------------------------------+
//| Засада.mq4 |
//| Zuzabush |
//| www.Zuzabush@yandex.ru |
//| |
//| |
//| |
//| |
//| |
//+----------------------------------------------------------------------------+
#property copyright «Zuzabush»
#property link «www.Zuzabush@yandex»
//------- Внешние параметры советника -----------------------------------------+
extern bool AllSymbols = False; // Управлять всеми стоповыми ордерами
extern int Otstup = 10; // Начальная дистанция
extern int TrailingStop = 10; // Фиксированный размер трала отл
extern int TrailingStep = 1; // Шаг трала отл
extern int PK = 15; // Коэф вирт профит
extern int SK = 1; // Коэф вирт стоп
extern bool UseSound = True; // Использовать звуковой сигнал
extern bool ShowComment = True; // Показывать комментарий
extern color clModifyBuy = Aqua; // Цвет значка модификации покупки
extern color clModifySell = Tomato; // Цвет значка модификации продажи
//------- Глобальные переменные советника -------------------------------------+
bool gbNoInit = False; // Флаг неудачной инициализации
string SoundSuccess = «ok.wav»; // Звук успеха
string SoundError = «timeout.wav»; // Звук ошибки
int NumberOfTry = 3; // Количество торговых попыток
double Take;
//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh> // Стандартная библиотека
//+----------------------------------------------------------------------------+
//| |
//| ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init() {
gbNoInit=False;
if (!IsTradeAllowed()) {
Comment(«Для нормальной работы советника необходимо\n»+
«Разрешить советнику торговать»);
gbNoInit=True; return;
}
if (!IsLibrariesAllowed()) {
Comment(«Для нормальной работы советника необходимо\n»+
«Разрешить импорт из внешних экспертов»);
gbNoInit=True; return;
}
if (!IsTesting()) {
if (IsExpertEnabled()) Comment(«Советник будет запущен следующим тиком»);
else Comment(«Отжата кнопка \»Разрешить запуск советников\"");
}
start();
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start() {
bool result;
int error;
int Lots;
int order;
int KO = AccountBalance()/100;
Lots = KO;
if (OrdersTotal()<1||((OrdersTotal()<2)&&(OrderType()==OP_BUYSTOP))) //если, то открываем
order=OrderSend(Symbol(),OP_SELLSTOP,Lots*0.1,Bid-Otstup*Point,3,0,0,"",16384,0,Green);
if ((OrderType()==OP_SELLSTOP)&&(OrdersTotal()<2)) //если, то открываем
order=OrderSend(Symbol(),OP_BUYSTOP,Lots*0.1,Ask+Otstup*Point,3,0,0,"",16384,0,Green);
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
if (((AccountEquity()-AccountBalance())>KO*PK)||(AccountEquity()-AccountBalance())<-KO*SK )
{ if(OrderType()==OP_BUY) result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if(OrderType()==OP_SELL) result= OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),30,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(result!=TRUE) { error=GetLastError();
Print(«LastError = »,error, " ",Symbol()); }
else error=0; }
else Print( «Error when order select », GetLastError());
if (gbNoInit) {
Comment(«Не удалось инициализировать советник!»); return;
}
if (IsTesting()) {
if (ShowComment) {
Comment(IIFs(AllSymbols, «AllSymbols », "")
,«TrailingStop=», DoubleToStr(TrailingStop, 0), «п. „
,“TrailingStep=», DoubleToStr(TrailingStep, 0), «п. „
,IIFs(UseSound, “UseSound », "")
);
} else Comment("");
}
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (AllSymbols || OrderSymbol()==Symbol()) {
TrailingOrders();
}
}
}
}
//+----------------------------------------------------------------------------+
//| Версия: 01.09.2005 |
//| Описание: Возвращает наименование торговой операции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| op — идентификатор торговой операции |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY: return(«Buy»);
case OP_SELL: return(«Sell»);
case OP_BUYLIMIT: return(«BuyLimit»);
case OP_SELLLIMIT: return(«SellLimit»);
case OP_BUYSTOP: return(«BuyStop»);
case OP_SELLSTOP: return(«SellStop»);
default: return(«Unknown Operation»);
}
}
//+----------------------------------------------------------------------------+
//| Версия: 18.07.2008 |
//| Описание: Возвращает одно из двух значений взависимости от условия. |
//+----------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Версия: 01.02.2008 |
//| Описание: Возвращает одно из двух значений взависимости от условия. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Версия: 28.11.2006 |
//| Описание: Модификация одного предварительно выбранного ордера. |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
double op, pa, pb, os, ot;
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
if (pp<=0) pp=OrderOpenPrice();
if (sl<0 ) sl=OrderStopLoss();
if (tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice(), dg);
os=NormalizeDouble(OrderStopLoss(), dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if (pp!=op || sl!=os || tp!=ot) {
for (it=1; it<=NumberOfTry; it++) {
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
if (fm) {
if (UseSound) PlaySound(SoundSuccess); break;
} else {
er=GetLastError();
if (UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print(«Error(»,er,") modifying order: ",ErrorDescription(er),", try ",it);
Print(«Ask=»,pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Sleep(1000*10);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Сопровождение ордеров простым тралом |
//+----------------------------------------------------------------------------+
void TrailingOrders() {
double di, pa, pb, pp, sl, tp;
pp=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUYSTOP) {
pa=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pa!=(TrailingStop+TrailingStep-1)*pp) {
di=OrderOpenPrice()-pa-TrailingStop*pp;
ModifyOrder(pa+TrailingStop*pp, sl, tp);
}
}
if (OrderType()==OP_SELLSTOP) {
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (pb-OrderOpenPrice()!=(TrailingStop+TrailingStep-1)*pp) {
di=pb-OrderOpenPrice()-TrailingStop*pp;
ModifyOrder(pb-TrailingStop*pp, sl, tp);
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
  • 0
  • Просмотров: 1779
  • 6 июня 2015, 22:54
  • Yuriy123
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
модернизация советника
Следующая запись в группе  
Очередной стрелочник.
06 июня 2015
07 июня 2015

Комментарии (0)


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари