View Full Version : Проектирование стратегий для приложения AutoGraf 4.
Проектирование стратегий для практического использования в приложении AutoGraf 4.
Цитата(SANbKA @ Nov 4 2008, 01:44 PM) 15600"]
Здраствуйте. Прошу подсказать каким образом реализовать свою тоговую стратегию в AutoGraf 4.
Суть: выставление отложенных ордеров с значением на 1 пункт выше/ниже цены фрактальной свечи по последним двум образованых фракталам (верхний и нижний соответственно) и удалению несработавших ордеров).
Если возможно помогите )
Уточним задачу.
1. Необходимо указать тип ордеров.
2. Указать значения стоп-приказов для ордеров.
3. Опишите подробно как расчитывается фрактальная свеча. Если используются индикаторы, то какие и с какими параметрами.
4. Если есть готовый код эксперта или часть кода, то выложите здесь.
Уточним задачу.
1. Необходимо указать тип ордеров.
Фрактал на покупку - бай стоп
Фрактал на продажу - селл стоп
2. Указать значения стоп-приказов для ордеров.
стоп ниже/выше фрактальной свечи
3. Опишите подробно как расчитывается фрактальная свеча. Если используются индикаторы, то какие и с какими параметрами.
Данные из индикатора Fractals http://codebase.mql4.com/ru/3713
4. Если есть готовый код эксперта или часть кода, то выложите здесь.
Кода нет. единственное что нашел это вот: http://codebase.mql4.com/ru/1843
1. Будем считать, что с типами ордеров разобрались.
2. Стоп-приказы - это и StopLoss и TakeProfit.
3. В данном случае нет необходимости употреблять пользовательский индикатор. Стандартный индикатор даёт полное совпадение.
[attachment=4423:_________________1.png]
Здесь серым - стандартный, красно-синим - пользовательский.
4. Случайные коды не нужны. Речь шла о своём продуманном. Но раз нет, напишем с нуля.
--
Мне понадобится 1 вечер, чтобы написать стратегию. Приходите завтра. И обсудим.
Фрагмент кода функции автоматической торговли, реализующий стратегию.
//================================================================================ 4-1 ==
case 4: // Srtategy 4
int Total_Ord = NormalizeDouble(Order[0][0],0); // Количество ордеров в окне
bool BS = true;// Пока считаем, что никаких Buy в окне нет, т.е BuyStop нужен
bool SS = true;// Пока считаем, что никаких Sell в окне нет, т.е SellStop нужен
for (i=1; i<=Total_Ord; i++)
{
int Tip_Ord = NormalizeDouble(Order[i][6],0);// Тип текущего ордера
if (Tip_Ord==0 || Tip_Ord==2 || Tip_Ord==4) // При любых баях счтаем, ..
BS = false; // .. что BuyStop нам не нужен
if (Tip_Ord==1 || Tip_Ord==3 || Tip_Ord==5) // При любых селах счтаем, ..
SS = false; // .. что SellStop нам не нужен
}
int StopLevel = MarketInfo( Symbol(), MODE_STOPLEVEL)*Point;
//-------------------------------------------------------------------------------- 4-2 --
if (BS == true)
{
for (i=0;;i++) // i - индекс фрактальной свечи
{
double Fr_UP = iFractals(NULL, 0, MODE_UPPER, i); // High фракт. свечи
if (NormalizeDouble(Fr_UP,Digits) > 0.0) // Если поймался фрактал
break; // ..выходим из цикла
}
if (Fr_UP > Ask+StopLevel) // Если открытие возможно
{
double SL_BS = Low[i]; // StopLoss для ордера
if (Fr_UP - SL_BS < StopLevel)// Учитываем минимально допустимую дистанцию
SL_BS = Fr_UP - StopLevel;
MN = AG_Magic_Number(); // Вычисление MagicNumber (рекомендуется)
// Устанавливаем BuyStop
AG_Message(Message, "АТ: Попытка открыть BuyStop.");//Сообщение
OrderSend(Symbol(),OP_BUYSTOP,Lot,Fr_UP,Slip,SL_BS,Fr_UP+TP*Point,Comm,MN);
return(1); // Открылись и отдаём управление AG для учёта
}
}
//-------------------------------------------------------------------------------- 4-3 --
if (SS == true)
{
for (i=0;;i++) // i - индекс фрактальной свечи
{
double Fr_DN = iFractals(NULL, 0, MODE_LOWER, i); // Low фракт. свечи
if (NormalizeDouble(Fr_DN,Digits) > 0.0) // Если поймался фрактал
break; // ..выходим из цикла
}
if (Fr_DN < Bid+StopLevel) // Если открытие возможно
{
double SL_SS = High[i]; // StopLoss для ордера
if (SL_SS - Fr_DN < StopLevel)// Учитываем минимально допустимую дистанцию
SL_SS = Fr_DN + StopLevel;
MN = AG_Magic_Number(); // Вычисление MagicNumber (рекомендуется)
// Устанавливаем SellStop
AG_Message(Message, "АТ: Попытка открыть SellStop.");//Сообщение
OrderSend(Symbol(),OP_SELLSTOP,Lot,Fr_DN,Slip,SL_SS,Fr_DN-TP*Point,Comm,MN);
return(1); // Открылись и отдаём управление AG для учёта
}
}
//-------------------------------------------------------------------------------- 4-4 --
break; // End Srtategy 4
//================================================================================
= 17 ==
Форум находится в режиме отладки, поэтому возможны небольшие глюки. В данном случае выложен фрагмент кода. Код получился чёрным на чёрной подложке. Если его выделить, то код виден. Код также можно посмотреть во вложенном файле.
1. Обратите внимание на код в блоках 2-3. Этот фрагмент не позволяет включать функцию автоматической торговли. Для практического использования можно сделать одно из двух:
1) удалить этот блок;
2) ввести в настройках эксперта пароль для функции АТ; в данном случае это число = номер Вашего счёта + 1.
2. Файл необходимо скомпилировать и положить в каталог Каталог терминала\experts\libraries
3. В настройках эксперта необходимо указать название стратегии (значение для переменной S_4), например, Fra.
4. Блок 4-1 - 4-2. Здесь выполняется анализ ордеров. Принято, что отложенные ордера открываются только в случае, если других однонаправленных ордеров нет.
5. Блоки 4-2 - 4-3 и 4-3 - 4-4 содержат один и тот же (похлжий) код, но составленный для разных ордеров.
Для открытия ордера BuyStop выполняются следующие вычисления:
Для поиска ближайшей вершины фрактала используется индикатор iFractals().
Вычисления, выполняемые непосредственно перед открытием, производятся лишь в том случае, если в текущий момент возможно установить ордер на вершину фрактальной свечи (это невозможно, если рыночная цена выше)
StopLoss устанавливается на Low свечи. Но если свеча короткая, то может быть нарушено условие по минимальной ограничивающей дистанции. Чтобы не формировать ошибочный торговый приказ, делается необходимая проверка для StopLoss.
TakeProfit устанавливается на основе значения, заданного в приложении AutoGraf 4.
6. Все вычисления в представленной функции АТ выполнены в соответствии с правилами MQL 4 и дополнительных знаний не требуют.
Исключение составляют входные параметры функции АТ. Все вх. параметры подробно описаны в разделе http://autograf.dp.ua/Pages/2/26/267/2672.htm и в следующих нескольких разделах.
7. Показательно тестирование стратегии в режиме визуализации.
Данная стратегия не предусматривает модификацию ордеров в случаях, если появляются новые фракталы. Поэтому "как-то" стратегия будет работать лишь в ближайшее после запуска время. А с углублением в историю отложенные ордера будут оставаться несрабтавшими всё дальше и дальше от текущего курса. Это приведёт к снижению количества реальных сделок и в конечном счёте может привести к полному их отсутствию.
8. Тестирование. Для обычного тестирования необходимо в тестируемом блоке указать case = 0.
Результаты тестирования за 2008 год такие:
[attachment=4426:2.png]
--
Отдельно нужно заметить, что никакая стратегия не является составной частью приложения AutoGraf 4. Любая стратегия может быть написана и присоединена к приложению для практического использования. Результаты работы программы в автоматическом режиме полностью зависят исключительно от сущности присоединённой стратегии.
Спасибо. Сейчас попробуем.. а возможна вставка ограничения срока действия отложенного ордера в автоматическом режиме в период например 4 часа?
Цитата(SANbKA @ Nov 5 2008, 11:04 AM) 15625"]
Спасибо. Сейчас попробуем.. а возможна вставка ограничения срока действия отложенного ордера в автоматическом режиме в период например 4 часа?
Да, возможно. Это можно сделать с помощью инструмента Закрыть по времени.
Инструмент описан здесь http://autograf.dp.ua/Pages/2/24/2415.htm
QUOTE (SK_ @ Nov 4 2008, 11:15 PM) 15617"]
Данная стратегия не предусматривает модификацию ордеров в случаях, если появляются новые фракталы. Поэтому "как-то" стратегия будет работать лишь в ближайшее после запуска время. А с углублением в историю отложенные ордера будут оставаться несрабтавшими всё дальше и дальше от текущего курса. Это приведёт к снижению количества реальных сделок и в конечном счёте может привести к полному их отсутствию.
Давайте найдем выход: А если реализовать функцию выставления ордеров по последним 10 барам? и удалению всех остальных несработавших ордеров.
Цитата(SANbKA @ Nov 5 2008, 02:22 PM) 15635"]
Давайте найдем выход: А если реализовать функцию выставления ордеров по последним 10 барам? и удалению всех остальных несработавших ордеров.
Давайте действовать последовательно.
1. Получилось ли у Вас запустить приложение с этой функцией АТ? Если да, то выложите, пожалуйста, скриншот, чтобы посетители форума могли видеть как это выглядит у Вас. Если нет, то скажите какие затруднения.
Наша задача в том, чтобы научить пользователей делать это самостоятельно (к сожалению, мы не сможем написать все стратегии для всех желающих). Но помощь получит каждый пользователь.
2. Понятно, что в таком виде стратегия не будет очень эффективной. Нужно как-то модифицировать ордера вслед за появляющимися новыми фракталами.
Здесь мы будем разделять задачи.
2.1. Задача составления стратегии - целиком пользовательская. Пользователь должен сам хорошо представлять что именно он хочет реализовать в коде. В данном случае можно модифицировать ордер на ближайшую (новую) вершину фрактала, можно удалить ордер и поставить новый. Можно также (используя инструменты приложения AutoGraf 4) тянуть ордер вслед за курсом. Вариантов много.
2.2. Задача MQLabs - помочь пользователям разобраться как закодировать стратегию самостоятельно. Для этой цели в рамках лаборатории будет составлен и открыто опубликован код с пояснениями.
[attachment=4445:AT.GIF] Вот как это выглядит у меня)
Вот и славно:)
(внизу справа есть форма Управление текущими файлами; можно вставлять рисунок прямо в текст, тогда его сразу видно и легко открыть)
Powered by vBulletin® Version 4.1.8 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.