Робот торгует, опираясь на один конкретный уровень. Для визуального удобства рисую его стандартными методами терминала Карандашик/Уровень, а в самом роботе задаю его значение через параметр P1.
Хотелось бы так настроить робота, чтобы он мог считывать значение нарисованного горизонтального уровня в конкретном открытом окне и также чтобы робот умел удалять этот уровень и рисовать новый согласно своей стратегии.
Если такая возможность существует, помогите с кодом, пожалуйста.
Спасибо.
Общие вопросы по разработке > Можно ли научить робота считывать и рисовать уровни?
-
- Сообщения: 84
- Зарегистрирован: 14 ноя 2016, 02:17
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Re: Можно ли научить робота считывать и рисовать уровни?
Добрый день! В терминале есть такая реализованная возможность как "Робот по линиям". где Вы задаёте (рисуете уровни), а потом можете задать условие на открытие позиции. Или описываете какой нибудь патерн в индикаторе и используете его в роботе. Можно описать сразу в роботе. Когда то пробовал описать патерны по А.Герчику. Ищем БПУ (бар образовавший уровень), потом БПУ1-3 (бар подтвердивший уровень), по ним строим уровень. Это только образец не паноцея, т.к это неполная часть условий по А.Герчику.
Код: Выделить всё
function Initialize()
{
// Обязательные параметры:
IndicatorName = "Search_level"; // Задайте название индикатора и сохраните с данным именем
PriceStudy = true; // Рисовать в области цены (true – да, false – нет)
AddInput("Input", Inputs.Candle); // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
AddSeries("Last1", DrawAs.Line, Color.Red);// Задаем вид линии индикатора с именем ряда Last
AddLevel(0, Color.Red, LineStyles.Dot, 2, "Last");
/* AddLevel(1, Color.Red, LineStyles.Dot, 2, "Last");
AddLevel(2, Color.Red, LineStyles.Dot, 2, "Last");
AddLevel(3, Color.Red, LineStyles.Dot, 2, "Last");
AddLevel(4, Color.Red, LineStyles.Dot, 2, "Last");
AddLevel(5, Color.Red, LineStyles.Dot, 2, "Last");*/
AddSeries("Direction"); // Направление открываемой позиции (0 - нет направления, 1- лонг, 2- шорт)
// AddSeries("GetPriceStep_ind"); // Минимальный шаг цены получаемый с робота (число знаков после запятой)
AddParameter("GetPriceStep_ind", 2); // Минимальный шаг цены (число знаков после запятой)
AddParameter("Period", 200); // Период построения уровней
// AddGlobalVariable("path", Types.String, @"c:\\dell\\Search_level.txt");
AddGlobalVariable("ListDouble", Types.DoubleList);
}
function Evaluate()
//Владимир
{
int Period_int = Period-0;
double max_stop=Math.Round((Input.High[0]*0.2/100),(GetPriceStep_ind+0));
double gap=Math.Round((max_stop*0.2),(GetPriceStep_ind+0));
double High=Input.High[3]; // Переменная хранения значения хая для сравнения
double Low=Input.Low[3]; // Переменная хранения значения хая для сравнения
double Hx=0;
double Lx=0;
Direction=0;
string Model="нет";
if ((MaxIndex - CurrentIndex) > Period_int) return;
if (CurrentIndex == MaxIndex)
{
//////// Описываем модель на покупку
//модель 1
double Low2=Input.Low[3]+gap;
if(Input.Low[1] ==Input.Low[3] && (Input.Low[1]<=Input.Low[2] && Low2>=Input.Low[2]))
{
for(var x=4; x<Period_int; x++ )
{
if ((Low==Input.High[x])||(Low==Input.Low[x]) )
{
Lx=Low;
if( Low>0)
{
Model="Лонг - 1";
Direction=1;
ListDouble.Add(Lx);
}
}
}
}
//модель 2
if(Input.Low[1] ==Input.Low[2] && Input.Low[1] ==Input.Low[3]
&& Input.Low[1] > Input.Low[4] && Input.Low[1] < Input.Close[4] && Input.Low[1] < Input.Open[4] )
{
for(var x=5; x<Period_int; x++ )
{
if ((Low==Input.High[x])||(Low==Input.Low[x]) )
{
Lx=Low;
if( Low>0)
{
Model="Лонг - 2 (простой ложный пробой)";
Direction=1;
ListDouble.Add(Lx);
}
}
}
}
//модель 3
if(Input.Low[1] ==Input.Low[2] && Input.Low[1] ==Input.Low[3]
&& Input.Low[1] > Input.Close[4] && Input.Low[1] < Input.Open[4] && Input.Low[1] < Input.Close[5])
{
for(var x=6; x<Period_int; x++ )
{
if ((Low==Input.High[x])||(Low==Input.Low[x]) )
{
Lx=Low;
if( Low>0)
{
Model="Лонг - 3 (сложный ложный пробой)";
Direction=1;
ListDouble.Add(Lx);
}
}
}
}
//////// Описываем модель на продажу
//модель 1
double High2=Input.High[3]-gap;
if(Input.High[1] ==Input.High[3] && (Input.High[1]>=Input.High[2] && High2<=Input.High[2]))
{
for(var x=4; x<Period_int; x++ )
{
if ((High==Input.High[x])||(Low==Input.Low[x]) )
{
Hx=High;
if( High>0)
{
Model="Шорт - 1";
Direction=2;
ListDouble.Add(Hx);
}
}
}
}
//модель 2
if(Input.High[1] ==Input.High[2] && Input.High[1] ==Input.High[3]
&& Input.High[1] < Input.High[4] && Input.High[1] > Input.Close[4] && Input.High[1] > Input.Open[4] )
{
for(var x=6; x<Period_int; x++ )
{
if ((High==Input.High[x])||(Low==Input.Low[x]) )
{
Hx=High;
if( High>0)
{
Model="Шорт - 2 (простой ложный пробой)";
Direction=2;
ListDouble.Add(Hx);
}
}
}
}
//модель 3
if(Input.High[1] ==Input.High[2] && Input.High[1] ==Input.High[3]
&& Input.High[1] > Input.Close[4] && Input.High[1] < Input.Open[4] && Input.High[1] < Input.Close[5])
{
for(var x=6; x<Period_int; x++ )
{
if ((High==Input.High[x])||(Low==Input.Low[x]) )
{
Hx=High;
if( High>0)
{
Model="Шорт - 3 (сложный ложный пробой)";
Direction=2;
ListDouble.Add(Hx);
}
}
}
}
//////////////////////////////////
/* using (System.IO.StreamWriter sw = System.IO.File.CreateText(path))
{
sw.WriteLine("Модель - " + Model);
sw.WriteLine("Направление - " + Convert.ToString(Direction ));
sw.WriteLine(string.Join("\r\n", ListDouble ));
sw.Close(); sw.Dispose();
}
*/
if (Direction>0)
{
Levels[0].Level = ListDouble[0];
}
}//off if (CurrentIndex == MaxIndex)
}
Re: Можно ли научить робота считывать и рисовать уровни?
Можно как-то считать значение нарисованного руками уровня в переменную, чтобы потом её использовать в роботе?
Хочется сделать так, чтобы вручную передвигать на графике горизонтальный уровень, который робот рассчитывает в своей работе. Чисто из соображений удобства. Неудобно каждый раз переменную в параметрах править.
Хочется сделать так, чтобы вручную передвигать на графике горизонтальный уровень, который робот рассчитывает в своей работе. Чисто из соображений удобства. Неудобно каждый раз переменную в параметрах править.

Вернуться в «Общие вопросы по разработке»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 12 гостей