Получить 100$ на счет бесплатно!!

Получить депозит форекс за общение на форуме Бездепозитный бонус 100$

Бесплатное написание советников и индикаторов

  
Сообщений: 3
Здравствуйте, нужен скрипт - Функцию задержки по времени (в настройках сделать в минутах) когда закрылся ордер и функцию maxorders реализовать (количество ордеров в одной паре) что бы не отрывал больше 1 ордера в одной паре пока не закрыл предыдущий ордер в настройках можно поставить ну и дополнительно функцию magic сделать(что бы различал свои ордера). -т.е нужно сделать 3 функции в скрипте, можете сделать? заранее благодарна...
Сообщений: 1
здравствуйте нужен советник который открывал и закрывал ордера при смене цвета данного индикатора
Прикрепленные файлы:
FisherLexLmod_8e396.mq4 | 5.92 Кб | Скачали: 392
Сообщений: 3
Здравствуйте коллеги.
Кто может создать советник по следующей стратегии:
Индюки: ( почему-то не могу загрузить)
©Price Border
Ma_Parabolic_st2.2

1. При установке советника на график он будет открывать новую сделку только на следующей свече.
2. Советник открывает сделки на каждой следующей свече (можно по мартину с шагом задаваемым в настройках по следующей стратегии:

1.Ордера открываются при условии что цена находится внутри канала. (таймфрейм устанавливаем в настройках советника)
Ордера СЕЛЛ - открываются только в том случае, когда сары находятся выше машки, и предидущая свеча медвежья. Если свеча бычья, то ордер не открываем, цикл пропускаем…
2.Ордера БАЙ – открываются только в том случае, если сары находятся под машкой и предидущая свеча бычья, если свеча медвежья – то ордер не открываем, цикл пропускаем.
3.Как только цена достигла уровня БУ (спред +3…10…20пп) включается тралл, который следует на определённом расстоянии за ценой (размер трала устанавливаем…)
4.С открытием каждого нового ордера советник пересчитывает точку безубытка, и тянет тралл за ценой на заданном расстоянии.
5.Группа ордеров закрывается либо по тралу, либо по сигналу, когда машка и сары покажут смену тренда.

В случае резких движений цены по тренду:
1. При касании цены границы канала – закрывается один самый прибыльный ордер.
2. При закрытии свечи ниже границы канала, закрывается еще один( или два) самый прибыльный ордер, и открывается ЛОК, равный 50% от обьёмов оставшихся сделок.
3. В случае если цена продолжит движение, следующий лок открывается только в случае перехая (или перелоя), и полностью своим обьёмом перекрывает все сделки, а на первый локирующий ордер ставится ТП (спред +1…3пп… или тралл начиная безубытка….)
4. Если цена пошла дальше – то новые сделки не открываются. Если цена вернулась в канал – она сначала закрывает первый лок.
5. Далее – если цена снова пошла в сторону оставшегося лока и закрылась ниже него, то снова закрывается самая прибыльная сделка, и ставится еще лок перекрывающий все позиции, а на предидущий лок – безубыток, и так сопровождаем сделки до разворота цены…
6. А если цена закрыла первый лок и пошла дальше, закроются все сделки по траллу, а на оставшийся лок ставится тралл.
Советник отдельно ведёт ордера группы СЕЛЛ и БАЙ. Тоесть, Например открыто 10 сделок в селл и идёт их трал, в случае резкого движения цены и установке первого лока БАЙ – трейлингстоп по селлам не пересчитывает ся
Неплохо было бы если бы советник подхватывал ручные ордера, сам их классифицировал (селл или бай) и пересчитывал точку безубытка и трал по всей открытой группе..

Как то так...
Редактировалось: 2 раз (Последний: 2 июля 2017 в 17:49)
Сообщений: 3
похоже никто не возьмётся написать советника... :scratch: прийдётся работать без грааля... :laugh:
Сообщений: 1
Всем добрый день. Ищу программиста на бесплатной основе для создания ВЫСОКОТОЧНОГО РЕВЕРСА, без перерисовки.
ФОРМУЛА и ТЕХНОЛОГИЯ ОПТИМИЗАЦИИ ФОРМУЛЫ у меня есть в виде чётко проработанного Тех. Задания. Кому интересно - черканите свой Скайп мне в Личку.
Скрин с примером результата реализации ниже:
Редактировалось: 1 раз (Последний: 18 июля 2017 в 10:29)
Сообщений: 3
Добрый вечер
Можете помочь добавить функцию усреднения в советник .
Сообщений: 3
// Объём сделки
input double _Lots = 0.1;

// Stop Loss (в пунктах)
input int _SL = 1000;

// Take Profit (в пунктах)
input int _TP = 5;

// Magic Number (метка "своих" сделок для робота)
input int _MagicNumber = 0;

// Комментарий для сделок
input string _Comment = "SLIP";

// Допустимое проскальзывание
input int _Slippage = 5;

// Одновременно не более одной сделки
input bool _OnlyOneOpenedPos = true;

// Автоучёт числа знаков цены
input bool _AutoDigits = true;

// ---
// Moving_Average1MED
input int period = 200;
input int shift = 0;
input int method = 2;
input int apply = 4;
// ---
// Moving_AverageBIS
input int period_2 = 50;
input int shift_2 = 0;
input int method_2 = 2;
input int apply_2 = 4;
// ---
// Stochastic_Oscillator1
input int kperiod = 21;
input int dperiod = 8;
input int slowing = 3;
input int method_3 = 0;
input int apply_3 = 0;
// ---
// Stochastic_Oscillator0
input int kperiod_2 = 21;
input int dperiod_2 = 8;
input int slowing_2 = 3;
input int method_4 = 0;
input int apply_4 = 0;

// ---

double OP_LOTS = 0.0;
// ---
// MQL4 | класс автоопределния числа знаков после запятой у текущего инструмента |
class CKDig
{
public:
CKDig(const bool useAutoDigits)
{
Set(useAutoDigits);
}

~CKDig(void)
{
}

uint Get(void)
{
return m_value;
}

private:
uint m_value;

void Set(const bool useAutoDigits)
{
m_value = 1;
if (!useAutoDigits)
{
return;
}

if (Digits() == 3 || Digits() == 5)
{
m_value = 10;
}
}
};

CKDig *KDig;
#define K_DIG (KDig.Get())

datetime LAST_BUY_BARTIME = 0;
datetime LAST_SELL_BARTIME = 0;

// ---
void OnInit()
{
// ---
get_lots_by_input();
// ---
KDig = new CKDig(_AutoDigits);
}

// ---
void OnDeinit(const int reason)
{
// ---
// ---
if(CheckPointer(KDig))
{
delete KDig;
}
}

// ---
void OnTick()
{
// ---
// закрытие сделки
if(find_orders(_MagicNumber))
{
if(cl_buy_sig())
{
cbm(_MagicNumber, _Slippage, OP_BUY);
}
if(cl_sell_sig())
{
cbm(_MagicNumber, _Slippage, OP_SELL);
}
}

// открытие сделки
// ---

// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_BUY)))
{
if(op_buy_sig() && LAST_BUY_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_BUY_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_BUY, OP_LOTS);
}
}
// ---
if(!find_orders(_MagicNumber, (_OnlyOneOpenedPos ? -1 : OP_SELL)))
{
if(op_sell_sig() && LAST_SELL_BARTIME != iTime(Symbol(), Period(), 0))
{
LAST_SELL_BARTIME = iTime(Symbol(), Period(), 0);
open_positions(OP_SELL, OP_LOTS);
}
}
}

