Ответить
15.02.2015, 16:37
Аватар для Айбек
Айбек Айбек вне форума Активный участник
Регистрация: 27.09.2011 / Сообщений: 65
Поблагодарили 38 раз(а) / Репутация: 39
Всем привет! Возникла проблема не могу дописать советник)) Вообщем сова открывает сделку когда rsi < 70 на продажу... аналогично и противоположную сторону с покупкой... Проблема в том что после закрытии ордера... по тейку или стопу... ордер снова открывается! Надо сделать так чтобы ордер открывался только 1 раз и в след раз открывался уже противоположный сигнал)) раньше пользовался last orderом, но щас не могу вспомнить)) Спасибо!
15.02.2015, 18:35
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Поднимаете флаг открытия ордера и придумываете условия чтоб его опустить.
При нем не открывать.
17.02.2015, 08:48
Аватар для sesame
sesame sesame вне форума Прохожий
Регистрация: 24.12.2014 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Всем привет, подскажите как лучше реализовать алерт для
графической фигуры треугольника, для начала нужно нарисовать
сам треугольник (чтобы он не перерисовывался), а когда цена
выходит за границы треугольника, срабатывает алерт, анализ
фигур должен работать в фоновом режиме, не открывая графика,
вот проблема, с которой столкнулся, если есть угол наклона
(как его найти?), надо узнать цену, на которой находится
линия в текущий момент.
Линия же находится на разном уровне цены на разных свечах нам
нужен не наклон линии, а именно цена, на которой линия
стоит в текущий момент, если бы линия была горизонтальная, то
цена уровня линии на каждой свече была бы одна и та же.
В этом пространстве находятся котировки по X координате время
по Y координате цена, узнав масштаб графика и наклон линии,
проблема будет решена.

Что думаете насчет этого, может я велосипед изобретаю и есть
готовое решение ?
17.02.2015, 11:14
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
Всем привет, подскажите как лучше реализовать алерт для
графической фигуры треугольника, для начала нужно нарисовать
сам треугольник (чтобы он не перерисовывался), а когда цена
выходит за границы треугольника, срабатывает алерт, анализ
фигур должен работать в фоновом режиме, не открывая графика,
вот проблема, с которой столкнулся, если есть угол наклона
(как его найти?), надо узнать цену, на которой находится
линия в текущий момент.
Линия же находится на разном уровне цены на разных свечах нам
нужен не наклон линии, а именно цена, на которой линия
стоит в текущий момент, если бы линия была горизонтальная, то
цена уровня линии на каждой свече была бы одна и та же.
В этом пространстве находятся котировки по X координате время
по Y координате цена, узнав масштаб графика и наклон линии,
проблема будет решена.

