Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1154
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, друзья.
Как сделать, чтобы значения стоплоса, текпрофита и трейлинга выдавалось не в пунктах, а процентах.
Вот такая формула сильно загромождает и совсем не работает
StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits);
Хотелось бы простейший вид процента.
Double Stoploss = 0.05;
--------
Profit=Bid-Stoploss в процентах (пример корявый, но так для понимания)
Спасибо.
Корявый пример порождает корявый ответ. Для понимания надо понять от чего мерить проценты???
.. Кому нужна помощь в написании советника, можете писать мне . Помогу
помогите взять цену с нулевого бара, вот здесь обсуждение
https://www.mql5.com/ru/forum/160683/page237#comment_5350688
Корявый пример порождает корявый ответ. Для понимания надо понять от чего мерить проценты???
Понял.
Попытаюсь яснее.
Изначально у меня код выглядит так:
extern double StopLoss =0;
extern double TakeProfit =0;
extern double SL_PERCENT = 0.02;
extern double TP_PERCENT = 0.03;
extern double TRALL_PERCENT = 0.01;
extern double Lots =0.5;
Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,NormalizeDouble(OrderOpenPrice+(OrderOpenPrice + StopLoss)/100*SL_PERCENT,Digits),NormalizeDouble(OrderOpenPrice-(OrderOpenPrice - TakeProfit)/100*TP_PERCENT,Digits),"",Magic,0,Red);
StopLoss срабатывает, но не на 0.02%, а на 0.43%, что не корректно. TakeProfit не знаю, т.к. не довелось, но видимо тоже будет некорректно.
Есть у меня предположения, что код не верен.
Да и еще, может это важно. Ордера отркрываются на все депо пачкой на 3-4 пары. Иногда на пять.
Также я хочу для таких показателей, как: StopLoss, Takeprofit, TrailingStop задавать изменение не в пунктах, а в процентах.
Например,
1)Takeprofit=ОrderOpenPrice+%TP_PERCENT
2) Stoploss=ОrderOpenPrice-%SL_PERCENT
Т.е.
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,0,%,%,"",Magic,0,clrGreen);
И вот как дальше модифицировать для трейлинга вообще не соображу.
Я взял образец из учебника, но что-то явно делаю не так.
3.) TrailingStop=Bid-%TRALL_PERCENT
case 0: // Ордер Buy
if (NormalizeDouble(OrderOpenPrice-SL*Point,Digits)*SL_PERCENT/100<=(OrderOpenPrice-Ask) // Если ниже желаем.
NormalizeDouble(Bid-(Bid-TS)/100*TRAL_PERCENT,Digits)
|| NormalizeDouble(SL,Digits)==0)
{
SL=Bid-TS*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
Я очень надеюсь, что смог объяснить.
Спасибо.
Как грамотно реализовать открытие сделки (отправки OrderSend) строго на начале свечи - OnTimer и/или OnTick,
дабы не сильно нагружать терминал (открыто и отслеживается одновременно 20-30 графиков)?
обнаружилось что задержка при появлении нового тика в начале свечи может быть до 5-10 сек при этом разрыв с предыдущим тиком значительный (негативно для условий сделки)
p.s. при этом в эксперте предполагается предварительно уведомлять о возможной сделке за 1-2 минуты до открытия сделки, т.е. до начала открытия свечи.
Как грамотно реализовать открытие сделки (отправки OrderSend) строго на начале свечи - OnTimer и/или OnTick,
дабы не сильно нагружать терминал (открыто и отслеживается одновременно 20-30 графиков)?
обнаружилось что задержка при появлении нового тика в начале свечи может быть до 5-10 сек при этом разрыв с предыдущим тиком значительный (негативно для условий сделки)
p.s. при этом в эксперте предполагается предварительно уведомлять о возможной сделке за 1-2 минуты до открытия сделки, т.е. до начала открытия свечи.
Вам нужно в таймере просматривать все открытые графики на предмет появления нового бара.
Придётся создавать массив указателей на экземпляры классов - по одному классу на каждый таймфрейм каждого открытого графика.
Про класс, отслеживающий открытие нового бара, можете почитать в этой статье.
Открываете график - добавляете его в массив открытых графиков. Закрываете график - удаляете его из массива.
В цикле в таймере проходитесь по массиву указателей на экземпляры классов и проверяете факт открытия нового бара, который класс вернёт в случае образования нового бара.
Вам нужно в таймере просматривать все открытые графики на предмет появления нового бара.
Придётся создавать массив указателей на экземпляры классов ...
а средствами MQL4?
и как быть с - "...предполагается предварительно уведомлять о возможной сделке за 1-2 минуты до открытия сделки, т.е. до начала открытия свечи...", т.е. внутри бара
Приглашаю в тему https://www.mql5.com/ru/forum/208120#comment_5412193
Не можем найти консенсус.
Перед выводом на экран типа doubl делаю его нормализацию до 2-х знаков после запятой, но иногда она не срабатывает. Почему? Вот часть кода.
Тип prof[] - string
А глючит так
Перед выводом на экран типа doubl делаю его нормализацию до 2-х знаков после запятой, но иногда она не срабатывает. Почему? Вот часть кода.
Тип prof[] - string
А глючит так
DoubleToString()
DoubleToString
Преобразование числового значения в текстовую строку.
string DoubleToString(
double value, // число
int digits=8 // кол-во знаков после запятой
);
Параметры
Возвращаемое значение
Пример:
Print("DoubleToString(120.0+M_PI) : ",DoubleToString(120.0+M_PI));
Print("DoubleToString(120.0+M_PI,16) : ",DoubleToString(120.0+M_PI,16));
Print("DoubleToString(120.0+M_PI,-16) : ",DoubleToString(120.0+M_PI,-16));
Print("DoubleToString(120.0+M_PI,-1) : ",DoubleToString(120.0+M_PI,-1));
Print("DoubleToString(120.0+M_PI,-20) : ",DoubleToString(120.0+M_PI,-20));
Какой-то дивный баг что ли.
Добавляем во входных:
input datetime test =0;