// ---

// ---
// ---
void get_lots_by_input()
{
//MQL4 | присвоение объёма по входному параметру |
OP_LOTS = _Lots;
}

// ---
// ---
bool find_orders(int magic = -1, int type = -1, int time = -1, string symb = "NULL", double price = -1, double lot = -1)
{
// MQL4 | функция поиска открытых ордеров |
// возвращает истину, если найден хотя бы один ордер с подходящими параметрами
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
break;
if (((OrderType() == type) || (type == -1))
&& ((OrderMagicNumber() == magic) || (magic == -1))
&& ((OrderSymbol() == symb) || (symb == "NULL" && OrderSymbol() == Symbol()))
&& ((OrderOpenTime() >= time) || (time == -1))
&& ((OrderLots() == lot) || (lot == -1))
&& ((NormalizeDouble(OrderOpenPrice(), Digits) == NormalizeDouble(price, Digits)) || (price == -1)))
{
return (true);
break;
}
}
return (false);
}

// ---
string Market_Err_To_Str(int errCode)
{
// MQL4 | функция расшифровки кодов ошибок |
// функция охватывает только коды ошибок торговых операций
string errText;
switch (errCode)
{
case 0:
errText = "Нет ошибок";
break;
case 1:
errText = "Нет ошибки, но результат неизвестен";
break;
case 2:
errText = "Общая ошибка";
break;
case 3:
errText = "Неправильные параметры";
break;
case 4:
errText = "Торговый сервер занят";
break;
case 5:
errText = "Старая версия клиентского терминала";
break;
case 6:
errText = "Нет связи с торговым сервером";
break;
case 7:
errText = "Недостаточно прав";
break;
case 8:
errText = "Слишком частые запросы";
break;
case 9:
errText = "Недопустимая операция нарушающая функционирование сервера";
break;
case 64:
errText = "Счет заблокирован";
break;
case 65:
errText = "Неправильный номер счета";
break;
case 128:
errText = "Истек срок ожидания совершения сделки";
break;
case 129:
errText = "Неправильная цена";
break;
case 130:
errText = "Неправильные стопы";
break;
case 131:
errText = "Неправильный объем";
break;
case 132:
errText = "Рынок закрыт";
break;
case 133:
errText = "Торговля запрещена";
break;
case 134:
errText = "Недостаточно денег для совершения операции";
break;
case 135:
errText = "Цена изменилась";
break;
case 136:
errText = "Нет цен";
break;
case 137:
errText = "Брокер занят";
break;
case 138:
errText = "Новые цены";
break;
case 139:
errText = "Ордер заблокирован и уже обрабатывается";
break;
case 140:
errText = "Разрешена только покупка";
break;
case 141:
errText = "Слишком много запросов";
break;
case 145:
errText = "Модификация запрещена, так как ордер слишком близок к рынку";
break;
case 146:
errText = "Подсистема торговли занята";
break;
case 147:
errText = "Использование даты истечения ордера запрещено брокером";
break;
case 148:
errText = "Количество открытых и отложенных ордеров достигло предела, установленного брокером.";
break;
case 4000:
errText = "Нет ошибки";
break;
case 4001:
errText = "Неправильный указатель функции";
break;
case 4002:
errText = "Индекс массива - вне диапазона";
break;
case 4003:
errText = "Нет памяти для стека функций";
break;
case 4004:
errText = "Переполнение стека после рекурсивного вызова";
break;
case 4005:
errText = "На стеке нет памяти для передачи параметров";
break;
case 4006:
errText = "Нет памяти для строкового параметра";
break;
case 4007:
errText = "Нет памяти для временной строки";
break;
case 4008:
errText = "Неинициализированная строка";
break;
case 4009:
errText = "Неинициализированная строка в массиве";
break;
case 4010:
errText = "Нет памяти для строкового массива";
break;
case 4011:
errText = "Слишком длинная строка";
break;
case 4012:
errText = "Остаток от деления на ноль";
break;
case 4013:
errText = "Деление на ноль";
break;
case 4014:
errText = "Неизвестная команда";
break;
case 4015:
errText = "Неправильный переход";
break;
case 4016:
errText = "Неинициализированный массив";
break;
case 4017:
errText = "Вызовы DLL не разрешены";
break;
case 4018:
errText = "Невозможно загрузить библиотеку";
break;
case 4019:
errText = "Невозможно вызвать функцию";
break;
case 4020:
errText = "Вызовы внешних библиотечных функций не разрешены";
break;
case 4021:
errText = "Недостаточно памяти для строки, возвращаемой из функции";
break;
case 4022:
errText = "Система занята";
break;
case 4050:
errText = "Неправильное количество параметров функции";
break;
case 4051:
errText = "Недопустимое значение параметра функции";
break;
case 4052:
errText = "Внутренняя ошибка строковой функции";
break;
case 4053:
errText = "Ошибка массива";
break;
case 4054:
errText = "Неправильное использование массива-таймсерии";
break;
case 4055:
errText = "Ошибка пользовательского индикатора";
break;
case 4056:
errText = "Массивы несовместимы";
break;
case 4057:
errText = "Ошибка обработки глобальныех переменных";
break;
case 4058:
errText = "Глобальная переменная не обнаружена";
break;
case 4059:
errText = "Функция не разрешена в тестовом режиме";
break;
case 4060:
errText = "Функция не разрешена";
break;
case 4061:
errText = "Ошибка отправки почты";
break;
case 4062:
errText = "Ожидается параметр типа string";
break;
case 4063:
errText = "Ожидается параметр типа integer";
break;
case 4064:
errText = "Ожидается параметр типа double";
break;
case 4065:
errText = "В качестве параметра ожидается массив";
break;
case 4066:
errText = "Запрошенные исторические данные в состоянии обновления";
break;
case 4067:
errText = "Ошибка при выполнении торговой операции";
break;
case 4099:
errText = "Конец файла";
break;
case 4100:
errText = "Ошибка при работе с файлом";
break;
case 4101:
errText = "Неправильное имя файла";
break;
case 4102:
errText = "Слишком много открытых файлов";
break;
case 4103:
errText = "Невозможно открыть файл";
break;
case 4104:
errText = "Несовместимый режим доступа к файлу";
break;
case 4105:
errText = "Ни один ордер не выбран";
break;
case 4106:
errText = "Неизвестный символ";
break;
case 4107:
errText = "Неправильный параметр цены для торговой функции";
break;
case 4108:
errText = "Неверный номер тикета";
break;
case 4109:
errText = "Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.";
break;
case 4110:
errText = "Длинные позиции не разрешены. Необходимо проверить свойства эксперта.";
break;
case 4111:
errText = "Короткие позиции не разрешены. Необходимо проверить свойства эксперта.";
break;
case 4200:
errText = "Объект уже существует";
break;
case 4201:
errText = "Запрошено неизвестное свойство объекта";
break;
case 4202:
errText = "Объект не существует";
break;
case 4203:
errText = "Неизвестный тип объекта";
break;
case 4204:
errText = "Нет имени объекта";
break;
case 4205:
errText = "Ошибка координат объекта";
break;
case 4206:
errText = "Не найдено указанное подокно";
break;
default:
errText = "Ошибка при работе с объектом";
}
// ---
return (errText);
}

