Практика трейдинга Основные практические аспекты торговли на Форекс.

Ответить
13.02.2015, 21:06
Аватар для quants
quants quants вне форума Интересующийся
Регистрация: 13.02.2015 / Сообщений: 6
Поблагодарили 1 раз в 1 сообщении / Репутация: 2

По умолчанию Квантовый трейдинг

Язык mql получил достаточно серьезные улучшения, чтобы можно было использовать его не только на уровне любителя, но и более менее профессионально.
До этого он был просто процедурным языком, сейчас же худо бедно поддерживает ООП, и что вполне приятно, худо бедно - классы.
Лично мне еще не хватает поддержки интерфейсов. Но буду надеяться, что они появятся, и тогда меня ждут долгие ночи рефакторинга кода.

Итак, цель этой ветки, и, в принципе, моего желания ее завести - показать, как шаг за шагом создаются идеи, их тестирование и возможные реализации в коде. Показать, как легко и просто проверить свои идеи, если немного не бояться исследовать рынок, и не бояться быть разочарованным в своей идее.
Какую предварительную работу надо проделать, чтобы проверка моделей была максимально простой
16.02.2015, 06:51
Аватар для quants
quants quants вне форума Интересующийся
Регистрация: 13.02.2015 / Сообщений: 6
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Писать буду редко, но метко (так как параллельно много дел, плюс все что буду тут писать, надо запрограммировать и подумать, что сделать следующим шагом).
Итак, первое, что нам надо запрограммировать, это обертку для открытия и закрытия ордеров. Дело в том, что не так сложно писать только OrderSend, но вот только каждое открытие и закрытие надо сопровождать проверками и обработками.
Да и упростить синтаксис написания тоже не повредит.
По мере необходимости, он будет обрастать нужными функциями, но на первое время нам нужны будут следующие:
Код:
class OrdersHelper
{
	private:
		int magicNumber;
		int slipPage;
		string symbol;
		color buyOrderColor;
		color sellOrderColor;
		color modifyOrderColor;
		
	public:
		OrdersHelper(int inMagicNumber, int inSlipPage, string inSymbol);
		OrdersHelper(int inMagicNumber, int inSlipPage);
		void SetColorOrders(color inBuyOrderColor, color inSellOrderColor, color inModifyOrderColor);
		void SetDefaultColorOrders();
		int OpenOrder(int cmd, double lot, int sl, int tp, string comment);
		int OpenOrderBuy(double lot, int sl, int tp, string comment);
		int OpenOrderSell(double lot, int sl, int tp, string comment);
		bool CloseOrder(int ticket);
		bool DeleteOrder(int ticket);		
};
Немного поясню, symbol() можно было вынести, как у меня, в поле helper'а, а можно в методы. Но так как чаще всего я буду использовать стратегии для одной валютной пары, то мне нет необходимости каждый раз передавать ее в вызов метода.
Соответственно, в данной реализации, для использовании на нескольких парах, под каждую придется создавать "свой" экземпляр класса.
Также изначально нет раскраски действий. Можно задать "свою", либо цветами "по-умолчанию" - цвета которые использует МТ в тестере.
16.02.2015, 09:56
Аватар для quants
quants quants вне форума Интересующийся
Регистрация: 13.02.2015 / Сообщений: 6
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
Для простоты анализа фильтров и сигналов напишем два "полусоветника". Один открывает сделки с фиксированными тейком и стопом. Другой - по подсмотренным в соседней ветке "симплекс" методом, то есть с фиксированным тейком для группы ордеров, но с разными стопами.

Так мы сможем проверять "качество" фильтров и сигналов без прикручивания каких-либо фишек в стратегии. Ведь сигналы и фильтры должны быть однозначными и давать хоть какое-то преимущество на рынке.

Условно, у нас появляются еще два очень похожих друг на друга класса

Код:
class OpenOrdersFixStopProfit
{
	private:
		int stopLoss;
		int takeProfit;
		int magicNumber;
		int slipPage;
		
