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

Что думаете насчет этого, может я велосипед изобретаю и есть
готовое решение ?
sesame вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 17.02.2015, 11:14   #3564 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от sesame Посмотреть сообщение
Всем привет, подскажите как лучше реализовать алерт для
графической фигуры треугольника, для начала нужно нарисовать
сам треугольник (чтобы он не перерисовывался), а когда цена
выходит за границы треугольника, срабатывает алерт, анализ
фигур должен работать в фоновом режиме, не открывая графика,
вот проблема, с которой столкнулся, если есть угол наклона
(как его найти?), надо узнать цену, на которой находится
линия в текущий момент.
Линия же находится на разном уровне цены на разных свечах нам
нужен не наклон линии, а именно цена, на которой линия
стоит в текущий момент, если бы линия была горизонтальная, то
цена уровня линии на каждой свече была бы одна и та же.
В этом пространстве находятся котировки по X координате время
по Y координате цена, узнав масштаб графика и наклон линии,
проблема будет решена.

Что думаете насчет этого, может я велосипед изобретаю и есть
готовое решение ?
Прямая линия строится по 2 точкам. Зная координаты этих точек можно посчитать любые точки этой линии. Никаких углов и масштабов графика не надо. Если между точками разница в 100 пунктов и 20 баров. Значит, на линии, цена меняется 100/20=5 пунктов за бар.
Если первая точка находится на цене 1.5674, на следующем баре она будет иметь цену 1.5679, дальше на 1.5684...
Подобные задачки решают в школе, где то в начале.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
sesame (17.02.2015)
Старый 18.02.2015, 08:59   #3565 (permalink)
Местный знаток
 
Аватар для abuuuuuu
 
Регистрация: 08.08.2013
Сообщений: 287
Репутация: 717
abuuuuuu - abuuuuuu - abuuuuuu - abuuuuuu - abuuuuuu - abuuuuuu - abuuuuuu -
Сказал(а) спасибо: 3,099
Поблагодарили 716 раз(а) в 162 сообщениях
Поинты: 16
как сделать чтобы советник открывал только один ордер на одном баре ?
не предлагайте if(orderstotal()==0)
например советник проверял бы открытие последнего ордера и текущее время и потом открылся ордер
заранее спасибо
abuuuuuu вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 18.02.2015, 10:31   #3566 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от abuuuuuu Посмотреть сообщение
как сделать чтобы советник открывал только один ордер на одном баре ?
не предлагайте if(orderstotal()==0)
например советник проверял бы открытие последнего ордера и текущее время и потом открылся ордер
заранее спасибо
_http://forum.mql4.com/ru/38949/page4#434234
_http://forum.mql4.com/ru/38949/page4#434235
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
abuuuuuu (18.02.2015)
Старый 18.02.2015, 10:58   #3567 (permalink)
Местный житель
 
Аватар для no-namer
 
Регистрация: 30.12.2008
Сообщений: 7
Репутация: 1
no-namer
Сказал(а) спасибо: 2
Поблагодарили 1 раз в 1 сообщении
Поинты: 2
Сообщение от Айбек Посмотреть сообщение
Всем привет! Возникла проблема не могу дописать советник)) Вообщем сова открывает сделку когда 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);
}
no-namer вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.02.2015, 08:25   #3568 (permalink)
Активный участник
 
Аватар для Айбек
 
Регистрация: 27.09.2011
Сообщений: 65
Репутация: 39
Айбек
Сказал(а) спасибо: 12
Поблагодарили 38 раз(а) в 17 сообщениях
Поинты: 12
Сообщение от no-namer Посмотреть сообщение
Примерно:
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   #3569 (permalink)
Почётный гражданин
 
Аватар для zpro
 
Регистрация: 07.10.2014
Адрес: ЦО
Сообщений: 445
Репутация: 478
zpro - zpro - zpro - zpro - zpro -
Сказал(а) спасибо: 126
Поблагодарили 473 раз(а) в 171 сообщениях
Поинты: 90
Сообщение от no-namer Посмотреть сообщение
Примерно:
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

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
zpro вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Айбек (19.02.2015)
Старый 19.02.2015, 17:20   #3570 (permalink)
Активный участник
 
Аватар для Milevshi
 