// ---
void open_positions(int signal, double lot, double price = 0.0, string symb = "NONE", int mode = 0)
{
// MQL4 | функция открытия ордеров |
RefreshRates();
// ---
int symbDigits = 0;
string _symb = symb;
// ---
if (_symb == "NONE")
{
symbDigits = Digits;
_symb = Symbol();
}
else
symbDigits = int(MarketInfo(_symb, MODE_DIGITS));
// ---
if (signal == OP_BUY)
price = NormalizeDouble(MarketInfo(_symb, MODE_ASK), symbDigits); // цена открытия для покупок
if (signal == OP_SELL)
price = NormalizeDouble(MarketInfo(_symb, MODE_BID), symbDigits); // цена открытия для продаж
// ---
int err = 0;
for (int i = 0; i <= 5; i++)
{
RefreshRates();
// ---
int ticket = OrderSend(_symb, // символ
signal, // тип ордера
lot, // объем
NormalizeDouble(price, symbDigits), // цена открытия
_Slippage * KDig.Get(), // уровень допустимого реквота
0, // Stop Loss
0, // Take Profit
_Comment, // комментарий ордера
_MagicNumber, // магическое число
0, // срок истечения (используется в отложенных ордерах)
CLR_NONE); // цвет отображаемой стрелки на графике (CLR_NONE - стрелка не рисуется)
// ---
if (ticket != -1)
{
err = 0;
// ---
if (!IsTesting())
Sleep(1000);
// ---
RefreshRates();
// ---
if(_SL != 0 || _TP != 0)
{
for (int tryModify = 0; tryModify <= 5; tryModify++)
{
RefreshRates();
// ---
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
double sl = NormalizeDouble(get_sl(_SL * KDig.Get(), signal, price, _symb), symbDigits);
double tp = NormalizeDouble(get_tp(_TP * KDig.Get(), signal, price, _symb), symbDigits);
// ---
if (sl != 0 || tp != 0)
if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, OrderExpiration()))
break;
// ---
err = GetLastError(); // получаем код ошибки модификации
}
// ---
if (!IsTesting())
Sleep(tryModify*1000);
}
// ---
if (err != 0)
Alert("Ошибка выставления SL/TP: " + Market_Err_To_Str(err));
}
// ---
break;
}
else
{
err = GetLastError(); // получаем код ошибки открытия
// ---
if (err == 0)
break;
// ---
i++;
// ---
if (!IsTesting())
Sleep(i*500); // в случае ошибки делаем паузу перед новой попыткой
}
}
// ---
if (err != 0)
{
if(signal == OP_BUY)
LAST_BUY_BARTIME = 0;
if(signal == OP_SELL)
LAST_SELL_BARTIME = 0;
Alert("Ошибка открытия: " + Market_Err_To_Str(err)); // если есть ошибка - выводим сообщение
}
}

