Избранное трейдера Advait
Привет всем! Давно не публиковал ничего — значит настало время. Готовил много всего интересного, что касается торговых приемов. Все будет структурировано, понятно и от общего к частному!
Введение в прайс экшен.
Price Action – «ценовое действие» -анализ, построенный на изучении движения цены. Почему цена двигается? Я знаю, что цена стоит на месте, когда спрос и предложение взаимно «удовлетворяют» друг друга. Одни покупают по 10, другие – продают, тоже по десять. В другом случае, когда желающих купить по 10 больше, чем тех, кто хочет продать, происходит сдвиг цены. В таком несоответствии заключен принцип ценообразования. Когда рынок находится в некотором «балансе», цена не делает резких скачков, ходит в пределах некоторого коридора (флет). Застои — это места, где рынок перераспределяется, то есть деньги «переходят» из одних рук в другие. Направление движения цены после выхода из флета может показать нам, кому было больно, кто победитель, а кто проигравший. Если я анализирую цену, то должен понимать, как формируются движения цены в общем и свечи графиков частности. Давайте посмотрим на рисунок ниже.

Поскольку предыдущую часть мы завершили на том, как задавать условия и цену для открытия/закрытия позиций, то в начале этой части рассмотрим две распространённые ошибки, допускаемые при тестировании систем: открытие позиции внутри гэпа и заглядывание в будущее.
Из страницы "Статистика конкурса ЛЧИ 2015" в номинации «Лучший трейдер миллионер» выбираем какого-нибудь участника, например clank,
и скачиваем его сделки.
Полученный архив распаковываем, csv-файл копируем в каталог Lchi2015 нашего рабочего Quik и переименовываем в Lchi2015.csv.
На 5-минутный график SiZ5 добавляем индикатор Lchi2015 в Окно 1 — метки сделок.
В Новое Окно добавим индикатор LchiEquity.lua (из xsharp.ru или на Google Диск ) — график доходности в пунктах по выбранному инструменту.
Давненько не писал про торговлю.
Торгую ботами под тслабом 5 лет. Поднял немного денех. Но счас откатывает. Идет запил уже 3месяца. Счет овер 10мио с запасом. Перепишу хаи — выложу стейт.
1. Тслаб меня огорчает. Функционал новых версий порезан. Поэтому сижу на старой версии 1.2.13. В новой версии дополна глюков и багов, которые перекочевали в Тслаб2.0. Править баги разрабы не хотят. Типа вот выйдет новая версия — там и исправим. Вышла 2.0 — никуя не работает.
баги тслаба следующие...
а) не работает с Смартком3… там целая куча багов… за целый год не могли исправить...
б) нет гарантии входа в сделку… т.е. вместо 100 лотов вам нальют 1 и никаких сообщений и предупреждений не будет...
в) не работают лимитные ордера… если их ставить близко от текущей цены… — т.е арбитражник не сделать никак… да и вообще там все очень криво… например логика по входу в позицию отличается от логики по выходу из позы...
г) нет итогового подсчета позы… крайне неудобно… у меня до 50-70ти поз открыто по каждой бумаге… крайне неудобно пересчитывать вручную… постоянно потеряно поз на 1-2мио...

//Читаем их Excel данные в массив
List getParamsFromExcel(string filePath)
{
//С какой строки начинаем читать данные
int start_from_row = 2;
//Индекс колонки с Тикером
int symbol_index = 1;
//Индекс колонки с типом ордера
int order_type_index = 2;
//Индекс колонки с ценой входа
int entry_price_index = 4;
//Индекс колонки с ценой стопа
int stop_price_index = 5;
//Индекс колонки с временем входа
int entry_time_index = 7;
int current_index = start_from_row;
//Текущий символ графика
string read_symbol = Bars.Symbol;
//Текущий считанный из Excel символ
string current_symbol;
//Список параметров считанный из Excell
List result;
result = new List();
//Переменная Excel приложение
Excel.Application xlApp;
//Переменная рабочая книга
Excel.Workbook xlWorkBook;
//Переменная рабочий лист
Excel.Worksheet xlWorkSheet;
//Переменная диапазон
Excel.Range range;
//Инициализируем переменные
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(filePath);
xlWorkSheet = xlWorkBook.Worksheets.get_Item(1);
range = xlWorkSheet.UsedRange;
//Считываем тикер из Excel
current_symbol = (string)(range.Cells[current_index, symbol_index] as Excel.Range).Value2;
//Читаем тикеры, пока не наткнемся на пустую строку
while(current_symbol != null)
{
//Если считанный тикер совпадает с тикером графика, на котором запустили робота
if(read_symbol == current_symbol)
{
//Читаем и добавляем параметры ордера
result.Add(new OrderParams
{
ePrice = Convert.ToDouble((range.Cells[current_index, entry_price_index] as Excel.Range).Value2),
sPrice = Convert.ToDouble((range.Cells[current_index, stop_price_index] as Excel.Range).Value2),
eTime = DateTime.FromOADate((range.Cells[current_index, entry_time_index] as Excel.Range).Value2),
pType = ((string)(range.Cells[current_index, order_type_index] as Excel.Range).Value2 == "Short" ? PositionType.Short : PositionType.Long)
});
}
current_index++;
//Считываем очередной тикер
current_symbol = (string)(range.Cells[current_index, symbol_index] as Excel.Range).Value2;
}
//Закрываем рабочую книгу
xlWorkBook.Close(true, null, null);
//Выходим из приложения
xlApp.Quit();
//Уничтожаем созданные объекты
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
return result;
}
//Уничтожаем переданный объект
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
}
finally
{
GC.Collect();
}
}