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

MQL4 Asesores Expertos

Trabajo finalizado

Plazo de ejecución 1 día

Tarea técnica

Прошу выполнить доработку советника 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);
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

Archivos adjuntos:

MQ4
Ambush.mq4
10.4 Kb
EX4
Ambush.ex4
15.9 Kb

Han respondido

1
Desarrollador 1
Evaluación
(2)
Proyectos
3
33%
Arbitraje
1
0% / 100%
Caducado
0
Libre
Ha publicado: 1 ejemplo
2
Desarrollador 2
Evaluación
(23)
Proyectos
31
71%
Arbitraje
0
Caducado
1
3%
Libre
Ha publicado: 188 ejemplos
3
Desarrollador 3
Evaluación
(69)
Proyectos
146
34%
Arbitraje
13
8% / 62%
Caducado
26
18%
Libre
Ha publicado: 6 ejemplos
4
Desarrollador 4
Evaluación
Proyectos
3
33%
Arbitraje
3
0% / 100%
Caducado
1
33%
Libre
5
Desarrollador 5
Evaluación
(241)
Proyectos
387
51%
Arbitraje
14
14% / 14%
Caducado
43
11%
Libre
Ha publicado: 1 artículo, 1 ejemplo
6
Desarrollador 6
Evaluación
(76)
Proyectos
136
45%
Arbitraje
11
27% / 64%
Caducado
26
19%
Libre
Ha publicado: 5 ejemplos
7
Desarrollador 7
Evaluación
(173)
Proyectos
231
61%
Arbitraje
3
33% / 33%
Caducado
6
3%
Libre
Ha publicado: 1 ejemplo
8
Desarrollador 8
Evaluación
Proyectos
0
0%
Arbitraje
0
Caducado
0
Libre
Solicitudes similares
Нужно разработать торгового советника для MetaTrader 5. Логика стратегии: работа на M1 (таймфрейм изменяемый) уровни Fibonacci задаются вручную (0 и 100) вход осуществляется в зоне 0–38.2 Fibonacci используется RSI BUY — RSI ≤ 30 SELL — RSI ≥ 70 дополнительный сигнал — пересечение RSI и его скользящей средней Функции управления позицией: Stop Loss за сигнальной свечой Break Even два типа Trailing Stop (обычный и
Основная идея советника заключается в использовании коррелирующих валютных пар для выравнивания отрицательного баланса. Изначально запускаются 4 пары, разделенные на 2 блока. В каждом блоке 2 пары, каждая из которых открыты разнонаправленно buy\sell с установленными заранее уровнями TP. Например: в одном блоке 2 пары EUR\USD buy и sell, во втором блоке 2 пары USD\CHF buy и sell. TP устанавливается в каждом блоке
Я ищу бизнес-партнёра с опытом в трейдинге и программировании, который сможет реализовать распознавание паттернов и на его основе создать прибыльного торгового робота (EA). Это профессиональная модель: автор заработал на ней миллионы, имеет подтверждённую историю результатов и хорошо известен в торговле фьючерсами
1. Общая концепция Советник предназначен для автоматического обнаружения ценовых волн, их визуализации с помощью инструмента «Сетка Фибоначчи» и циклической торговли на откатах. Основная особенность — мультиволновой режим: советник должен одновременно отслеживать и отрисовывать все движения, подходящие под фильтр размера. 2. Логика поиска и визуализации волн Динамическое натяжение: Советник сканирует рынок на глубину
Требуется создать советник на основе разворотных паттернов, используя дополнительные индикаторы такие как скользящее среднее, отклонение от скользящей средней, угол наклона скользящей средней. Возможно будет добавлено что то еще по ходу работы
к примеру 10 стратегий выстреливают одновременно в одну и ту же милисекунду при открытие бара надо их сделать последовательными один за другим, с проверкой, что предыдущий ордер был открыт и модифицирован SL TP оредра могут быть отложенные и маркет пока один ордер исполняется другие ждут в очереди так как используется ММ настоящий баланс double Total_Current_Risk() { double res = 0; for (int i = 0; i <

Información sobre el proyecto

Presupuesto
10 - 20 USD
Plazo límite de ejecución
de 2 a 4 día(s)