// ---
double get_tp(int tp_value, int type, double price = 0.0, string symb = "NONE")
{
// MQL4 | функция расчета величины Take Profit для ордеров |
double _price = price;
string _symb = symb;
// ---
if (_symb == "NONE")
_symb = Symbol();
int symbDigits = int(MarketInfo(_symb, MODE_DIGITS));
// ---
if (_price == 0)
{
if (type == OP_BUY)
_price = NormalizeDouble(MarketInfo(_symb, MODE_ASK), symbDigits);
// ---
if (type == OP_SELL)
_price = NormalizeDouble(MarketInfo(_symb, MODE_BID), symbDigits);
}
// ---
if (tp_value > 0)
{
if (type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP)
return NormalizeDouble(_price + tp_value * MarketInfo(_symb, MODE_POINT), symbDigits);
// ---
if (type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP)
return NormalizeDouble(_price - tp_value * MarketInfo(_symb, MODE_POINT), symbDigits);
}
// ---
return 0.0;
}

// ---
double get_sl(int sl_value, int type, double price = 0.0, string _symb = "NONE")
{
// MQL4 | функция расчета величины Stop Loss для ордеров по фиксированному значению SL |
if (_symb == "NONE")
_symb = Symbol();
int symbDigits = int(MarketInfo(_symb, MODE_DIGITS));
double symbPoint = MarketInfo(_symb, MODE_POINT);
// ---
if (price == 0.0)
{
if (type == OP_BUY)
price = NormalizeDouble(MarketInfo(_symb, MODE_ASK), symbDigits);
if (type == OP_SELL)
price = NormalizeDouble(MarketInfo(_symb, MODE_BID), symbDigits);
}
// ---
if (sl_value > 0)
{
if (type == OP_BUY || type == OP_BUYLIMIT || type == OP_BUYSTOP)
return NormalizeDouble(price - sl_value * symbPoint, symbDigits);
if (type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP)
return NormalizeDouble(price + sl_value * symbPoint, symbDigits);
}
// ---
return 0.0;
}

// ---
bool close_by_ticket(const int ticket, const int slippage)
{
/*
MQL4 | функция закрытия сделки по её номеру (тикету) |
При закрытии рыночного ордера учитывается уровень максимально допустимого проскальзывания (slipage)
*/
if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) // выбираем ордер по тикету
{
return false;
}

int err = 0;

for (int i = 0; i < 5; i++)
{
ResetLastError();

RefreshRates();

double price = 0.0;

if (OrderType() == OP_BUY)
{
price = NormalizeDouble(SymbolInfoDouble(OrderSymbol(), SYMBOL_BID), (int)SymbolInfoInteger(OrderSymbol(), SYMBOL_DIGITS));
}
if (OrderType() == OP_SELL)
{
price = NormalizeDouble(SymbolInfoDouble(OrderSymbol(), SYMBOL_ASK), (int)SymbolInfoInteger(OrderSymbol(), SYMBOL_DIGITS));
}

// если рыночный ордер - закрываем его, если отложенный - удаляем
bool result = false;

if (OrderType() <= OP_SELL)
{
result = OrderClose(OrderTicket(), OrderLots(), price, slippage * KDig.Get(), clrNONE);
}
else
{
result = OrderDelete(OrderTicket());
}

if (result) // если закрытие или удаление прошло успешно - возвращаем true и выходим из цикла
{
return (true);
}

err = GetLastError();

if (err != 0)
{
Print("Error of close_by_ticket() #" + (string)err + ": " + Market_Err_To_Str(err)); // если есть ошибка - даём расшифровку её кода в журнал
}

Sleep(300 * i);
}
return (false);
}