Что думаете насчет этого, может я велосипед изобретаю и есть
готовое решение ?
Прямая линия строится по 2 точкам. Зная координаты этих точек можно посчитать любые точки этой линии. Никаких углов и масштабов графика не надо. Если между точками разница в 100 пунктов и 20 баров. Значит, на линии, цена меняется 100/20=5 пунктов за бар.
Если первая точка находится на цене 1.5674, на следующем баре она будет иметь цену 1.5679, дальше на 1.5684...
Подобные задачки решают в школе, где то в начале.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
sesame 
18.02.2015, 08:59
Аватар для abuuuuuu
abuuuuuu abuuuuuu вне форума Местный знаток
Регистрация: 08.08.2013 / Сообщений: 287
Поблагодарили 716 раз(а) / Репутация: 717
как сделать чтобы советник открывал только один ордер на одном баре ?
не предлагайте if(orderstotal()==0)
например советник проверял бы открытие последнего ордера и текущее время и потом открылся ордер
заранее спасибо
18.02.2015, 10:31
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
как сделать чтобы советник открывал только один ордер на одном баре ?
не предлагайте if(orderstotal()==0)
например советник проверял бы открытие последнего ордера и текущее время и потом открылся ордер
заранее спасибо
_http://forum.mql4.com/ru/38949/page4#434234
_http://forum.mql4.com/ru/38949/page4#434235
18.02.2015, 10:58
Аватар для no-namer
no-namer no-namer вне форума Местный житель
Регистрация: 30.12.2008 / Сообщений: 8
Поблагодарили 1 раз в 1 сообщении / Репутация: 1
Всем привет! Возникла проблема не могу дописать советник)) Вообщем сова открывает сделку когда rsi < 70 на продажу... аналогично и противоположную сторону с покупкой... Проблема в том что после закрытии ордера... по тейку или стопу... ордер снова открывается! Надо сделать так чтобы ордер открывался только 1 раз и в след раз открывался уже противоположный сигнал)) раньше пользовался last orderом, но щас не могу вспомнить)) Спасибо!
Примерно:
if(rsi<70 && LastType()==OP_BUY) - открываем SELL
if(rsi>70 && LastType()==OP_SELL) - открываем BUY
//-------------------------------------------------------------------+
int LastType()
{
int type=-1;
datetime dt=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(Symbol()==OrderSymbol() && OrderMagicNumber()==mn_1)
{
if(OrderCloseTime()>dt)
{
dt=OrderCloseTime();
type=OrderType();
}
}
}
return(type);
}
19.02.2015, 08:25
Аватар для Айбек
Айбек Айбек вне форума Активный участник
Регистрация: 27.09.2011 / Сообщений: 65
Поблагодарили 38 раз(а) / Репутация: 39
Примерно:
if(rsi<70 && LastType()==OP_BUY) - открываем SELL
if(rsi>70 && LastType()==OP_SELL) - открываем BUY
//-------------------------------------------------------------------+
int LastType()
{
int type=-1;
datetime dt=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(Symbol()==OrderSymbol() && OrderMagicNumber()==mn_1)
{
if(OrderCloseTime()>dt)
{
dt=OrderCloseTime();
type=OrderType();
}
}
}
return(type);
}
Спасибо Бро, но че то сделки не открываются(
19.02.2015, 08:28
Аватар для zpro
zpro zpro вне форума Почётный гражданин
Регистрация: 07.10.2014 / Адрес: ЦО / Сообщений: 445
Поблагодарили 475 раз(а) / Репутация: 480
Примерно:
if(rsi<70 && LastType()==OP_BUY) - открываем SELL
if(rsi>70 && LastType()==OP_SELL) - открываем BUY
//-------------------------------------------------------------------+
int LastType()
{
int type=-1;
datetime dt=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(Symbol()==OrderSymbol() && OrderMagicNumber()==mn_1)
{
if(OrderCloseTime()>dt)
{
dt=OrderCloseTime();
type=OrderType();
}
}
}
return(type);
}
int lastType = LastType();
if(rsi<70 && (lastType==OP_BUY || lastType == -1)) - открываем SELL
if(rsi>70 && (lastType==OP_SELL || lastType == -1)) - открываем BUY
19.02.2015, 17:20
Аватар для Milevshi
Milevshi Milevshi вне форума Активный участник
Регистрация: 18.05.2013 / Сообщений: 46
Поблагодарили 43 раз(а) / Репутация: 44

По умолчанию нужна помощь

Коллеги, помогите выловить ошибку кода.
Задача – закрыть ордер через «5» минут после его открытия.
Вот алгоритм, который я использую:
if(OrdersTotal()>0)
{
for( i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC)
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(TimeCurrent() - OrderOpenTime() > timelimit * 60)
{
if(OrderType()==0) // Закрытие оредра на покупку
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDoub le(Bid,Digits),15,Red);
}
if(OrderType()==1) // Закрытие оредра на продажу
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDoub le(Ask,Digits),15,Red);
}
}
}
}
}
}
}
Когда смотришь историю тестов, ордера висять дольше… чем надо…не могу понять в чем причина…
Исходные данные:
Тестирую на таймфрейме – 30 мин. Способ тестирования – все тики.
19.02.2015, 18:08
Аватар для vladradon
vladradon vladradon на форуме Активный участник
Регистрация: 12.02.2015 / Сообщений: 208
Поблагодарили 71 раз(а) / Репутация: 70
  • Отправить сообщение для vladradon с помощью Skype™
Всем привет! Возникла проблема не могу дописать советник)) Вообщем сова открывает сделку когда rsi < 70 на продажу... аналогично и противоположную сторону с покупкой... Проблема в том что после закрытии ордера... по тейку или стопу... ордер снова открывается! Надо сделать так чтобы ордер открывался только 1 раз и в след раз открывался уже противоположный сигнал)) раньше пользовался last orderом, но щас не могу вспомнить)) Спасибо!
Привет! Ко мне обратился друг с просьбой тебе помочь. Я, как прогер, могу дописать код или что-то посоветовать, но мне нужна основа, чтобы все было корректно. Вариаций может быть много для такого простого алгоритма. Подобные вопросы я обычно решаю в течение часа - обратись ко мне в скайп - ник тот же.
19.02.2015, 18:58
Аватар для vladradon
vladradon vladradon на форуме Активный участник
Регистрация: 12.02.2015 / Сообщений: 208
Поблагодарили 71 раз(а) / Репутация: 70
  • Отправить сообщение для vladradon с помощью Skype™
Я не особо понимаю, зачем нужно для циклического сова делать проверки на осно истории, если изначально можно в той же строке определить какую-то переменную (любую), которая будет фиксировать направление предыдущей сделки... Т.е.: Когда уже доходит до {OrderSend(...) ; "переменная"=(переменная, которая исползуется при открытии ордера для обозначения направления торгов - OPBUY или OPSELL)}
которые уже при следующей проверке на открытие можно проверить на направление входа оператором if.
19.02.2015, 19:30
Регистрация: 13.03.2009 / Сообщений: 2,366
Поблагодарили 1,968 раз(а) / Репутация: 2045
Коллеги, помогите выловить ошибку кода.
Задача – закрыть ордер через «5» минут после его открытия.
Вот алгоритм, который я использую:
if(OrdersTotal()>0)
{
for( i=0;i<OrdersTotal();i++)
...
Когда смотришь историю тестов, ордера висять дольше… чем надо…не могу понять в чем причина…
Исходные данные:
Тестирую на таймфрейме – 30 мин. Способ тестирования – все тики.
не в том порядке перебираешь ордера.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
19.02.2015, 19:54
Аватар для Fractlr
Fractlr Fractlr вне форума Новичок форума
Регистрация: 15.12.2014 / Сообщений: 23
Поблагодарили 16 раз(а) / Репутация: 17
Buenas noches:
Me podria explicar como programar "Reverse Trade", por favor.
Gracias
20.02.2015, 15:42
Аватар для vladradon
vladradon vladradon на форуме Активный участник
Регистрация: 12.02.2015 / Сообщений: 208
Поблагодарили 71 раз(а) / Репутация: 70
  • Отправить сообщение для vladradon с помощью Skype™
не в том порядке перебираешь ордера.
Нет, в этом плане нет ошибок - код рабочий. А проблема была в расположении этой функции в самом коде сова. Все функции, отвечающие первостепенно за закрытие ордеров, должны в нужном порядке отрабатывать в начале кода по их стратегической значимости.)))
21.02.2015, 09:01
Аватар для sstyle
sstyle sstyle вне форума Активный участник
Регистрация: 06.01.2015 / Сообщений: 59
Поблагодарили 35 раз(а) / Репутация: 36
OnTick() это и есть start() только по новому.
Вызов трала надо делать внутри start(), эта функция выполняется с приходом тика.
Ну я и делал внутри старт, только не работало. когда заменил start() на OnTick то все заработало как надо. В тестере. А вот на реальном счете сделки не открывает и ошибок в журнале нет. Как будто робот не начинает работу. Как же быть?
21.02.2015, 09:47
Аватар для Milevshi
Milevshi Milevshi вне форума Активный участник
Регистрация: 18.05.2013 / Сообщений: 46
Поблагодарили 43 раз(а) / Репутация: 44
Спасибо за помощь, теперь все работает как надо!
21.02.2015, 10:35
Аватар для Milevshi
Milevshi Milevshi вне форума Активный участник
Регистрация: 18.05.2013 / Сообщений: 46
Поблагодарили 43 раз(а) / Репутация: 44

По умолчанию Спасибо за помощь

Я не особо понимаю, зачем нужно для циклического сова делать проверки на осно истории, если изначально можно в той же строке определить какую-то переменную (любую), которая будет фиксировать направление предыдущей сделки... Т.е.: Когда уже доходит до {OrderSend(...) ; "переменная"=(переменная, которая исползуется при открытии ордера для обозначения направления торгов - OPBUY или OPSELL)}
которые уже при следующей проверке на открытие можно проверить на направление входа оператором if.

Спасибо за помощь
21.02.2015, 16:18
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Я не особо понимаю, зачем нужно для циклического сова делать проверки на осно истории, если изначально можно в той же строке определить какую-то переменную (любую), которая будет фиксировать направление предыдущей сделки... Т.е.: Когда уже доходит до {OrderSend(...) ; "переменная"=(переменная, которая исползуется при открытии ордера для обозначения направления торгов - OPBUY или OPSELL)}
которые уже при следующей проверке на открытие можно проверить на направление входа оператором if.
Если сов нужно будет отключить и снова включить?
Даже на vps иногда перегружают сервера.
Если он будет присваивать значение переменной пробегая по истории, то это позволит ему подхватывать ордера на лету.
21.02.2015, 16:53
Аватар для vladradon
vladradon vladradon на форуме Активный участник
Регистрация: 12.02.2015 / Сообщений: 208
Поблагодарили 71 раз(а) / Репутация: 70
  • Отправить сообщение для vladradon с помощью Skype™
Если сов нужно будет отключить и снова включить?
Даже на vps иногда перегружают сервера.
Если он будет присваивать значение переменной пробегая по истории, то это позволит ему подхватывать ордера на лету.
Я обычно в таком случае использую глобальные переменные терминала и в нужном месте программы их записываю (или при определенных обстоятельствах по коду), а они хранятся в отдельном файле терминала автоматически (в 5-м языке есть дополнительная функция записи в любой момент этих переменных в коде проги). А при перезапуске терминала или сова, в функции OnInit() прописываю обновление переменных на те, что сохранены в глобалках. Я имею ввиду функции GlobalVariableSet, GlobalVariableSGet и GlobalVariableCheck. VPS должен выполнять и хранить эти переменные так же, как обычный терминал. Если в имена переменных нужно внести дополнительные данные, чтобы, к примеру разграничить сов по меджикам или комментам для одного счета, то использую функцию StringConcatenate, которая к основному имени добавляет либо меджик, либо коммент и т.п. Описание по этим функциям есть в документации по языку. У меня мультивалютник на 378 комбинаций пар пар уже больше года работает с использованием такого принципа сохранения переменных для ситуаций с перезагрузкой сова или всего терминала и все четко работает, с учетом того, что переменных хранится ооочень много.))
А в случае, если ты какое-то время сова не использовал и заново запустил с новыми настройками и тебе не нужно, чтобы именно по этому счету он поднимал инфу по старым ордерам, то твой алгоритм все равно эти данные поднимет - не устанавливать же именно для этого новый счет. А при такой ситуации можно просто из глобалок терминала удалить переменную, которая содержит последнее направление торговли и спокойно заново начать торговлю.

Последний раз редактировалось vladradon; 21.02.2015 в 17:33.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

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



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


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