Регистрация: 18.05.2013
Сообщений: 46
Репутация: 44
Milevshi
Сказал(а) спасибо: 8
Поблагодарили 43 раз(а) в 14 сообщениях
Поинты: 47

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


Коллеги, помогите выловить ошибку кода.
Задача – закрыть ордер через «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 мин. Способ тестирования – все тики.
Milevshi вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.02.2015, 18:08   #3571 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 105
Репутация: 38
vladradon
Сказал(а) спасибо: 23
Поблагодарили 38 раз(а) в 26 сообщениях
Поинты: 170
Сообщение от Айбек Посмотреть сообщение
Всем привет! Возникла проблема не могу дописать советник)) Вообщем сова открывает сделку когда rsi < 70 на продажу... аналогично и противоположную сторону с покупкой... Проблема в том что после закрытии ордера... по тейку или стопу... ордер снова открывается! Надо сделать так чтобы ордер открывался только 1 раз и в след раз открывался уже противоположный сигнал)) раньше пользовался last orderом, но щас не могу вспомнить)) Спасибо!
Привет! Ко мне обратился друг с просьбой тебе помочь. Я, как прогер, могу дописать код или что-то посоветовать, но мне нужна основа, чтобы все было корректно. Вариаций может быть много для такого простого алгоритма. Подобные вопросы я обычно решаю в течение часа - обратись ко мне в скайп - ник тот же.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.02.2015, 18:58   #3572 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 105
Репутация: 38
vladradon
Сказал(а) спасибо: 23
Поблагодарили 38 раз(а) в 26 сообщениях
Поинты: 170
Я не особо понимаю, зачем нужно для циклического сова делать проверки на осно истории, если изначально можно в той же строке определить какую-то переменную (любую), которая будет фиксировать направление предыдущей сделки... Т.е.: Когда уже доходит до {OrderSend(...) ; "переменная"=(переменная, которая исползуется при открытии ордера для обозначения направления торгов - OPBUY или OPSELL)}
которые уже при следующей проверке на открытие можно проверить на направление входа оператором if.
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milevshi (21.02.2015)
Старый 19.02.2015, 19:30   #3573 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,255
Репутация: 1963
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 349
Поблагодарили 1,892 раз(а) в 1,069 сообщениях
Поинты: 1276
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Milevshi Посмотреть сообщение
Коллеги, помогите выловить ошибку кода.
Задача – закрыть ордер через «5» минут после его открытия.
Вот алгоритм, который я использую:
if(OrdersTotal()>0)
{
for( i=0;i<OrdersTotal();i++)
...
Когда смотришь историю тестов, ордера висять дольше… чем надо…не могу понять в чем причина…
Исходные данные:
Тестирую на таймфрейме – 30 мин. Способ тестирования – все тики.
не в том порядке перебираешь ордера.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.02.2015, 19:54   #3574 (permalink)
Новичок форума
 
Аватар для Fractlr
 
Регистрация: 15.12.2014
Сообщений: 23
Репутация: 17
Fractlr
Сказал(а) спасибо: 363
Поблагодарили 16 раз(а) в 4 сообщениях
Поинты: 6
Buenas noches:
Me podria explicar como programar "Reverse Trade", por favor.
Gracias
Fractlr вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 20.02.2015, 15:42   #3575 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 105
Репутация: 38
vladradon
Сказал(а) спасибо: 23
Поблагодарили 38 раз(а) в 26 сообщениях
Поинты: 170
Сообщение от Ugar Посмотреть сообщение
не в том порядке перебираешь ордера.
Нет, в этом плане нет ошибок - код рабочий. А проблема была в расположении этой функции в самом коде сова. Все функции, отвечающие первостепенно за закрытие ордеров, должны в нужном порядке отрабатывать в начале кода по их стратегической значимости.)))
vladradon на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milevshi (21.02.2015)
Старый 21.02.2015, 09:01   #3576 (permalink)
Активный участник
 
Аватар для sstyle
 
Регистрация: 06.01.2015
Сообщений: 59
Репутация: 36
sstyle
Сказал(а) спасибо: 5
Поблагодарили 35 раз(а) в 14 сообщениях
Поинты: 60
Сообщение от Ugar Посмотреть сообщение
OnTick() это и есть start() только по новому.
Вызов трала надо делать внутри start(), эта функция выполняется с приходом тика.
Ну я и делал внутри старт, только не работало. когда заменил start() на OnTick то все заработало как надо. В тестере. А вот на реальном счете сделки не открывает и ошибок в журнале нет. Как будто робот не начинает работу. Как же быть?
sstyle вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 21.02.2015, 09:47   #3577 (permalink)
Активный участник
 
Аватар для Milevshi
 
Регистрация: 18.05.2013
Сообщений: 46
Репутация: 44
Milevshi
Сказал(а) спасибо: 8
Поблагодарили 43 раз(а) в 14 сообщениях
Поинты: 47
Спасибо за помощь, теперь все работает как надо!
Milevshi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
vladradon (21.02.2015)
Старый 21.02.2015, 10:35   #3578 (permalink)
Активный участник
 
Аватар для Milevshi
 
Регистрация: 18.05.2013
Сообщений: 46
Репутация: 44
Milevshi
Сказал(а) спасибо: 8
Поблагодарили 43 раз(а) в 14 сообщениях
Поинты: 47

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


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

Спасибо за помощь
Milevshi вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
vladradon (21.02.2015)
Старый 21.02.2015, 16:18   #3579 (permalink)
Почётный гражданин
 
Аватар для matro3
 
Регистрация: 18.07.2013
Сообщений: 349
Репутация: 344
matro3 matro3 matro3 matro3
Сказал(а) спасибо: 25
Поблагодарили 340 раз(а) в 143 сообщениях
Поинты: 160
Сообщение от vladradon Посмотреть сообщение
Я не особо понимаю, зачем нужно для циклического сова делать проверки на осно истории, если изначально можно в той же строке определить какую-то переменную (любую), которая будет фиксировать направление предыдущей сделки... Т.е.: Когда уже доходит до {OrderSend(...) ; "переменная"=(переменная, которая исползуется при открытии ордера для обозначения направления торгов - OPBUY или OPSELL)}
которые уже при следующей проверке на открытие можно проверить на направление входа оператором if.
Если сов нужно будет отключить и снова включить?
Даже на vps иногда перегружают сервера.
Если он будет присваивать значение переменной пробегая по истории, то это позволит ему подхватывать ордера на лету.
matro3 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 21.02.2015, 16:53   #3580 (permalink)
Активный участник
 
Аватар для vladradon
 
Регистрация: 12.02.2015
Сообщений: 105
Репутация: 38
vladradon
Сказал(а) спасибо: 23
Поблагодарили 38 раз(а) в 26 сообщениях
Поинты: 170
Сообщение от matro3 Посмотреть сообщение
Если сов нужно будет отключить и снова включить?
Даже на vps иногда перегружают сервера.
Если он будет присваивать значение переменной пробегая по истории, то это позволит ему подхватывать ордера на лету.
Я обычно в таком случае использую глобальные переменные терминала и в нужном месте программы их записываю (или при определенных обстоятельствах по коду), а они хранятся в отдельном файле терминала автоматически (в 5-м языке есть дополнительная функция записи в любой момент этих переменных в коде проги). А при перезапуске терминала или сова, в функции OnInit() прописываю обновление переменных на те, что сохранены в глобалках. Я имею ввиду функции GlobalVariableSet, GlobalVariableSGet и GlobalVariableCheck. VPS должен выполнять и хранить эти переменные так же, как обычный терминал. Если в имена переменных нужно внести дополнительные данные, чтобы, к примеру разграничить сов по меджикам или комментам для одного счета, то использую функцию StringConcatenate, которая к основному имени добавляет либо меджик, либо коммент и т.п. Описание по этим функциям есть в документации по языку. У меня мультивалютник на 378 комбинаций пар пар уже больше года работает с использованием такого принципа сохранения переменных для ситуаций с перезагрузкой сова или всего терминала и все четко работает, с учетом того, что переменных хранится ооочень много.))
А в случае, если ты какое-то время сова не использовал и заново запустил с новыми настройками и тебе не нужно, чтобы именно по этому счету он поднимал инфу по старым ордерам, то твой алгоритм все равно эти данные поднимет - не устанавливать же именно для этого новый счет. А при такой ситуации можно просто из глобалок терминала удалить переменную, которая содержит последнее направление торговли и спокойно заново начать торговлю.

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

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


Опции темы

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

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



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


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