Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы зря всё вместе решаете. Для MoneyManagement надо сделать сразу со старта блок для расчёта Лота. Смотрите любой эксперт в Сайте!
Вот я например написал
// проверка на минимальный уровень
if (Ask-VStopLossLong<VMin) VStopLossLong=Ask-VMin-10*MarketInfo(Symbol(),MODE_POINT);
то есть вычел еще 10 единци и ордер выставился!!!
Я согласен, что должен быть Ask, а по поводу все вместе рашаю - это я тут написал так, что бы показать то, как я думаю, то есть логику расчета стоп-лосса и тейк-профита. Но вот он не выставляется хоть убей, а если написать как вы говорите, то есть вместо double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); использовать только double VMin=MarketInfo(Symbol(),MODE_STOPLEVEL);, то он выставляется, только загвоздка в том, что мне кажется что это не минимум :(.
СЛ и ТП долхны быть целыми, а потом умножаешь на Point! Разбирайтесь, когда в голове каша, "убей" не поможет!
Я согласен, что должен быть Ask, а по поводу все вместе рашаю - это я тут написал так, что бы показать то, как я думаю, то есть логику расчета стоп-лосса и тейк-профита. Но вот он не выставляется хоть убей, а если написать как вы говорите, то есть вместо double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL); использовать только double VMin=MarketInfo(Symbol(),MODE_STOPLEVEL);, то он выставляется, только загвоздка в том, что мне кажется что это не минимум :(.
khorosh, first_may вы не правы насчёт Ask.
Вот ссылка, почитайте оба ещё раз учебник (там внизу даже есть пример выставления ордера BUY): https://docs.mql4.com/ru/trading/ordersend
Рабочий код с первого поста выглядит так:
СЛ и ТП долхны быть целыми, а потом умножаешь на Point! Разбирайтесь, когда в голове каша, "убей" не поможет!
СЛ и ТП долхны быть целыми - понятно, возможно в этом ошибка.
А как же тогда посчитать 1% прибыли/убытка от точки входа? Допустим Ask=202,24, тогда можно рассчитать VStopLossLong=202,24*(1-1/100)=200,22, а VTakeProfitLong=202,24*(1+1/100)=200,44. Мне надо их как то сделать целыми, что бы потом умножить на Point=0.0.1. Так что ли: VStopLossLong=202,24*(1-1/100)*100* Point =200,22 ?
khorosh, first_may вы не правы насчёт Ask.
Вот ссылка, почитайте ещё раз учебник (там внизу даже есть пример выставления ордера BUY): https://docs.mql4.com/ru/trading/ordersend
Рабочий код с первого поста выглядит так:
Я не считаю что, если ставить бид, то это будет фатальная ошибка. Но всё таки правильнее будет аск. Чтобы сделать вывод как лучше, рассчитайте чему будет равен убыток в пунктах при срабатывании стоплосса, для вариатов аск и бид и тогда можно сделать вывод. Я это уже неоднократно объяснял на форуме, поэтому предлагаю это проверить вам.
СЛ и ТП долхны быть целыми - понятно, возможно в этом ошибка.
А как же тогда посчитать 1% прибыли/убытка от точки входа? Допустим Ask=202,24, тогда можно рассчитать VStopLossLong=202,24*(1-1/100)=200,22, а VTakeProfitLong=202,24*(1+1/100)=200,44. Мне надо их как то сделать целыми, что бы потом умножить на Point=0.0.1. Так что ли: VStopLossLong=202,24*(1-1/100)*100* Point =200,22 ?
% надо рассчитывать не от Аsk, а от AccountFreeMargin()! Cмотрите Учебник, Документацию и в КодеБэйс эксперты! Вперёд!
После нашей дискуссии получилось вот что:
double StopLoss=0.1; // процент убытка
double TakeProfit=0.1; // процент прибыли
double MinLot=MarketInfo(Symbol(),MODE_MINLOT); // Минимальный размер лота
double VMin=MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_STOPLEVEL);
double VStopLossLong=Bid*(1-StopLoss/100); // стоп-лосс для лонга
double VTakeProfitLong=Ask*(1+TakeProfit/100); // тейк-профит для лонга
double VStopLossShort=Ask*(1+StopLoss/100); // стоп-лосс для шорта
double VTakeProfitShort=Bid*(1-TakeProfit/100); // тейк-профит для шорта
// проверка на минимальный уровень
if (Bid-VStopLossLong<VMin) VStopLossLong=Bid-VMin;
if (VTakeProfitLong-Ask<VMin) VTakeProfitLong=Ask+VMin;
if (VStopLossShort-Ask<VMin) VStopLossShort=Ask+VMin;
if (Bid-VTakeProfitShort<VMin) VTakeProfitShort=Bid-VMin;
VStopLossLong=NormalizeDouble(VStopLossLong,MarketInfo(Symbol(),MODE_DIGITS));
VTakeProfitLong=NormalizeDouble(VTakeProfitLong,MarketInfo(Symbol(),MODE_DIGITS));
VStopLossShort=NormalizeDouble(VStopLossShort,MarketInfo(Symbol(),MODE_DIGITS));
VTakeProfitShort=NormalizeDouble(VTakeProfitShort,MarketInfo(Symbol(),MODE_DIGITS));
OrderSend(Symbol(),OP_BUY,MinLot,Ask,0,VStopLossLong,VTakeProfitLong,"BUY: Test",16382,0,Green);
Вроде теперь выставляется.
% надо рассчитывать не от Аsk, а от AccountFreeMargin()! Cмотрите Учебник, Документы и в КодеБэйс эксперты! Вперёд!
Я имел введу что закрыть позицию при достижении уровня прибыли в 1%.
Я имел введу что закрыть позицию при достижении уровня прибыли в 1%.
1% от свободной маржи, пользуясь SRC: