Открытие двух позиций по цене закрытия дня. Как???
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Открытие двух позиций по цене закрытия дня. Как???
Здравствуйте!
Подскажите пожалуйста... Вот пытаюсь понять как это реализовать в виде стратегии. Вроде бы всё просто на словах. Нужно просто открыть позиции по цене закрытия дня (бара) на дневном графике.
Можно пример этого куска в стратегии вот просто понять не могу.
Смотрел в примере исходник SMAstrategy но там условия на открытие по данным индикатора.
А как реализовать по барам?
Может есть где-то кусок кода любой с тратегии на подобных условиях. Всё обыскал, в упор не вижу
Подскажите пожалуйста... Вот пытаюсь понять как это реализовать в виде стратегии. Вроде бы всё просто на словах. Нужно просто открыть позиции по цене закрытия дня (бара) на дневном графике.
Можно пример этого куска в стратегии вот просто понять не могу.
Смотрел в примере исходник SMAstrategy но там условия на открытие по данным индикатора.
А как реализовать по барам?
Может есть где-то кусок кода любой с тратегии на подобных условиях. Всё обыскал, в упор не вижу
Последний раз редактировалось fbslim Ср янв 08, 2014 9:28 pm, всего редактировалось 2 раза.
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие позиции по цене закрытия дня. Как?
Всех с Рождеством!
Уже разобрался, с помощью уважаемого автора программы и его урокам - http://www.forextester.com/forum/viewtopic.php?t=1015
Но возникает ещё вопрос. Как заставить советника открывать больше одной позиции сразу? Это технически не возможно разве?
Может я и ошибаюсь, но кажется вот в этом месте загвоздка:
А именно с OrdersTotal = 0
Если поставить не 0 а 1 например - открываются сразу 10 позиции. Что-то не пойму.
А если мне последовательно нужно открыть 3 ордера, например в разное время дня? Или например ордер на следующий день в ту же сторону, даже если предыдущий ещё не закрыт?
Кто-то может подсказать как это сделать?
Уже разобрался, с помощью уважаемого автора программы и его урокам - http://www.forextester.com/forum/viewtopic.php?t=1015
Но возникает ещё вопрос. Как заставить советника открывать больше одной позиции сразу? Это технически не возможно разве?
Может я и ошибаюсь, но кажется вот в этом месте загвоздка:
Код: Выделить всё
if (HourOf(time) = OpenTime) and (OrdersTotal = 0) then
SendInstantOrder
Если поставить не 0 а 1 например - открываются сразу 10 позиции. Что-то не пойму.
А если мне последовательно нужно открыть 3 ордера, например в разное время дня? Или например ордер на следующий день в ту же сторону, даже если предыдущий ещё не закрыт?
Кто-то может подсказать как это сделать?
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие позиции по цене закрытия дня. Как?
Тут есть кто живой?
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Открытие позиции по цене закрытия дня. Как?
После Нового Года жизни нет.fbslim писал(а):Тут есть кто живой?
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие позиции по цене закрытия дня. Как?
Terranin, С Новым Годом Вас и с Рождеством!!! Замечательный Вы изготовили продукт, но пока нехватает мозга чтобы реализовать в нём всё то что мне лично нужно для дальнейшей с ним работы, взаимовыгодной понятноTerranin писал(а):После Нового Года жизни нет.fbslim писал(а):Тут есть кто живой?
Если я не смогу это осилить, то тогда это не будет иметь смысла. Вот и спрашиваю, и пытаюсь разобраться. Но продукт отменный на первый взгляд и надеюсь я просто пока не до конца понимаю как с ним работать, т.к. опыта в программировании у меня вообще нет. Вот и пытаюсь научиться.
Видно я один больной на праздниках этим занимаюсь. Но всё же я надеюсь на помощь. И жду ответа... когда там Вы сможете конечно.
Спасибо что откликнулись!
Очень бы хотелось разобраться в вышеобозначенных вопросах.
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Ордеров можно открывать сколько угодно, в примере было OrdersTotal = 0 как условие чтобы открывать ордер только тогда, когда никаких других ордеров не открыто.
Чтобы понять что начался новый день нужно сохранить дату текущего бара, и если дата нулевого бара изменилась по сравнению с сохраненной - значит начался новый день.
Чтобы понять что начался новый день нужно сохранить дату текущего бара, и если дата нулевого бара изменилась по сравнению с сохраненной - значит начался новый день.
Код: Выделить всё
var
tm: TDateTime; // глобальная переменная
// если время последнего бара не равно сохраненному значению
if time(0) <> tm then
begin
// значит новый бар, сохраним его время
tm := time(0);
открыть ордер 1
открыть ордер 2
end;
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Простите, но я даже скомпилировать с этим кодом не могу. В точке где (0) - пишет что недостаточно аргументов.Terranin писал(а):Ордеров можно открывать сколько угодно, в примере было OrdersTotal = 0 как условие чтобы открывать ордер только тогда, когда никаких других ордеров не открыто.
Чтобы понять что начался новый день нужно сохранить дату текущего бара, и если дата нулевого бара изменилась по сравнению с сохраненной - значит начался новый день.
Код: Выделить всё
var tm: TDateTime; // глобальная переменная // если время последнего бара не равно сохраненному значению if time(0) <> tm then begin // значит новый бар, сохраним его время tm := time(0); открыть ордер 1 открыть ордер 2 end;
Вот Ваш пример простой стратегии из Урока 3:
Код: Выделить всё
library DemoStrategy.dll;
uses
SysUtils, DateUtils, StrategyInterfaceUnit, TechnicalFunctions;
var
Currency: PChar;
OpenTime: integer= 00;
StopLoss: integer = 25;
TakeProfit: integer = 50;
LotSize: double = 0.1;
procedure InitStrategy; stdcall;
begin
StrategyShortName('Demo');
StrategyDescription('Strategy opens orders at 8 a.m.');
RegOption('Currency', ot_Currency, Currency);
RegOption('OpenTime', ot_Integer, OpenTime);
RegOption('StopLoss', ot_Integer, StopLoss);
RegOption('TakeProfit', ot_Integer, TakeProfit);
RegOption('LotSize', ot_Double, LotSize);
SetOptionDigits('LotSize', 1);
RegOption('Currency', ot_Currency, Currency);
end;
procedure DoneStrategy; stdcall;
begin
FreeMem(Currency);
end;
procedure ResetStrategy; stdcall;
begin
end;
procedure GetSingleTick; stdcall;
var
time: TDateTime;
OrderHandle: integer;
begin
if Symbol <> Currency then
exit;
time := iTime(Symbol, PERIOD_M1, 0);
if (HourOf(time) = OpenTime) and (OrdersTotal = 0) then
SendInstantOrder(Symbol, op_Sell, LotSize, Ask + StopLoss*Point, Ask - TakeProfit*Point, '', 0, OrderHandle);
end;
exports
InitStrategy,
DoneStrategy,
ResetStrategy,
GetSingleTick;
end.
Делал вот так:
И ещё такой момент.
procedure GetSingleTick; stdcall;
var
time: TDateTime;
OrderHandle: integer;
tm: TDateTime; // глобальная переменная
begin
if Symbol <> Currency then
exit;
time := iTime(Symbol, PERIOD_M1, 0);
// если время последнего бара не равно сохраненному значению
if time(0) <> tm then
begin
// значит новый бар, сохраним его время
tm := time(0);
SendInstantOrder(Symbol, op_Sell, LotSize, Ask + StopLoss*Point, Ask - TakeProfit*Point, '', 0, OrderHandle);
SendInstantOrder(Symbol, op_Sell, LotSize, Ask + StopLoss*Point, Ask - TakeProfit*Point, '', 0, OrderHandle);
end;
Допустим если из базового примера убрать условие (OrdersTotal = 0) и оставить только (HourOf(time) = OpenTime), то почему-то открываются сразу аж 73 ордера в одну сторону. Хотя SendInstantOrder был только один.
Не понимаю. Штопор. В мануале не нашёл ответа...
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Я думал с нуля писать будете. Там наложилась переменная time в процедуре на функцию time() поэтому компиллятор ругался. Пример я написал ниже. Только непонятно зачем 2 абсолютно одинаковых ордера открывать.
Этот пример будет открывать по 2 ордера на каждую дневную свечу. Если надо дождаться закрытия старых перед открытием следующих то там другая песня.
Этот пример будет открывать по 2 ордера на каждую дневную свечу. Если надо дождаться закрытия старых перед открытием следующих то там другая песня.
Код: Выделить всё
var
tm: TDateTime; // я ж писал это глобальная а не локальная переменная
procedure GetSingleTick; stdcall;
var
OrderHandle: integer;
begin
if Symbol <> Currency then
exit;
// работаем по заданной валюте на таймфрейме 1 день
// необходимо вызывать эту процедуру без нее не работают функции Open, Low, High ..., Time
SetCurrencyAndTimeframe(Currency, 60*24);
// без этой проверки ордера откроются сразу на первом тике первого бара
// а так дождемся формирования первого бара (регулируя это число можно начать работать например с 10го бара)
if Bars < 2 then
exit;
// если время последнего бара не равно сохраненному значению
if time(0) <> tm then
begin
// значит новый бар, сохраним его время
tm := time(0);
SendInstantOrder(Symbol, op_Sell, LotSize, Ask + StopLoss*Point, Ask - TakeProfit*Point, '', 0, OrderHandle);
SendInstantOrder(Symbol, op_Sell, LotSize, Ask + StopLoss*Point, Ask - TakeProfit*Point, '', 0, OrderHandle);
end;
end;
Asta la vista
Mike
Mike
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Я просто привёл это в качестве примера. Иногда нужно будет открывать два разных ордера, потом например 2 в одну сторону, один в другую и т.д.Terranin писал(а):Только непонятно зачем 2 абсолютно одинаковых ордера открывать.
Я был уверен что это достаточно элементарные действия и для них не понадобится никаких новых условий.
А оказалось что на Вашем последнем примере два ордера в одну сторону работают а два в противоположную уже нет...
И это очень грустно и печально. И потрачена куча времени... безрезультатно. И мне за каждым новым действом придётся обращаться к Вам за помощью, а это мягко говоря неудобно ни Вам ни мне.
Очень жаль что всё настолько усложнено для понимания в Вашей чудесной программе. Очевидно что четырьмя уроками и одним примером исходника стратегии тут не обойтись, не на учить. Очевидно надо идти на курсы программеров....
Потому что... разгуляться фантазии нет возможности. Слишком много условий нужно выполнить, которые мне неизвестны. Это нужно досконально знать Делфи, как Вы. Я к сожалению вижу что не тяну. Тут разобраться будет слишком сложно простому обывателю не владеющему языками.
В любом случае, спасибо Вам за попытку научить, но... это слишком сложно и неудобно. Может когда-нибудь я буду мыслить на Делфи как Вы и тогда получится. Но я не программист на сейчас и... не потяну...
Придётся искать что-то попроще...
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Дельфи тут вроде не при чем, те же самые проблемы возникли бы у Вас и при изучении языка MQL для метатрейдера. Поскольку все функции на 80% совместимы с ним, поэтому если кто-то программировал для метатрейдера без проблем переходит на нашу систему. Но конечно надо уметь программировать или учиться. А проще системы не найдете, везде свои языки и свои условия которых Вы не знаете.fbslim писал(а):Я просто привёл это в качестве примера. Иногда нужно будет открывать два разных ордера, потом например 2 в одну сторону, один в другую и т.д.Terranin писал(а):Только непонятно зачем 2 абсолютно одинаковых ордера открывать.
Я был уверен что это достаточно элементарные действия и для них не понадобится никаких новых условий.
А оказалось что на Вашем последнем примере два ордера в одну сторону работают а два в противоположную уже нет...
И это очень грустно и печально. И потрачена куча времени... безрезультатно. И мне за каждым новым действом придётся обращаться к Вам за помощью, а это мягко говоря неудобно ни Вам ни мне.
Очень жаль что всё настолько усложнено для понимания в Вашей чудесной программе. Очевидно что четырьмя уроками и одним примером исходника стратегии тут не обойтись, не на учить. Очевидно надо идти на курсы программеров....
Потому что... разгуляться фантазии нет возможности. Слишком много условий нужно выполнить, которые мне неизвестны. Это нужно досконально знать Делфи, как Вы. Я к сожалению вижу что не тяну. Тут разобраться будет слишком сложно простому обывателю не владеющему языками.
В любом случае, спасибо Вам за попытку научить, но... это слишком сложно и неудобно. Может когда-нибудь я буду мыслить на Делфи как Вы и тогда получится. Но я не программист на сейчас и... не потяну...
Придётся искать что-то попроще...
PS: Ордер в обратную сторону не выставляется скорее всего потому, что неправильно тейк профит/стоп лосс выставляется (не в том направлении). Попробуйте так:
SendInstantOrder(Currency, op_Buy, LotSize, Ask - point*StopLoss, Ask + point*TakeProfit, 0, '', OrderHandle);
И это тоже не к дельфи относится а к заморочкам рынка.
Asta la vista
Mike
Mike
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Ошибка после 0,Terranin писал(а):Попробуйте так:
SendInstantOrder(Currency, op_Buy, LotSize, Ask - point*StopLoss, Ask + point*TakeProfit, 0, '', OrderHandle);
И это тоже не к дельфи относится а к заморочкам рынка.
Это я помню что минус с плюсом надо поменять местами. Почему-то в первый раз не получилось. Теперь вроде да.
Вот так, чуток видоизменив Ваш пример оно заработало:
Код: Выделить всё
SendInstantOrder(Symbol, op_Buy, LotSize, Ask - point*StopLoss, Ask + point*TakeProfit, '', 0, OrderHandle);
И вот ещё кусок:
Вот в справке я такой информации не нашёл. Как же я могу даже начать догадываться, если никаких входящих данных у меня нет. Только случайные Ваши ответы и наводки на форумах. А все ли это ответы и почему все эти тонкости не изложены в руководстве?!// необходимо вызывать эту процедуру без нее не работают функции Open, Low, High ..., Time
SetCurrencyAndTimeframe(Currency, 60*24);
Возможно Вы правы и 80% переходят с MQL на Вашу платформу без проблем. Возможно в руководстве по MQL все эти тонкости описаны. Я его действительно не читал и не учил MQL. Я просто не вижу КАК наглядно увидеть результат работы своего советника на истории. Только если вывести его на демо счёт.
Тут же всё могло бы быть гораздо быстрее и удобнее но......
Так что... видимо придётся читать справку MQL дабы выяснить какие-то моменты.
Но вообще насколько я знаю, если уж выпускаешь такой замечательный продукт, очень похожий на МетатТрейдер, то почему бы уже не зайти дальше и не написать такое же подробное руководство по программированию на Делфи для конкретно Вашей программы, тем более что всё на 80% одинаково. Я сомневаюсь что кто-то подаст на Вас в суд, т.к. врядли у них есть патент на изобретение интерфейса, в том числе и интерфейса и структуры справочного руководства.
В общем... видимо придётся это всё оставить на время. И собраться с духом для чтения справки MQL
Спасибо Вам ещё раз что уделили время. Надеюсь я найду в себе моральные силы в будущем для этой работы...
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Надо бы написать, да и хелп обновить, но руки все не доходят. Работы полно, сейчас в разработке третья версия программы. А поскольку основная масса покупателей тестирует стратегии вручную и только некоторые пишут автоматические стратегии основное внимание уделяется разработке новых фич для ручного тестирования. Сделаем как разгребемся с делами.fbslim писал(а): Вот в справке я такой информации не нашёл. Как же я могу даже начать догадываться, если никаких входящих данных у меня нет. Только случайные Ваши ответы и наводки на форумах. А все ли это ответы и почему все эти тонкости не изложены в руководстве?!
Возможно Вы правы и 80% переходят с MQL на Вашу платформу без проблем. Возможно в руководстве по MQL все эти тонкости описаны. Я его действительно не читал и не учил MQL. Я просто не вижу КАК наглядно увидеть результат работы своего советника на истории. Только если вывести его на демо счёт.
Тут же всё могло бы быть гораздо быстрее и удобнее но......
Так что... видимо придётся читать справку MQL дабы выяснить какие-то моменты.
Но вообще насколько я знаю, если уж выпускаешь такой замечательный продукт, очень похожий на МетатТрейдер, то почему бы уже не зайти дальше и не написать такое же подробное руководство по программированию на Делфи для конкретно Вашей программы, тем более что всё на 80% одинаково. Я сомневаюсь что кто-то подаст на Вас в суд, т.к. врядли у них есть патент на изобретение интерфейса, в том числе и интерфейса и структуры справочного руководства.
В общем... видимо придётся это всё оставить на время. И собраться с духом для чтения справки MQL
Спасибо Вам ещё раз что уделили время. Надеюсь я найду в себе моральные силы в будущем для этой работы...
Asta la vista
Mike
Mike
-
- Сообщения: 9
- Зарегистрирован: Пн янв 06, 2014 2:11 pm
Re: Открытие двух позиций по цене закрытия дня. Как???
Жду с нетерпением новой версииTerranin писал(а):Сделаем как разгребемся с делами.