// ---
bool cbm(int magic, int slippage, int type)
{
/*
close by magic (закрытие всех ордеров данного типа с данным MagicNumber)
Учитывается максимально допустимое проскальзывание (slipage)
Используется функция close_by_ticket.
*/
int n = 0;
RefreshRates();
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
break;
if ((OrderType() == type) && (OrderMagicNumber() == magic) && (Symbol() == OrderSymbol()))
{
close_by_ticket(OrderTicket(), slippage); // закрываем сделку
n++; // наращиваем счётчик закрытых сделок (на самом деле - попыток закрытия)
}
}
if (n > 0) // если попыток закрытия было больше 0, то функция возвращает true
return (true);
return (false);
}

double e_Moving_Average1MED()
{
return iMA(NULL, 0, period, shift, method, apply, 1);
}
double e_Moving_AverageBIS()
{
return iMA(NULL, 0, period_2, shift_2, method_2, apply_2, 1);
}
double e_Stochastic_Oscillator1()
{
return iStochastic(NULL, 0, kperiod, dperiod, slowing, method_3, apply_3, 0, 1);
}
double e_Stochastic_Oscillator0()
{
return iStochastic(NULL, 0, kperiod_2, dperiod_2, slowing_2, method_4, apply_4, 0, 0);
}
// ---
bool op_buy_sig()
{
if((e_Moving_AverageBIS() > e_Moving_Average1MED()) && ((e_Stochastic_Oscillator1() < 7) && (e_Stochastic_Oscillator0() > 7)))
return true;
// ---
return false;
}
// ---
bool op_sell_sig()
{
if((e_Moving_AverageBIS() < e_Moving_Average1MED()) && ((e_Stochastic_Oscillator1() > 93) && (e_Stochastic_Oscillator0() < 93)))
return true;
// ---
return false;
}
// ---
bool cl_buy_sig()
{if((e_Moving_AverageBIS() < e_Moving_Average1MED()) && ((e_Stochastic_Oscillator1() > 93) && (e_Stochastic_Oscillator0() < 93)))
return true;
return false;
}
// ---
bool cl_sell_sig()
{if((e_Moving_AverageBIS() > e_Moving_Average1MED()) && ((e_Stochastic_Oscillator1() < 7) && (e_Stochastic_Oscillator0() > 7)))
return true;
return false;
}
Сообщений: 3
Добры днь

Ели кто может помогите написать советник

Как должен работать.
1)открытие сделки

- МА50 > МА200 открываем только в BUY, МА50 < МА200 открываем только SELL

Стохастик (М5)
BUY - основная линия индикатора ( бар) закрылся выше 93. Следующий текущий бар стал ниже 93.+ МА
SELL- основная линия индикатора ( бар) закрылся ниже 7. Следующий текущий бар стал выше 7 +МА



2) Если цена пошла не в нашу сторону то ставится отложенный ордер на определенном расстояние от ставки (с увеличенным лотом) по направлению нашей первой сделки и т.д пока серия сделок не закроется по ТР.
3)также необходимые настройки для оптимизации советника:
- лот
-настройки индикатора стохастик
-Настройки МА
-ТР по усреднению (То есть если первая сделка открыта с ТР 30 пунктов то на 2 колене ТР от этих сделок должен составлять 60 пунктов и т.д)
-Возможность выставление времени работы советника
-Коэффициент умножения для усреднения
-Проскальзование
- Коментарии

- И по возможности ограничение по спреду
- И также если возможно чтобы на истории показывалось где была открыта и закрыта сделка (как в тестере стратегии)
Сообщений: 1
Необходим советник-скальпер на отложенных ордерах

Здравствуйте. Прошу ВАС бесплатно сделать следующий советник, очень нужно!
Техническое задание:
1. Определяем тренд по ЕМА 14 (Close)
2. В зависимости от тренда выбираем приоритет сделок
3. Временной интервал М5 или М15, платформа МТ4
4. Как только свеча отбивается от мувинга, в конце хвоста предыдущей завершенной свечи на расстоянии 2 пунктов ставим отложенный ордер на покупку или на продажу.
5. Как только цена цепляет ордер, стоплосс ставим на другом конце формирующейся свечи на расстоянии 2 пункта и тралим по безубытку.

Подробнее об этой стратегии описано в методике от трейдера Марата Газизова, ссылка: www.youtube.com/watch?v=Dhms9szwvEI&t=1506s (смотреть от 16:04 минуты).
Сообщений: 1
Здравствуйте участники форума. Прошу помощи. Я новичек, никак не могу реализовать функцию в советнике. Помогите пожалуйста кодом. Что нужно прописать? Логика такая в советнике. Открывается по сигналу сделка в определенное время( время выставляется вручную) Если сделак пошла не в нужную сторону, то срабатывает вторая сделка удвоенным лотом и так пока не выйдет в плюс( это как неваляшка) Нужен код закрытия ордеров при выходе в плюс и больше не торговать в этот день. А то у меня вышел в плюс допустим в 6 часов вечера по тейку и снова открыл сделку. А нужно , чтобы не открывал, а откроется на след. день в моё время. Спасибо заранее.
Сообщений: 2
Здравствуйте, уважаемые программисты.
Прошу написать советник на фракталах.
Прилагаются подробные картинки по стратегии.
Расположение фракталов строго как на картинке.
TP рассчитывается по схеме на картинке.
SL выставляется под фракталом для BUY и над фракталом для SELL.
Проскальзывание и спред учесть в коде советника.
Во входных переменных советника: Lot
Прикрепленные файлы:
BUY_jvlb2.jpg | 50.06 Кб | Скачали: 146
SELL_jvlb2.jpg | 27.59 Кб | Скачали: 126
Сообщений: 2
Здравствуйте, уважаемые программисты.
Можно добавить АЛЕРТ в советник. Алерт должен выдавать информацию после закрытия ордера: "ПРОФИТ = 20$, GBPUSD", т.е. профит и символ торгуемой пары.
Советник прилагается.
//+------------------------------------------------------------------+
//| High_Low.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
input double lot= 0.22;
extern int TP = 1000; // ПРОФИТ
input int _period_ma = 55; // Период МА
extern bool _trailingStop = true; // вкл. трала
input int magic = 123;

// -----------------------------------------------Number of bars to scan

//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()==type || type==-1)
count++;
}
}
}
return(count);
}

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (_trailingStop)
{ _TrailingStop();
}
int r=0;
CountOrders();
if(NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits) < Ask && CountOrders(OP_BUY) < 1 &&
NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)< NormalizeDouble(iClose(_Symbol, _Period, 1), Digits) &&
NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)> NormalizeDouble(iLow(_Symbol, _Period, 1), Digits)) {
r = OrderSend(Symbol(),
OP_BUY,
NormalizeDouble(lot, 2),
Ask,
30,
NormalizeDouble(Ask + 500*Point, Digits), //SL
NormalizeDouble(iHigh(_Symbol, _Period, 1) + TP*Point, Digits), //TP
"МАША",
magic,
0,
Blue); // BUY
}
else if(NormalizeDouble(iLow(_Symbol, _Period, 1), Digits) > Bid && CountOrders(OP_SELL) < 1 &&
NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)> NormalizeDouble(iClose(_Symbol, _Period, 1), Digits) &&
NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)< NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits)) {
r = OrderSend(Symbol(),
OP_SELL,
NormalizeDouble(lot, 2),
Bid,
30,
NormalizeDouble(Bid - 500*Point, Digits),, //SL
NormalizeDouble(iLow(_Symbol, _Period, 1) - TP*Point, Digits), //TP
"МАША",
magic,
0,
Red); // SELL


}
}

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

void _TrailingStop(){
int i;
bool m;
double _stopLossSellF=NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits),
_stopLossBuyF=NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits);
if (OrdersTotal()>0){
for (i=OrdersTotal()-1; i>=0; i--){
if (OrderSelect(i, SELECT_BY_POS)){
if (OrderSymbol()==Symbol() /*&& OrderMagicNumber()==-1*/){

if (OrderType()==OP_BUY && OrderOpenPrice() < _stopLossBuyF){
while (IsTradeContextBusy()) Sleep(1000);
RefreshRates();
m = OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossBuyF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
}

if (OrderType()==OP_SELL && OrderOpenPrice() > _stopLossSellF && _stopLossSellF!=0.0){
while (IsTradeContextBusy()) Sleep(1000);
RefreshRates();
m = OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossSellF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
}
}
}
}
}
return;
}
//+------------------------------------------------------------------+

Файл не загружается, пришлось так.
Редактировалось: 1 раз (Последний: 24 марта 2021 в 19:23)
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.

← Назад