Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 3811
- Рейтинг:
- Опубликован:
- 2012.08.12 07:52
- Обновлен:
- 2014.04.21 14:55
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Начнём с определений. Что такое сетевая стратегия? Большое количество одновременно открытых на инструменте отложенных ордеров - это сеть (скорее всего). Сеть в явном виде. НО сеть может строиться и не в явном виде. Что же тогда понимать под сетью? Сеть - это совокупность ордеров, связанных м\у собой единой логикой формирования размера лота следующего ордера в сети относительно предыдущего, а также логикой открытия последующего ордера относительно уровня открытия предыдущего (задаётся МИНимальная дистанция м\у ордерами). Совокупность этих условий позволяют говорить о серии ордеров, где мы жёстко (в настройках) задаём максимальное количество ордеров в серии (Max_trades). Отдельно определяем условия начала формирования серии и её окончания: серия заканчивается после открытия Max_trades-ордера в не зависимости от результатов (профита) ВСЕХ ордеров серии. Серия может заканчиваться при достижении МАКСимального заданного убытка (Lossa\просадки) - ограничиваем слив. Также серию можно заканчивать, если следить за общим профитом серии и его, например, тралить - в этом случае начало следующей серии ордеров будет сопровождаться фактом увеличения размера депозита по сравнению с размером депо на момент начала предыдущей серии. Т.е. серия закроется в Плюсе.
Важно понимать: в конечном итоге результат определяется СОВОКУПНОСТЬЮ профитов ВСЕХ ордеров серии. И наша задача - "Вывести КАЖДУЮ серию в ПЛЮС!" (теоретически) - это ОСНОВНАЯ МОТИВАЦИЯ построения сети. ;)
Задача данной библиотеки "плести" свою сеть, что она может делать несколькими способами (Strategy):
- 0 - Доливаемся в любую сторону от последнего ордера;
- 1 - Доливаемся только при убытке (Мартингейл);
- 2 - Доливаемся только при прибыли (Пирамидинг)
- * 3 - Доливаемся "противоположным" ордером только при убытке (Переворот).
Примечание: * - возможные усовершенствования функционала библиотеки.
Настройки библиотеки:
extern string SETUP_RulesNET = "================= RULES`s NET ================="; extern int Max_trades = 5; // Макс. кол-во однвременно открытых ордеров советника extern int Strategy = 0; // Варианты создания серий ордеров extern int DeleteBallastOrders = 1; // 1 - Удаляем безнадёжные ордера extern int SendOnlyOrders = -1; // 0 - открываем только BUY; 1 - только SELL; -1 - все extern bool UseSignalForNextOrder = FALSE; // Исп. какие-либо сигналы для отк. послед. ордеров extern double Delta = 10; // Мин. расстояние м/у текущим и предыдущим ордерами extern double K_Delta = 1; // Коэфф. увеличения расстояния последующих ордеров, //где curDelta = Delta * MathPow (K_Delta, N - 1) (N - количество открытых ордеров в серии)
1-ый ордер в серии открывается по показанию индикатор(а)ов или "по звёздам", последующий ордер открывается на расстоянии не менее Delta и по сигналу (UseSignalForNextOrder = true) или без сигнала (UseSignalForNextOrder = false) тех же сил, которые открыли первый ордер. Расстояние м\у ордерами в серии можно увеличивать\сокращать посредством коэффициента K_Delta.
Если Вы хотите работать по тренду и знаете, как его определить, то при SendOnlyOrders = 0 библиотека будет открывать ТОЛЬКО BUY-ордера, а при SendOnlyOrders = 1 ТОЛЬКО SELL-ордера.
Библиотеку в init() нужно инициализировать:
//---- Инициализируем библиотеку построения сети
fInit_NET();
Передаваемые в основную функцию библиотеки параметры выглядят так:
bool fControl_NET (int fi_MG, // Magic
int fi_HistoryOrders, // Количестов закрытых ордеров
double fd_Pribul, // Результаты работы
double fd_Profit, // Текущая прибыль
double fd_BeginLots, // начальный лот
double& fd_Lots, // возвращаемое значение Lots
string fs_Comment, // OrderComment
int fi_Trend, // 0 - Open BUY; 1 - Open SELL
bool& fb_IsOpenOrders, // флаг наличия своих открытых ордеров
int fi_SendOnlyOrders = -1, // Направленность открытия сети
int fi_Slippage = 3) // проскальзывание
А так, как пример, выглядит работа библиотеки внутри советника:
//---- Следим за рынком на начале открытия бара iTF_Indicators if (bdt_NewBar != bdt_BeginNewBar) { //---- Заносим в массив текущие цены RefreshRates(); for (int li_IND = 0; li_IND < 2; li_IND++) {bda_Price[li_IND] = fGet_TradePrice (li_IND, bb_RealTrade, bs_Symbol);} //---- Получаем сигналы от индикаторов int li_Send = fSend_Control (bi_TREND); bdt_NewBar = bdt_BeginNewBar; //---- Фиксируем флаг присутствия открытых ордеров bb_IsOpenOrders = bi_MyOrders > 0; //---- Строим сеть ордеров fControl_NET (MagicNumber, gia_HistoryOrders[2], bd_BaseBalance, bd_ProfitCUR, Order_Lots, bd_LotsMM, EXP_Comment, li_Send, bb_IsOpenOrders, SendOnlyOrders, Slippage); }
Вот советник, построенный на этой библиотеке.
Библиотека может быть усовершенствована следующим функционалом:
- Удаляем (перед тем, как открыть следующий ордер) предыдущий лоссовый ордер (DeleteBallastOrders = 2);
- Тралим и модифицируем Динамические СТОПы (если задано): или ТОЛЬКО у 1-го ордера в серии, или ТОЛЬКО у последнего, или у всех ордеров (ModifyOnlyOrder);
- Используем, как прямой, так и обратный мартингейл (уменьшение размера лота) в серии;
- Серию открываем по тренду;
- Строим одновременно две автономных сети, каждую в своём направлении (UP и DW) и следим одновременно за:
- *** общим профитом серии UP;
- *** общим профитом серии DW;
- *** общим профитом обоих серий;
- Ну, и наконец, MultiNET - одновременно работают несколько автономных сетей (в том числе и на разных инструментах).
Можете предлагать дополнительный функционал к библиотеке.
P.S. Эта библиотека работает ТОЛЬКО в составе с базовой библиотекой и библиотекой торговых операций.
Изменения от 27.08.2012:
- добавил переменную DeleteBallastOrders;
- исправил несколько ошибок.

Ещё один советник, на тему упрощения ручной торговли.

Классическая реализация индикатора на основе формулы из книги Ч.Лебо и Д.Лукаса "Компьютерный анализ фьючерсных рынков".

Торговля на основе ценовых консолидаций

Индикатор отображает бары с любых пар, в текущем окне.