		OrdersHelper *ordersHelper;
		void ProcessBuy(double lot);
		void ProcessSell(double lot);
	public:
		OpenOrdersFixStopProfit(int inMagicNumber, int inSlipPage, int inStopLoss, int inTakeProfit);
		void ProcessSignal(int signal, double lot = 0.1);
};
и
Код:
class OpenOrdersSimplexMethod
{
	private:
		int stopLoss;
		int simplexCount;
		int magicNumber;
		int slipPage;
		
		OrdersHelper *ordersHelper;
		void ProcessBuy(double lot);
		void ProcessSell(double lot);
	public:
		OpenOrdersSimplexMethod(int inMagicNumber, int inSlipPage, int inStopLoss, int inSimplexCount);
		void ProcessSignal(int signal, double lot = 0.1);
};
17.02.2015, 05:20
Аватар для quants
quants quants вне форума Интересующийся
Регистрация: 13.02.2015 / Сообщений: 6
Поблагодарили 1 раз в 1 сообщении / Репутация: 2
А теперь немного подогреем публику
В соседней ветке продается робот не то за 1000 уе, не то за 250 уе.
Цена гуляет, как и прибыльность робота.
Так вот.
По его первой версии не сложно понять, что "фильтром" является направление дневной свечи ("старшую" свечу можно задать в параметрах советника,если есть желание)
Код:
int GetFilter(int shift) 
{
	int result = 0;
	int dayShift = iBarShift(Symbol(), PERIOD_D1, Time[shift]) + 1;
	if(iOpen(Symbol(), PERIOD_D1, dayShift) > iClose(Symbol(), PERIOD_D1, dayShift))
	{
		result = -1;
	}
	if(iOpen(Symbol(), PERIOD_D1, dayShift) < iClose(Symbol(), PERIOD_D1, dayShift))
	{
		result = 1;
	}
	return(result);
}
А сигналом для входа - направление свечи на более мелком таймфрейме
Код:
int GetSignal(int shift)
{
	int result = 0;
	if(Open[shift] > Close[shift])
		result = -1;
	if(Open[shift] < Close[shift])
		result = 1;		
	return(result);
}
В данном случае сигнал "обратные", но реверс сигнала мы обработаем чуть позднее. По сути - в данном случае сигнал: бычья свеча для покупок, медвежья для продаж.
У автора он инверсионный.

Под конец еще поделюсь еще одной стандартной оберткой в советнике.
А именно, как правило, надо различать - новая свеча у нас, или просто, новый тик. Так как сигналы как правило генерируются при закрытии свечи, а "сопровождение" сделок необходимо проводить каждый тик.
Таким образом, получаем такую симпатичную обертку:
Код:
void OnTick()
{
//---
	if(_lastCandle != Time[0])
	{
		NewCandle();
		_lastCandle = Time[0];
	}   
	NewTick();
}
Так как автор советника никаких рекомендаций не дает, можно сделать простые выводы.
Советник должен работать по каждой паре независимо также неплохо.
С той лишь разницей, что чем больше пар в работе, тем больше диверсификация и меньше риск слива.
Соответственно, поэтому у автора в новой версии уже, если не ошибаюсь, 5 пар в работе.

Но мы проверим, имеется ли хоть какое-нибудь стат преимущество в его подходе к сделкам или нет. Или "выезжает" только за счет жесткого количества доливок и везении, а значит, доверять деньги такому советнику нельзя, а тем более продавать его за неплохие 1000 уе.

Далее покажу более аргументированно, почему не стоит покупать этот робот, по крайней мере в текущем состоянии.
А также, возможно, покажу, как небольшие изменение принесут потенциал роботу (не очень хочется, чтобы автор взял на вооружение, и стал продавать свой супер пупер робот 3й версии, более устойчивый к сливам, но уже за 2000 уе )
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 19:02. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO