Ответить
25.11.2015, 14:23
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
предпосылка и/или цель - непонятны.
т.е. NormalizeDouble не подходит по каким-то причинам, и нужно сделать тоже самое, но через отнять/прибавить?
Значение цены дели на шаг. То что получилось округли до целого и умнож на шаг цены.
MathRound((Bid+X)/PriceStep)*PriceStep;
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
gush , Viko2000 
26.11.2015, 00:21
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 271
Поблагодарили 86 раз(а) / Репутация: 86
сигнал мастерю, на примере селл:
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") 

Ну, если ты посмотришь на график внимательно, то цена всё таки колеблется относительно "круглого " уровня, поэтому анализируй некий интервал цены,за некий интервал времени, а не её абсолютное в один момент времени. Тут надо помнить, что, то что ты видишь на графике, не совсем, то что на самом деле происходило. Наблюдай за ценой, иначе не понять. Лучше, начать с анализа истории, и в коде, с ведением журнала состояния цены, в твоём случае, возле круглых уровней. Сразу, однозначно не прохаваешь, надо мозгом понять.
Совет по сути, не обессудь.
gush 
27.11.2015, 17:29
Аватар для gush
gush gush вне форума бродяга
Регистрация: 24.01.2011 / Сообщений: 2,521
Поблагодарили 5,292 раз(а) / Репутация: 5508
Значение цены дели на шаг. То что получилось округли до целого и умнож на шаг цены.
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 - сразу продаем!!!
Как это сделать? Подскажите! Расчет!
больше молока получит тот котенок, который больше всех пищит..
27.11.2015, 18:54
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
расчет сигнала у меня раньше был так..
если цена прошла настраиваемое количество пунктов через - 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.
gush , Viko2000 
27.11.2015, 20:05
Регистрация: 13.03.2009 / Сообщений: 2,357
Поблагодарили 1,965 раз(а) / Репутация: 2042
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
Чужие программы не переделываю!
gush , Viko2000 
28.11.2015, 04:33
Аватар для gush
gush gush вне форума бродяга
Регистрация: 24.01.2011 / Сообщений: 2,521
Поблагодарили 5,292 раз(а) / Репутация: 5508
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;
супер! Так как и хотелось!!! Спасибо!!!
больше молока получит тот котенок, который больше всех пищит..
30.11.2015, 09:46
Аватар для djasper
djasper djasper вне форума Интересующийся
Регистрация: 26.03.2013 / Сообщений: 16
Поблагодарили 0 раз(а) / Репутация: 1
Здарова ребята, подскажите пожалуйста функцию нахождения фракталов на текущем таймфрейме и на старших.
Например: сов торгует на тф М5 - мне нужно найти первый и второй верхние и нижние фракталы
Нажмите на изображение для увеличения
Название: eurusd-m30-fxopen-investments-inc.png
Просмотров: 3
Размер:	3.3 Кб
ID:	226625
30.11.2015, 14:17
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Здарова ребята, подскажите пожалуйста функцию нахождения фракталов на текущем таймфрейме и на старших.
Например: сов торгует на тф М5 - мне нужно найти первый и второй верхние и нижние фракталы
Вложение 226625
А документацию почитать? -http://docs.mql4.com/ru/indicators/ifractals
02.12.2015, 11:21
Аватар для rezaika
rezaika rezaika вне форума Местный житель
Регистрация: 10.09.2008 / Сообщений: 36
Поблагодарили 18 раз(а) / Репутация: 18
Привет Всем! Уважаемые программисты , я пока только начинаю немного программировать свои советники и столкнулся с такой проблемой, когда советник после закрытия ордера продолжает работать по своему коду и естественно не всегда это нужно тк условия входа в сделку уже не выгодны , подскажите функцию или строку кода для остановки работы советника или переключения его в паузу.Буду очень признателен за Вашу помощь.

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

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

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

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
Чужие программы не переделываю!
07.12.2015, 16:00
Аватар для derzerack
derzerack derzerack вне форума Новичок форума
Регистрация: 30.11.2012 / Сообщений: 12
Поблагодарили 1 раз в 1 сообщении / Репутация: 7
Большое спасибо! Разобрался, очередной граль в мусорку)
10.12.2015, 14:42
Аватар для Vik940
Vik940 Vik940 вне форума Почётный гражданин
Регистрация: 26.05.2012 / Сообщений: 139
Поблагодарили 340 раз(а) / Репутация: 341
Привет всем!
Уважаемые можно-ли закрепить уровень 0. Допустим на примере Масд что-бы закреплялся не минимум и максимум, а 0.
10.12.2015, 19:03
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
Привет всем!
Уважаемые можно-ли закрепить уровень 0. Допустим на примере Масд что-бы закреплялся не минимум и максимум, а 0.
Можно.
#property indicator_minimum 0
или
#property indicator_maximum 0
тогда уровень 0 будет закреплён внизу или вверху...

а если надо в середине окна, то минимум и максимум должны быть на одном расстоянии в - и в + но это ты не хочешь... а другого не дано.
Ответить

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


Опции темы

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

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



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


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