Ответ
 
Опции темы
25.11.2015, 14:23
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от vlad_123 Посмотреть сообщение
предпосылка и/или цель - непонятны.
т.е. NormalizeDouble не подходит по каким-то причинам, и нужно сделать тоже самое, но через отнять/прибавить?
Значение цены дели на шаг. То что получилось округли до целого и умнож на шаг цены.
MathRound((Bid+X)/PriceStep)*PriceStep;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
gush (26.11.2015), Viko2000 (27.11.2015)
26.11.2015, 00:21
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от gush Посмотреть сообщение
сигнал мастерю, на примере селл:
PHP код:
   if(signal=="SELL")   {      bool set2=OrderSend(Symbol(),OP_SELLLots,Bid,slippage,sl_sell,tp_sell,Order_Comment,MagicNumber,0,NULL);        } //end if(signal=="SELL") 
как его оформить, чтобы внизу с текущих на целом уровне продавать...
а вверху покупать..
PHP код:
if(signal=="BUY")   {      bool set1=OrderSend(Symbol(),OP_BUYLots,Ask,slippage,sl_buy,tp_buy,Order_Comment,MagicNumber,0,NULL);   } //end if(signal=="BUY") 

Ну, если ты посмотришь на график внимательно, то цена всё таки колеблется относительно "круглого " уровня, поэтому анализируй некий интервал цены,за некий интервал времени, а не её абсолютное в один момент времени. Тут надо помнить, что, то что ты видишь на графике, не совсем, то что на самом деле происходило. Наблюдай за ценой, иначе не понять. Лучше, начать с анализа истории, и в коде, с ведением журнала состояния цены, в твоём случае, возле круглых уровней. Сразу, однозначно не прохаваешь, надо мозгом понять.
Совет по сути, не обессудь.
_SERG_ на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gush (27.11.2015)
27.11.2015, 17:29
Аватар для gush
gush бродяга
Регистрация: 24.01.2011 / Сообщений: 2,520
Поблагодарили 5,290 раз(а) / Репутация: 5506
Сообщение от Ugar Посмотреть сообщение
Значение цены дели на шаг. То что получилось округли до целого и умнож на шаг цены.
MathRound((Bid+X)/PriceStep)*PriceStep;
расчет сигнала у меня раньше был так..
если цена прошла настраиваемое количество пунктов через - Points_Open вниз/вверх, то:
PHP код:
//+--------------------------------------------------------+
//+                    расчёт сигнала                      +
    
string signal="NONE";
    if(!
pos)
    {
     if((
Open[0]-Bid)>Points_Open*Pointsignal "SELL";
     if((
Bid-Open[0])>Points_Open*Pointsignal "BUY";
    }
//+                    расчёт сигнала                      +   
//+--------------------------------------------------------+ 
а сейчас хочу эту формулу переделать:
если например цена сейчас плавает от 1.0501 до 1.0599.. то ничего не предпринимаем..
а если пошли вверх и зацепили ЦЕЛЫЙ уровень 1.0600 - сразу покупаем..
а если пошли вниз и зацепили ЦЕЛЫЙ уровень 1.0500 - сразу продаем!!!
Как это сделать? Подскажите! Расчет!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
больше молока получит тот котенок, который больше всех пищит..
gush вне форума Ответить с цитированиемОтветить с цитированием  
27.11.2015, 18:54
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от gush Посмотреть сообщение
расчет сигнала у меня раньше был так..
если цена прошла настраиваемое количество пунктов через - Points_Open вниз/вверх, то:
а сейчас хочу эту формулу переделать:
если например цена сейчас плавает от 1.0501 до 1.0599.. то ничего не предпринимаем..
а если пошли вверх и зацепили ЦЕЛЫЙ уровень 1.0600 - сразу покупаем..
а если пошли вниз и зацепили ЦЕЛЫЙ уровень 1.0500 - сразу продаем!!!
Как это сделать? Подскажите! Расчет!
double Level, PriceStep;
static double LastBid;
if(LastBid<_Point)LastBid=Bid;//Инициализация прошлой цены
PriceStep=100*_Point;//Шаг цены 100 пунктов.
Level=MathRound(Bid/PriceStep)*PriceStep;//Круглый уровень
//Если цена коснулась или пробила уровень снизу вверх
if(Bid-Level> -0.5*_Point && Level-LastBid>0.5*_Point)
{

}

//Если цена коснулась или пробила уровень сверху вниз
if(Level-Bid> -0.5*_Point && LastBid-Level>0.5*_Point)
{

}

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 27.11.2015 в 18:57.
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
gush (28.11.2015), Viko2000 (27.11.2015)
27.11.2015, 20:05
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от Ugar Посмотреть сообщение
double Level, PriceStep;
static double LastBid;
if(LastBid<_Point)LastBid=Bid;//Инициализация прошлой цены
PriceStep=100*_Point;//Шаг цены 100 пунктов.
Level=MathRound(Bid/PriceStep)*PriceStep;//Круглый уровень
//Если цена коснулась или пробила уровень снизу вверх
if(Bid-Level> -0.5*_Point && Level-LastBid>0.5*_Point)
{

}

//Если цена коснулась или пробила уровень сверху вниз
if(Level-Bid> -0.5*_Point && LastBid-Level>0.5*_Point)
{

}
Забыл добавить в конце
LastBid=Bid;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
gush (28.11.2015), Viko2000 (27.11.2015)
28.11.2015, 04:33
Аватар для gush
gush бродяга
Регистрация: 24.01.2011 / Сообщений: 2,520
Поблагодарили 5,290 раз(а) / Репутация: 5506
Сообщение от Ugar Посмотреть сообщение
double Level, PriceStep;
static double LastBid;
if(LastBid<_Point)LastBid=Bid;//Инициализация прошлой цены
PriceStep=100*_Point;//Шаг цены 100 пунктов.
Level=MathRound(Bid/PriceStep)*PriceStep;//Круглый уровень
//Если цена коснулась или пробила уровень снизу вверх
if(Bid-Level> -0.5*_Point && Level-LastBid>0.5*_Point)
{

}

//Если цена коснулась или пробила уровень сверху вниз
if(Level-Bid> -0.5*_Point && LastBid-Level>0.5*_Point)
{

}
Сообщение от Ugar Посмотреть сообщение
Забыл добавить в конце
LastBid=Bid;
супер! Так как и хотелось!!! Спасибо!!!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
больше молока получит тот котенок, который больше всех пищит..
gush вне форума Ответить с цитированиемОтветить с цитированием  
30.11.2015, 09:46
Аватар для djasper
djasper Интересующийся
Регистрация: 26.03.2013 / Сообщений: 16
Поблагодарили 0 раз(а) / Репутация: 1
Здарова ребята, подскажите пожалуйста функцию нахождения фракталов на текущем таймфрейме и на старших.
Например: сов торгует на тф М5 - мне нужно найти первый и второй верхние и нижние фракталы
Нажмите на изображение для увеличения
Название: eurusd-m30-fxopen-investments-inc.png
Просмотров: 0
Размер:	3.3 Кб
ID:	226625
djasper вне форума Ответить с цитированиемОтветить с цитированием  
30.11.2015, 14:17
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от djasper Посмотреть сообщение
Здарова ребята, подскажите пожалуйста функцию нахождения фракталов на текущем таймфрейме и на старших.
Например: сов торгует на тф М5 - мне нужно найти первый и второй верхние и нижние фракталы
Вложение 226625
А документацию почитать? -http://docs.mql4.com/ru/indicators/ifractals
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
02.12.2015, 11:21
Аватар для rezaika
rezaika Местный житель
Регистрация: 10.09.2008 / Сообщений: 36
Поблагодарили 18 раз(а) / Репутация: 18
Привет Всем! Уважаемые программисты , я пока только начинаю немного программировать свои советники и столкнулся с такой проблемой, когда советник после закрытия ордера продолжает работать по своему коду и естественно не всегда это нужно тк условия входа в сделку уже не выгодны , подскажите функцию или строку кода для остановки работы советника или переключения его в паузу.Буду очень признателен за Вашу помощь.

Последний раз редактировалось rezaika; 02.12.2015 в 11:40.
rezaika вне форума Ответить с цитированиемОтветить с цитированием  
02.12.2015, 11:42
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от rezaika Посмотреть сообщение
Привет Всем! Уважаемые программисты , я пока только начинаю немного программировать свои советники и столкнулся с такой проблемой, когда советник после закрытия ордера продолжает работать по своему коду и естественно не всегда это нужно тк условия входа в сделку уже не выгодно , подскажите функцию или строку кода для предотвращения, остановки работы советника или переключения его в паузу.Буду очень признателен за Вашу помощь.
Ну можно использовать ExpertRemove();
Или покруче TerminalClose();

А если до следующего сигнала, то надо пересмотреть условия сигнала. Что-то добавить, что будет выполнено в начале условия и не будет выполнено чуть позже. Например флаг направления сделки, или пересечение уровня индикатора, на первом баре было меньше на нулевом стало больше...
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
02.12.2015, 12:10
Аватар для rezaika
rezaika Местный житель
Регистрация: 10.09.2008 / Сообщений: 36
Поблагодарили 18 раз(а) / Репутация: 18
Спасибо! попробую разобраться с помощью функции ExpertRemove();-встроить ее в свой эксперт.
rezaika вне форума Ответить с цитированиемОтветить с цитированием  
02.12.2015, 21:07
Аватар для rezaika
rezaika Местный житель
Регистрация: 10.09.2008 / Сообщений: 36
Поблагодарили 18 раз(а) / Репутация: 18
AlexeyVik,снова решил обратиться к Вам за помощью, не получилось у меня с помощью ExpertRemove() решить проблему паузы между сделками, поэтому возник вопрос, а нельзя ли использовать функцию PauseBeforeTrade() для решения этой проблемы? Мне нужно что бы советник не входил в сделку после полученного профита или стоп лосса сразу же, а через некоторую паузу которую можно прописать в коде советника.Если можно подскажите вариант решения или может укажете ссылку на кусок кода или какой либо пример.Заранее благодарю за участие в моем вопросе.
rezaika вне форума Ответить с цитированиемОтветить с цитированием  
02.12.2015, 21:29
Аватар для CastEt
CastEt Активный участник
Регистрация: 19.10.2012 / Адрес: мАсква-рИка, сердце упокоит на века :-) / Сообщений: 159
Поблагодарили 53 раз(а) / Репутация: 51
какие паузы, у тя явные проблемы с постановкой задачи...
...ты говоришь о невыгодных условиях, значит у тебя есть нечто что определяет выгодные условия!
Так что-же мешает тебе проверять оные условия всякий раз перед открытием?

Ну ладно, если уж тебе так нужно время, опять-же добавь его в условие открытия сделки. Проверяй закрытие ордера, запоминай время, и в условии открытия пиши, что разница времени закрытия последнего ордера минус текущее время больше чего-то там...
CastEt вне форума Ответить с цитированиемОтветить с цитированием  
03.12.2015, 05:43
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от rezaika Посмотреть сообщение
AlexeyVik,снова решил обратиться к Вам за помощью, не получилось у меня с помощью ExpertRemove() решить проблему паузы между сделками, поэтому возник вопрос, а нельзя ли использовать функцию PauseBeforeTrade() для решения этой проблемы? Мне нужно что бы советник не входил в сделку после полученного профита или стоп лосса сразу же, а через некоторую паузу которую можно прописать в коде советника.Если можно подскажите вариант решения или может укажете ссылку на кусок кода или какой либо пример.Заранее благодарю за участие в моем вопросе.
ExpertRemove() и TerminalClose() это была ... шутка. А подсказка была дальше. Всё зависит от условий открытия сделки. Поэтому вариантов немыслимое количество.
Например вход по индикатору MACD... если выше нуля - открываем ордер Buy а если ниже нуля то открываем Sell... что получится если ордер закрылся а условие осталось верным??? Следовательно, чтобы избавиться от этого поможет проверка состояния индикатора на предыдущем(первом) баре. О чём я и говорил, на первом ниже на нулевом выше, то-есть произошло пересечение уровня вверх... Об остальных тонкостях я говорить пока не буду. Столкнёшься со следующими трудностями тогда и разберёмся.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
03.12.2015, 07:01
Аватар для rezaika
rezaika Местный житель
Регистрация: 10.09.2008 / Сообщений: 36
Поблагодарили 18 раз(а) / Репутация: 18
Всем привет! Я понял что мне надо сделать, попробую технически выполнить, то что Вы мне подсказали, шутки тоже могут быть полезны , я вчера нашел коды реально работающие с этими функциями и это было полезной информацией для меня.
rezaika вне форума Ответить с цитированиемОтветить с цитированием  
06.12.2015, 19:23
Аватар для derzerack
derzerack Новичок форума
Регистрация: 30.11.2012 / Сообщений: 12
Поблагодарили 1 раз в 1 сообщении / Репутация: 7

По умолчанию Ошибка 130, хотя SL и TP == 0


Уважаемые знатоки, прошу подсказать. Есть мой кривой (судя по всему) код.

if (PositionsTotal()==2 && TypeFirstOrder()==1 && OrdersTotal()==2)
{ ticket=OrderSend(Symbol(),OP_SELLSTOP,LotsOptimize d()*2,CenaOtkritiya(),Slippage,0,0,comment,Magik,0 ,Red);
}
//--------------------------------конец после 2 го ордера----------------------------------------

//--------------------------------После срабатывания 3 ордера------------------------------------
if (PositionsTotal()==3 && TypeFirstOrder()==1 && OrdersTotal()==3)
{
Cena=NormalizeDouble(CenaOtkritiya()+50*Point,Digi ts);
ticket=OrderSend(Symbol(),OP_BUYSTOP,LotsOptimized ()*2,Cena,Slippage,0,0,comment,Magik,0,Blue);
}

Всё это повторяется несколько раз с приростом количества открытых сделок. Беда в том что на 8 повторе после установки отложки она (отложка) сразу же удаляется и в журнал выдаёт ошибку 130 Неправильные стопы.
Никак не могу разобраться почему возникает ошибка, и почему ордер удаляется, ведь код абсолютно одинаков за исключением количества открытых ордеров.
Заранее благодарен за помощь.
derzerack вне форума Ответить с цитированиемОтветить с цитированием  
06.12.2015, 19:44
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от derzerack Посмотреть сообщение
Уважаемые знатоки, прошу подсказать. Есть мой кривой (судя по всему) код.

if (PositionsTotal()==2 && TypeFirstOrder()==1 && OrdersTotal()==2)
{ ticket=OrderSend(Symbol(),OP_SELLSTOP,LotsOptimize d()*2,CenaOtkritiya(),Slippage,0,0,comment,Magik,0 ,Red);
}
//--------------------------------конец после 2 го ордера----------------------------------------

//--------------------------------После срабатывания 3 ордера------------------------------------
if (PositionsTotal()==3 && TypeFirstOrder()==1 && OrdersTotal()==3)
{
Cena=NormalizeDouble(CenaOtkritiya()+50*Point,Digi ts);
ticket=OrderSend(Symbol(),OP_BUYSTOP,LotsOptimized ()*2,Cena,Slippage,0,0,comment,Magik,0,Blue);
}

Всё это повторяется несколько раз с приростом количества открытых сделок. Беда в том что на 8 повторе после установки отложки она (отложка) сразу же удаляется и в журнал выдаёт ошибку 130 Неправильные стопы.
Никак не могу разобраться почему возникает ошибка, и почему ордер удаляется, ведь код абсолютно одинаков за исключением количества открытых ордеров.
Заранее благодарен за помощь.
Отложенный ордер сам является стопом. По этому, при неправильной цене открытия будет ругаться на неправильные стопы. По этому он не ставится. А вот почему его удаляют смотри журнал терминала. Обычно ордер удаляет брокер при срабатывании, если открываемая позиция имеет некорректные параметры. Например если не хватает денег.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
derzerack (07.12.2015)
07.12.2015, 16:00
Аватар для derzerack
derzerack Новичок форума
Регистрация: 30.11.2012 / Сообщений: 12
Поблагодарили 1 раз в 1 сообщении / Репутация: 7
Большое спасибо! Разобрался, очередной граль в мусорку)
derzerack вне форума Ответить с цитированиемОтветить с цитированием  
10.12.2015, 14:42
Аватар для Vik940
Vik940 Почётный гражданин
Регистрация: 26.05.2012 / Сообщений: 138
Поблагодарили 339 раз(а) / Репутация: 340
Привет всем!
Уважаемые можно-ли закрепить уровень 0. Допустим на примере Масд что-бы закреплялся не минимум и максимум, а 0.
Vik940 на форуме Ответить с цитированиемОтветить с цитированием  
10.12.2015, 19:03
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от Vik940 Посмотреть сообщение
Привет всем!
Уважаемые можно-ли закрепить уровень 0. Допустим на примере Масд что-бы закреплялся не минимум и максимум, а 0.
Можно.
#property indicator_minimum 0
или
#property indicator_maximum 0
тогда уровень 0 будет закреплён внизу или вверху...

а если надо в середине окна, то минимум и максимум должны быть на одном расстоянии в - и в + но это ты не хочешь... а другого не дано.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
Vik940 (10.12.2015), Viko2000 (10.12.2015)
Ответ

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


Опции темы

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

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



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


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